只有在特定仓库中工作时才在vim中加载函数/映射等

时间:2015-11-11 14:07:05

标签: vim vim-plugin

我想知道是否有可能以某种方式设置vim,当我在某个仓库中工作时,它会加载其他函数/映射等。

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

2 个答案:

答案 0 :(得分:2)

这可能适合您的需要,但这只是一个例子。

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”中。但你明白了,你可以提出。如果需要,可以自己动手。

试一试。

答案 1 :(得分:2)

中央配置

如果可以集中配置特定命令/本地例外,您可以将此类autocmds放入~/.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