繁体   English   中英

Vim: <leader> 键序列与普通模式映射融合在一起

[英]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 )应该替换所有先前的。

您还应该考虑另一件事:

  1. 不要使用map ,而要使用noremap :添加一些映射后,它可能一次使您免于进行调试工作。
  2. 如果定义文件类型映射,通常应在<buffer> {lhs}之前的位置将<buffer>作为参数添加到:noremap :它将使该映射局部于当前缓冲区。
  3. 如果要重新获取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 
  4. 我会从vimrc中删除它,并将其添加到〜/ .vim / ftplugin / cpp.vim( after目录仅用于覆盖您不喜欢的选项(如果它们是由插件无条件定义的)之后。如果没有)映射冲突,请不要after使用)。

我建议您将这些映射放在一个名为cpp.vim的文件中,该文件位于~/.vim/after/ftplugin/ (或基于操作系统的任何等效文件)目录中。

只要有,Vim就会自动加载它

filetype plugin on

在您的.vimrc

这样可以节省您编写自动命令的时间,并使您的配置井井有条。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM