将:nohlsearch映射到Esc键

9

我喜欢使用hlsearch,但是我不喜欢在搜索后保留所有高亮显示的内容。为了解决这个问题,我可以简单地使用:nohlsearch或它的缩写,但是这仍然需要付出太多的努力,所以我决定尝试在按下Esc键时自动取消高亮显示。我想到的方法是:

nnoremap <ESC> :nohlsearch<CR>

这个功能在我通常用来开发的GVim中完全符合我的要求,但在vim中不起作用。

如果我在vim中搜索某些内容,按esc取消高亮,并使用箭头键之一进行导航,vim会直接进入插入模式并在新行上插入一个字符。

由于我从未真正学习过用 h, j, kl 进行导航,因此这真的很烦人,我想知道如何让vim表现得像gvim一样。

如果您需要更多信息,可以在此处找到我的整个vim配置。


6
由于Ctrl-L已经被用来重新绘制屏幕,因此我使用以下方式进行映射: nnoremap <silent> <C-l> :nohl<CR><C-l> - idbrii
1
我已将 \ 映射为 :nohlsearch^M(\ 是 / 的反义词;而且很容易记住,因为它就在回车键上方。) - anishsane
@Idbrii,非常好的建议,谢谢。此外,它还可以防止出现例如按下“5”然后按下“<Esc>”取消,导致出现“E481:不允许使用范围”的问题。 - Wildcard
2
@Wildcard:要解决您的映射中的特定问题,请使用:<C-u>而不是:,就像这样nnoremap <silent> <C-l> :<C-u>nohl<CR><C-l>。这将清除自动插入的范围(在正常模式下尝试键入5:,您将看到导致该错误的范围)。 - idbrii
3个回答

8
您的问题在于,当您按下<Up>键时,终端会发送类似<Esc>OA的内容(如果您在插入模式下键入<C-v><Up>,您将看到它),这被重新映射为: nohlsearch<CR>OA。我不知道除了不映射单个<Esc>外是否有其他解决方案,请尝试将其映射到双重<Esc>

谢谢解释,我检查了终端发送的内容,并通过映射来解决了问题。 - DasIch

0

我创建了这个映射,以便在按下双倍的<Esc>时禁用搜索

nnoremap <silent> <Esc><Esc> :let @/ = ""<CR>

-4

还有太多工作吗?

编辑:我不知道你们怎么想,但我个人认为使用:noh比按Esc键更容易,因为我可以按下所有按钮而不用过多伸展我的小指(这也是我认为默认将Esc键映射为从插入模式返回命令模式有点不太方便的原因)。如果你真的经常使用:nohlsearch命令,那你可能应该将其重映射到一些在主键区域内可以触及到的按键上(比如普通字母、数字,或者Ctrl-字母)。

无论如何,在我的vim中输入你给出的确切命令是有效的(在gnome-terminal上)。你确定你把规则放在.vimrc文件中了,而不是.gvimrc文件中吗?重新启动vim后没有成功吗?尝试:source /path/to/config/file并查看是否成功。


1
":noh" 需要四个字母,而我更喜欢只有一个字母的缩写。这可能听起来有点愚蠢,但对于我经常搜索的事情来说,这很重要。 - DasIch
我已经关闭了Esc和大写锁定键,因为实际上到达Esc键所需的时间太长了。 - DasIch
@Daslch:同样的道理,这就是为什么我们选择vim。 - Lie Ryan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接