我想复制Sublime Text的“ CTRL-D”行为,该行为突出显示光标下的当前单词。
*和#在这里不起作用,因为它们会自动移动光标(如n和N),我明确不希望这样做。
为了突出显示光标下的当前单词,我发现以下内容有效:
yiw
:let @/=@@
:set hls
如果您键入此[[手动,则按预期效果很好。
我的问题是我不明白我将其放在键盘映射表上的错误,因此我可以绑定它。到目前为止,我尝试过的是:
function SearchWordUnderCursor()
silent! yiw
silent! :let @/ = @@
silent! :set hls
endfunction
使用内联键绑定,如下所示:
nmap <C-D> yiw | :let @/ = @@ | :set hls
这两种方法DO N'T
为什么很难像手动键入一样完成它?
我正在使用NVIM v0.2.2。
感谢您的任何帮助,并先谢谢您。
silent!
,则会有帮助地哭泣yiw: not an editor command
。:
(ex-)命令。您的yiw
等效于:yiw
,这不是编辑器命令。 (这也意味着您可以安全地在命令前省略:
)。要运行普通模式命令,请明确说出:normal
::normal
在映射中,您需要用
function SearchWordUnderCursor() silent! normal yiw silent! let @/ = @@ silent! set hls endfunction
而不是<BAR>
分隔命令,并传递- all所按下的键,包括Enter:
|
nmap <C-D> yiw <BAR> :let @/ = @@<CR> <BAR> :set hls<CR>
(因为VimScript语句是normal! yiw
,而不是普通模式键)。第二个命令不起作用,因为它们是键,而不是Ex-command,因此您必须在适当的地方放入:commands
和:
(并且第一个命令必须用反斜杠转义所有“小节” “ bar”将以“ map”命令结尾;否则)。
因此,您应该阅读有关普通模式和命令行模式的更多信息。
此外,使用<CR>
看起来也不好,因为您没有搜索任何内容。最好使用hlsearch
代替IMO。例如,
:h :match
使用nnoremap <C-D> :execute 'match Search /\V' . escape(expand('<cword>'), '\/') . '/'<CR>
将其关闭。
:match NONE