我的一些 Vim 映射已停止工作,尽管:map <keys>
显示映射已注册。
一个例子是map <S-CR> O<Esc>
my .vimrc
,即使我删除前面的条目,它也不起作用map <CR> o<Esc>
。如果存在前一个条目,则<CR>
和<S-CR>
执行相同的操作。
我已经尝试删除所有 Vim 软件包并从源代码重新安装,但它仍然不起作用。有哪些可能有帮助的一般故障排除技巧?
答案1
使用gvim
修复了<S-CR>
问题,但其他映射仍然无法正常工作,例如,ev
(评论中提到的)。
答案2
有一天,我注意到我的一些映射在没有任何明显原因的情况下停止工作。正如索汉姆所做的那样。
总之,我们可爱的 Vim 似乎有一个非常奇怪的副作用。就我而言,将 » 符号添加到 langmap 选项的字符串中会令人难以理解地破坏其他键和符号的一些映射。其中,:map 命令的输出表明一切正常。是的,在某些情况下,例如 Shift-Tab,终端不会传递信号,但这不是我们讨论的情况。
如果有人(例如 Soham 或我)遇到了麻烦,请尝试从 langmap 选项开始调查。请不要认为语言映射中的符号与停止工作的符号和键之间存在任何可见的联系。
细节。
了解终端行为后,为了为 Vim 提供更多“手柄”,我通过 xkb 技术重新映射了一些键盘映射。特别是,我在 Tab 键上有 Escape 信号。在该键的第五层(xkb 术语),我有一个 ↻ 符号,它在 Vim 中映射到 Ctrl-R 命令。然后,当我使用拉丁文集时,x 键(在第三级)上有 ” 符号,而当我使用西里尔文集时,同一个键上有 » 符号。
所以,我的语言映射是:
set lmap=
set lmap+=йцукенгшщзхъ;qwertyuiop'\"
set lmap+=фывапролджэ;asdfghjkl_=
set lmap+=ячсмитьбю;zxcvbnm‘’
set lmap+=ЙЦУКЕНГШЩЗХЪ;QWERTYUIOP'\"
set lmap+=ФЫВАПРОЛДЖЭ;ASDFGHJKL_=
set lmap+=ЯЧСМИТЬБЮ;ZXCVBNM‘’
set lmap+=«»;“”
最后一个字符串中的 » 符号(实际上位于 x 键处)破坏了 Tab 键上 ↻ 符号的映射。是的!很有趣!因此,删除 » 符号的映射将使 Vim 处于正确的状态。