vim中的条件ftplugin设置

时间:2017-11-16 09:57:29

标签: vim

我正在尝试根据项目实现不同的ts,sts,sw和(no)et设置。

我的想法是有一个别名,kvim f.ex.,看起来像alias kvim="vim -u ~/.kvimrc" ~/.kvimrc只包含:

let g:IsKernelCode="yes"
source ~/.vimrc

然后在我的~/.vim/ftplugin/c/c.vim我可以有以下部分:

if exists("g:IsKernelCode")
     "kernel-code-settings
...

当我打开单个文件时,此接缝可以正常工作。但是kvim -p a_bunch_of_files*.c只会导致第一个文件具有我的内核代码设置。

我错过了什么?

3 个答案:

答案 0 :(得分:1)

您应该查看以下Q / A,其中列出了大多数解决方案:Vim: apply settings on files in directory

从那时起,对于您感兴趣的简单设置,您还可以使用编辑器配置解决方案。

关于你的方法:使用bash别名运行带有全局变量集的vim,并从你的ftplugin测试这个变量:这不会扩展。

  • 每次你想要使用具有不同风格设置的项目时,你都需要编辑你的ftplugins。
  • 此外,您将无法使用应用于每个缓冲区的正确样式设置编辑来自不同项目的文件。

答案 1 :(得分:1)

如果您只想设置标志变量,则无需定义完整的替代vimrc配置。您可以使用--cmd

执行此操作
alias kvim='vim --cmd "let g:IsKernelCode=\"yes\""'

当您使用全局标记(带有g:前缀)时,这将适用于所有打开的文件(在启动时以及稍后与:edit交互)。对于每个打开的文件,将再次获取ftplugin/c/c.vim。您可以通过将:echomsg命令放在那里进行检查。

请注意,对项目或子目录使用特殊设置是一种常见用例。为此设计了各种解决方案;这是一个概述:

中央配置

如果可以集中配置特定命令/本地例外,您可以将此类autocmds放入~/.vimrc

:autocmd BufRead,BufNewFile /path/to/dir/* setlocal ts=4 sw=4

使用:setlocal代替:set,同样使用:map <buffer> ...:command! -buffer ...非常重要。

另一方面,如果您希望将特定配置与项目一起存储(并且不希望通过 modelines 将其嵌入到所有文件中),则可以使用以下两个选项:

具有内置功能的本地配置

如果你总是从项目根目录启动Vim,那就是内置的

:set exrc

允许从当前目录中读取.vimrc文件。您可以在其中放置:set ts=4 sw=4命令。

通过插件进行本地配置

否则,您需要插件的帮助; vim.org上有几个;我可以推荐localrc plugin(特别是my own enhancements),它甚至允许本地文件类型特定的配置。

请注意,从文件系统读取配置具有安全隐患;你可能想要:set secure

答案 2 :(得分:0)

我最终做的是alias kvim='vim --cmd '"'"'let g:IsKernelCode="yes"'"'",放弃了我的.kvimrc,并将.vim/ftplugin/c/c.vim保留在我的问题中。