我有时会研究linux内核代码,而且在编辑内核源代码时,我几乎忘记在vim上设置:set noexptab
。
我的默认vimrc
将标签扩展为空格,但我希望有一个能够区分我当前是否正在编辑内核源代码的函数,并相应地设置expandtab
。
基本上,内核源代码位于 linux-x.x.x 目录中,这是我打开vim的根目录。我相信这是起点。
答案 0 :(得分:4)
有很多插件和其他方法来处理项目特定的设置。我通常会强烈支持插件方法,因为它不会对您的Matcher.when(123).is(String.class).then(s -> {
System.out.println("STRING");
return s;
})
.is(Integer.class).then(i -> {
System.out.println("INTEGER");
return i;
}).execute();
进行聚类。但在您的情况下,这意味着将项目设置文件复制到每个新的内核文件夹。所以在这种情况下我会使用以下自动命令:
vimrc
答案 1 :(得分:0)
我经常为每个项目设置一些设置(更常见的是每个客户端),因此对我来说有一个指定每个客户端设置的通用方法很有用。我在我正在处理的任何项目的根目录中创建了一个名为local.vimrc
的文件(或更一般地,名为<client-name>.vimrc
和符号链接),然后让它发挥其魔力......
function! LoadLocalVimrc(filename)
let l:filepath = fnamemodify(a:filename, ':h')
let l:file = findfile("local.vimrc", l:filepath . ";/")
if l:file != ''
let l:file = fnamemodify(l:file, ":p")
execute "source" l:file
execute "nnoremap <buffer> <F8> :$tabe " . s:this_file . "<CR>:sp " . l:file . "<CR>"
endif
endfunction
autocmd BufEnter * call LoadLocalVimrc(expand("<afile>"))
然后local.vimrc
使用map <buffer> ...
和setlocal
来保持使用它们的缓冲区的本地映射和设置(因为我有时会将来自不同客户端的文件加载到不同的选项卡中)。
(在上面的代码片段中,我正在重新映射 F8 以在新标签页中打开我的vimrc和local.vimrc; s:this_file
在其他地方被捕获为expand("<sfile>")
。 )