Vim:在光标下搜索单词(不是*或#pls)

问题描述 投票:0回答:1

我想复制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

  • 都按预期工作,我不知道自己在做什么错。搜索模式/寄存器设置得很好,但是立即突出显示不起作用,您必须手动n或N一次才能显示突出显示,但是这会移动光标,而不是“手动”方法。

    为什么很难像手动键入一样完成它?

    我正在使用NVIM v0.2.2。

    感谢您的任何帮助,并先谢谢您。

    vim neovim
    1个回答
    0
    投票
      如果您从代码vim中删除silent!,则会有帮助地哭泣yiw: not an editor command
  • 在函数中,每行都是:(ex-)命令。您的yiw等效于:yiw,这不是编辑器命令。 (这也意味着您可以安全地在命令前省略:)。要运行普通模式命令,请明确说出:normal

    :normal

      在映射中,您需要用function SearchWordUnderCursor() silent! normal yiw silent! let @/ = @@ silent! set hls endfunction 而不是<BAR>分隔命令,并传递
    1. all所按下的键,包括Enter:

    |

  • 1
    投票
    第一个无效,因为您必须在VimScript中使用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>
    将其关闭。

    0
    投票
    一个简单的非光标移动解决方案是>

    :match NONE

    © www.soinside.com 2019 - 2024. All rights reserved.