如何基于我在vim中访问的当前文件夹创建条件函数?

时间:2017-12-12 01:52:32

标签: vim mapping conditional hotkeys

我有时会研究linux内核代码,而且在编辑内核源代码时,我几乎忘记在vim上设置:set noexptab

我的默认vimrc将标签扩展为空格,但我希望有一个能够区分我当前是否正在编辑内核源代码的函数,并相应地设置expandtab

基本上,内核源代码位于 linux-x.x.x 目录中,这是我打开vim的根目录。我相信这是起点。

2 个答案:

答案 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>")。 )