我正在尝试根据项目实现不同的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
只会导致第一个文件具有我的内核代码设置。
我错过了什么?
答案 0 :(得分:1)
您应该查看以下Q / A,其中列出了大多数解决方案:Vim: apply settings on files in directory
从那时起,对于您感兴趣的简单设置,您还可以使用编辑器配置解决方案。
关于你的方法:使用bash别名运行带有全局变量集的vim,并从你的ftplugin测试这个变量:这不会扩展。
答案 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
保留在我的问题中。