我想知道是否有可能以某种方式设置vim,当我在某个仓库中工作时,它会加载其他函数/映射等。
与文件类型的ftplugin类似,但类型不是由文件本身定义,而是由其位置(或命令结果,例如hg path default)定义。
答案 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
。