如何根据我在 vim 中访问的当前文件夹创建条件函数?
How create a conditional function based on the current folder that I am accessing in vim?
我有时在 linux 内核代码上工作,几乎每次我在编辑内核源代码时都忘记在 vim 上设置 :set noexptab
。
我的默认 vimrc
将制表符扩展为空格,但我希望有一个功能可以区分我当前是否正在编辑内核源代码,并相应地设置 expandtab
。
基本上内核源码都在linux-x.x.x目录下,根目录在哪里我打开的目录是vim。我相信这是起点。
有很多插件和其他方法可以处理项目特定的设置。我通常会强烈支持插件方法,因为它不会聚集你的 vimrc
。但在您的情况下,这意味着将项目设置文件复制到每个新的内核文件夹。所以在这种情况下,我会使用以下自动命令:
autocmd BufNewFile,BufRead /path/to/folder/linux-*/* set noexpandtab
我经常为每个项目(更普遍的是每个客户)设置一些设置,因此使用一种通用的方法来指定每个客户的设置对我很有用。我在我正在处理的任何项目的根目录中创建了一个名为 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>")
.)
我有时在 linux 内核代码上工作,几乎每次我在编辑内核源代码时都忘记在 vim 上设置 :set noexptab
。
我的默认 vimrc
将制表符扩展为空格,但我希望有一个功能可以区分我当前是否正在编辑内核源代码,并相应地设置 expandtab
。
基本上内核源码都在linux-x.x.x目录下,根目录在哪里我打开的目录是vim。我相信这是起点。
有很多插件和其他方法可以处理项目特定的设置。我通常会强烈支持插件方法,因为它不会聚集你的 vimrc
。但在您的情况下,这意味着将项目设置文件复制到每个新的内核文件夹。所以在这种情况下,我会使用以下自动命令:
autocmd BufNewFile,BufRead /path/to/folder/linux-*/* set noexpandtab
我经常为每个项目(更普遍的是每个客户)设置一些设置,因此使用一种通用的方法来指定每个客户的设置对我很有用。我在我正在处理的任何项目的根目录中创建了一个名为 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>")
.)