首页 > 解决方案 > Vim:在光标下搜索单词(不是 * 或 # pls)

问题描述

我想复制 Sublime Text 的“CTRL-D”行为,它突出显示光标下的当前单词。

*#在这里不起作用,因为它们会自动移动光标(如 n 和 N),这是我明确不想要的。

为了突出显示光标下的当前单词,我发现以下内容是有效的:

yiw
:let @/=@@
:set hls

如果您手动键入它,它会按预期工作得很好。

我的问题是我只是不明白我做错了什么将它放在键盘映射上以便我可以绑定它。

到目前为止我尝试过的是:

  1. 创建一个函数,然后将其映射到一个键:
function SearchWordUnderCursor()
    silent! yiw
    silent! :let @/ = @@
    silent! :set hls
endfunction
  1. 使用内联键绑定,如下所示:
nmap <C-D> yiw | :let @/ = @@ | :set hls

两种方法都没有按预期工作,我不知道我做错了什么。

搜索模式/寄存器设置得很好,但立即突出显示不起作用,您必须手动 n 或 N 一次以显示突出显示,但这会移动光标,而不是“手动”方法。

为什么像手动输入一样难以完成?

我正在使用 NVIM v0.2.2。

感谢您提供任何帮助并提前感谢您。

标签: vimneovim

解决方案


第一个不起作用,因为您必须normal! yiw在 VimScript 中使用(因为 VimScript 语句是:commands,而不是普通模式键)。

第二个不起作用,因为这些是键,而不是前命令,因此您必须输入合适的位置(:并且<CR>还要用反斜杠转义所有“条”,因为第一个“条”将结束“地图” " - 否则命令)。

因此,您应该阅读更多关于普通模式与命令行模式的信息。

此外,使用hlsearch看起来不太好,因为您没有搜索任何内容。最好使用 IMO :h :match。例如,

nnoremap <C-D> :execute 'match Search /\V' . escape(expand('<cword>'), '\/') . '/'<CR>

用于:match NONE将其关闭。


推荐阅读