有一种方法可以为每个单独的可选VIM配置,因此,当我编辑文件,要么:
>我做类似set group = 1来选择一个配置
>位于工作目录中的本地.vimrc用于自动设置配置
有几种方法可以做到这一点,其中大多数已经建议,但我想我会总结他们两个额外的:
>每个目录vimrc – 缺点是Vim必须在正确的目录中启动:如果你的项目在〜/ project1,你有〜/ project1 / .vim.custom和做cd〜 vim project1 / file.c,将无法找到自定义设置。
> Modelines – 非常有效,但缺点是需要将它们添加到所有文件(并记住将它们添加到新文件)
>目录特定的自动命令 – 这是非常有效的
>扫描文件中的特定标题(见下文) – 这是我在过去最常使用的,为不同公司或明确命名的项目工作
>打开文件时选中的每个目录vimrc(请参阅下文)。另一个相当容易实现,特别是如果你的项目代码都在一个地方。
扫描标题
在许多组织中,在每个源文件的顶部都有一个标准头(带有版权声明和项目名称等)。如果是这种情况,您可以让Vim自动扫描查找关键字的文件的第一行(例如10行)。如果找到它,它可以更改您的设置。我修改了它,使它比我使用的形式(它做很多其他事情)更简单,但创建一个〜/ .vim / after / filetype.vim(如果你还没有),并添加类似这个:
au FileType * call <SID>ConfigureFiletypes(expand("<amatch>")) " List of file types to customise let s:GROUPNAMETypes = ['c','cpp','vhdl','c.doxygen'] func! <SID>CheckForGROUPNAMECode() " Check if any of the first ten lines contain "GROUPNAME". " Read the first ten lines into a variable let header = getline(1) for i in range(2,10) let header = header . getline(i) endfor if header =~ '\<GROUPNAME\>' " Change the status line to make it clear which " group we're using setlocal statusline=%<%f\ (GROUPNAME)\ %h%m%r%=%-14.(%l,%c%V%)\ %P " Do other customisation here setlocal et " etc endif endfunc func! <SID>ConfigureFiletypes(filetype) if index(s:GROUPNAMETypes,a:filetype) != -1 call <SID>CheckForGROUPNAMECode() endif endfunc
每当打开任何类型的文件并设置文件类型(au FileType *行)时,将调用ConfigureFiletypes函数。这将检查文件类型是否在与当前组(GROUPNAME)相关联的文件类型列表中,在本例中为’c’,’cpp’,’vhdl’或’c.doxygen’。如果是,它调用CheckForGROUPNAMECode(),它读取文件的前10行,如果它们包含GROUPNAME,它做一些自定义。除了设置expandtabs或其他,这也改变状态栏以显示组名称,所以你知道它的工作一目了然。
打开时检查配置
很像JS Bangs的建议,有一个自定义配置文件可能是有用的。然而,不是加载它在vimrc,考虑类似这样,这将检查.c文件是否为与.c文件相同的目录中的.vim.custom打开。
au BufNewFile,BufRead *.c call CheckForCustomConfiguration() function! CheckForCustomConfiguration() " Check for .vim.custom in the directory containing the newly opened file let custom_config_file = expand('%:p:h') . '/.vim.custom' if filereadable(custom_config_file) exe 'source' custom_config_file endif endfunction