我希望在编辑<D-1>
文件时将<-
映射到R
。
我最初编辑~/.vim/bundle/Vim-R-plugin/ftdetect/r.vim
并添加了:
inoremap <D-1> <space><-<space>
然而,当我编辑所有类型的文件时,它可用 - 我测试了.py
和我的.vimrc
。
为什么会这样?
为解决这个问题,我补充道:
autocmd FileType r inoremap <D-1> <space><-<space>
到我的.vimrc
。现在,当我最初打开mvim时,地图不存在,但是一旦我打开*.r
文件,我的所有其他文件都存在映射。
为了测试发生了什么,我补充道:
autocmd FileType python inoremap <D-1> <space>==<space>
并发现当我既没有加载任何类型的文件,也没有映射<D-1>
;当我加载*.r
文件时,<D-1>
在<-
个文件中以及所有其他文件中提供了*.r
(根据需要)文件 - 当我下次打开*.py
文件时,<D-1>
在所有文件中产生了==
- 包括在*.r
文件中。
试验,我发现我最近打开的任何文件类型都会定义映射。编辑多个文件类型时,这是不合需要的行为。
此问题的最佳实践解决方案是什么?
我使用MacVim并使用vundle管理我的捆绑包。
答案 0 :(得分:2)
正如sylvain.joyeux在他的回答中提到的,你应该使用'ftplugin'目录来表示你的映射。但这不会解决映射问题。 <D-1>
映射可用于所有缓冲区的原因是您为所有缓冲区(全局)定义它。如果要将映射限制为某个特定缓冲区,则应使用<buffer>
:map
命令的特殊参数。所以你的映射命令应如下所示:
inoremap <buffer> <D-1> <space><-<space>
有关详细信息,请参阅:help :map-<buffer>
。
答案 1 :(得分:0)
ftdetect目录用于保存注册文件自动检测命令的文件,即通常格式为
的文件au BufNewFile,BufRead *.antlr setf antlr
ftplugin目录是您正在寻找的目录。但是,我不确定在这里添加r.vim是否会覆盖任何全局可用的R插件(如果有的话,我不确定)