vim中有两个关键映射冲突,需要知道原因

时间:2013-09-26 16:04:51

标签: vim vim-plugin

来自cscope的

我得到了这个nmap:

nmap <C-\>s :cs find s <C-R>=expand("<cword>")<CR><CR>

我最初有这些地图:

nmap <tab> v>
nmap <s-tab> v<
vmap <tab> >gv
vmap <s-tab> <gv

现在,如果我键入s,那么它将跳转到具有一个副作用的定义: 它将标记目标行或目标函数/类内容。

我无法找出这场冲突在哪里。看来这两张地图没有关系。

1 个答案:

答案 0 :(得分:1)

我已经尝试过你的映射没有任何问题,所以我假设可能会出现像@glts在他的评论中提到的某种拖尾包机问题。使用:set list显示不可见的字符。

但是有些事情你可能想要考虑:

  • 除非您要映射到插件或非常特殊的需求,否则几乎总是使用nnoremap而不是nmap来阻止递归映射。
  • 缩进/取消的vim方法是在视觉模式下使用>> / <<(或> / <。如果要重复该命令,请使用.。 dot命令将重做上一次更改。如果你走得太远,可以使用u撤消。虽然我理解对这些映射的需求,但学习和养成使用.的习惯会帮助你进入vim天堂之旅。
  • 通过炫耀快速和脏替换来很好地使用.命令的示例。
    • 在您的文件/pat
    • 中搜索常见模式
    • 通过c将文字更改为其他内容。例如cgnfoo<esc>
    • gn动作将选择当前模式
    • 使用.命令重复。

如需更多帮助,请参阅:

:h mapping
:h .
:h u
:h >>