[英]Vim: <leader> key sequences are interfused with normal mode mappings
我正在尝试为“ cpp”文件类型定义映射:
autocmd! FileType cpp map <leader>c echo "test c"
autocmd! FileType cpp map <leader>r echo "test r"
autocmd! FileType cpp map <leader>t echo "test t"
我的领导者钥匙被重新定义:
let mapleader = ","
当我打开* .cpp文件时,只有一个映射可以按预期工作:“,t”序列使“ echo”发生,但是其他两个的行为就像没有定义任何映射:“,r”使Vim切换到替换模式,“,c”使Vim进入插入模式。
我究竟做错了什么?
我不知道您的示例(包括,c
)如何工作:您忘了在回声前加冒号。 但是还有另一个错误:根据帮助:
:au [tocmd]! [group] {event} {pat} [nested] {cmd}
删除与{event}和{pat}关联的所有自动命令,然后添加命令{cmd}。
因此,最后一个( ,t
)应该替换所有先前的。
您还应该考虑另一件事:
map
,而要使用noremap
:添加一些映射后,它可能一次使您免于进行调试工作。 <buffer>
{lhs}
之前的位置将<buffer>
作为参数添加到:noremap
:它将使该映射局部于当前缓冲区。 如果要重新获取vimrc,则应将所有命令放入augroup中:
augroup VimrcCpp autocmd! autocmd FileType cpp nnoremap <buffer> <leader>c :echo "c"<CR> autocmd FileType cpp nnoremap <buffer> <leader>r :echo "r"<CR> autocmd FileType cpp nnoremap <buffer> <leader>t :echo "t"<CR> augroup END
after
目录仅用于覆盖您不喜欢的选项(如果它们是由插件无条件定义的)之后。如果没有)映射冲突,请不要after
使用)。 我建议您将这些映射放在一个名为cpp.vim
的文件中,该文件位于~/.vim/after/ftplugin/
(或基于操作系统的任何等效文件)目录中。
只要有,Vim就会自动加载它
filetype plugin on
在您的.vimrc
。
这样可以节省您编写自动命令的时间,并使您的配置井井有条。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.