我在成功将密钥重新映射到<Esc>
时遇到了一些麻烦。我尝试过多个字符,所以我想将1
重新映射到<Esc>
。在我的.vimrc
文件中,我添加了以下行:
noremap! 1 <Esc>
这适用于退出插入模式,但是当我处于命令模式时,执行该命令而不是从中进行转义。例如,在正常模式下,如果我输入:
/searchtext1
不会在不搜索的情况下退回到正常模式,而是显示“searchtext”的搜索结果。对于以:
开头的命令也是如此。这有解决方法吗?我使用错误的地图功能吗?
我在终端上使用Vim,虽然在MacVim GUI上测试后,它也有这个问题。
答案 0 :(得分:2)
根据文档,这是预期的行为。它是vi兼容性的一部分。
如果你看:h i_esc | /*3 Go
,你会看到以下段落。
*3 Go from Command-line mode to Normal mode by:
- Hitting <CR> or <NL>, which causes the entered command to be executed.
- Deleting the complete line (e.g., with CTRL-U) and giving a final <BS>.
- Hitting CTRL-C or <Esc>, which quits the command-line without executing
the command.
In the last case <Esc> may be the character defined with the 'wildchar'
option, in which case it will start command-line completion. You can
ignore that and type <Esc> again. {Vi: when hitting <Esc> the command-line
is executed. This is unexpected for most people; therefore it was changed
in Vim. But when the <Esc> is part of a mapping, the command-line is
executed. If you want the Vi behaviour also when typing <Esc>, use ":cmap
^V<Esc> ^V^M"}
以{Vi: ... }
开头的部分正在讨论vi兼容性并解释您所看到的行为。
映射:noremap! 1 <c-u><bs>
可以满足您的需求。这是完全删除当前行。这是列表中的子弹2。
答案 1 :(得分:0)
我最喜欢的是在所有模式下将Alt-Space映射到Escape。为了做到这一点,我把它放在我的vimrc中:
noremap <a-space> <esc>
inoremap <a-space> <esc>
cnoremap <a-space> <c-u><bs>
Vim中有6组映射,分解如下: