仅在特定回购中工作时才在 vim 中加载 functions/mappings 等

Load functions/mappings etc in vim only when working in a specific repo

我想知道是否可以设置 vim 的方式,当我在某个 repo 中工作时,它会加载额外的 functions/mappings 等

类似于文件类型的 ftplugin,但类型不是由文件本身定义,而是由其位置定义(或由命令的结果定义,例如 hg path default)。

这可能会满足您的需要,但这只是一个示例。

augroup repo
    autocmd!
    autocmd BufReadPost * call RepoMappings()
augroup END

function! RepoMappings()
    let repo = '^/tmp/test/'
    if expand('%:p') =~# repo
        nnoremap <buffer> <f7> :echo 'yohoo'<cr>
    endif
endfunction

您更改 let repo = '^/tmp/test/',这将是您的回购路径的 prefix。在上面的示例中,仅对于 "repo" 中的文件,<f7> 映射有效。

您可以将 repo 变量扩展到一个列表,或者为不同的 repo 调用不同的函数...

有一件事没有处理,如果你打开一个新的缓冲区,没有文件名,你可能想检查pwd看它是否在"repo"中。但是你有想法,你可以暗示。如果需要,请自行处理。

试试吧。

中央配置

如果可以集中配置特定命令/本地异常,您可以将此类自动命令放入您的 ~/.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,它甚至允许本地文件类型特定的配置。

请注意,从文件系统读取配置具有安全隐患;你可能想要 :set secure.