我想复制崇高文本的“CTRL-D”行为,突出显示光标下的当前单词。
- 和#在这里不起作用,因为它们会自动移动光标(就像n和N一样),这是我明确不想要的。
为了突出显示光标下的当前单词,我发现以下方法很有效:
yiw
:let @/=@@
:set hls
如果您手动键入此****,它将按预期正常工作。
我的问题是,我只是不明白我做错了什么,把它放在一个键Map,所以我可以绑定它。
我目前尝试的是:
1.创建一个函数,然后将其Map到一个键:
function SearchWordUnderCursor()
silent! yiw
silent! :let @/ = @@
silent! :set hls
endfunction
1.使用内联键绑定,如下所示:
nmap <C-D> yiw | :let @/ = @@ | :set hls
这两种方法都没有按预期工作,我不知道我做错了什么。
搜索模式/寄存器设置得很好,但立即突出显示不起作用,您必须手动n或N一次才能显示突出显示,但这会移动光标,与“手动”方法相反。
为什么要把它做好就像是手工打出来的那么难呢?
我使用的是NVIM v0.2.2。
4条答案
按热度按时间r8uurelv1#
一个简单的、不移动光标的解决方案是
ogsagwnx2#
第一个方法不起作用,因为您必须在VimScript中使用
normal! yiw
(因为VimScript语句是:commands
,而不是normal-mode键)。第二个不起作用,因为这些是键,而不是Ex命令,所以必须在适当的地方输入
:
和<CR>
(也要用反斜杠转义所有“bar”,因为第一个“bar”将结束“map”命令)。因此,您应该阅读更多关于正常模式与命令行模式的信息。
另外,使用
hlsearch
看起来不太好,因为你没有搜索任何东西。IMO最好使用:h :match
。例如,使用
:match NONE
将其关闭。svmlkihl3#
1.如果您从代码中删除
silent!
,vim会调用yiw: not an editor command
。在一个函数中,每一行都是
:
(ex-)命令。你的yiw
等价于:yiw
,并且这不是一个编辑器命令。(这也意味着你可以安全地在命令前省略:
)。要运行一个正常模式的命令,明确地说:normal
:1.在Map中,您需要使用
<BAR>
(而不是|
)分隔命令,并传递所有按键,包括Enter:z9ju0rcb4#
我尝试解决这个问题:
您可以使用以下选项