vim 搜索光标下的单词

e0bqpujr  于 2022-11-11  发布在  其他
关注(0)|答案(6)|浏览(163)

当我使用g**g#时,它会触发对光标下的单词的搜索。但是,光标会移动到该单词的下一个/上一个匹配项。有没有方法可以在不移动光标的情况下搜索当前单词?
这很烦人,因为我经常想按

  1. *
  2. :.,+5s/foo/bar/g
    但这个问题迫使我
  3. *
    1.然后按Shift+ *(我想跳过此操作)
    1.我的搜索和替换。
fumotvh3

fumotvh31#

您可以Map:

nnoremap # #N
nnoremap * *N
cetgtptt

cetgtptt2#

noremap * :let @/ = "\\<<C-r><C-w>\\>"<cr>:set hlsearch<cr>

它只是将搜索模式设置为光标下的整个单词,然后触发对搜索突出显示的更新

pb3skfrl

pb3skfrl3#

有没有一种方法可以在不移动光标的情况下搜索当前单词?
*#和friends的全部意义在文档中已经非常清楚了:“向前搜索”或“向后搜索”。你的问题似乎是你使用那些命令不是为了它们的预期目的而是为了一个副作用,大概是突出显示光标下单词的所有出现。
由于没有内置的命令,您需要自己Map它:

nnoremap <key> *``
nnoremap <anotherkey> #``
...
bq3bfh9z

bq3bfh9z4#

不按 * 键填充搜索模式,而是使用CTRL-R CTRL-W将单词直接复制到命令行。即:

:.,+5s/<C-R><C-W>/bar/g
4szc88ey

4szc88ey5#

*/#/g*等的功能更改为 * 非 * 跳转(特别是在没有给定[count]的情况下)是一个频繁的请求,因此,过多的插件会改变Vim的默认行为,我的SearchHighlighting plugin就是一个这样的插件。(插件页面上有许多其他插件的链接,也可以试用。)
@romainl给出的答案是一个最小化的解决方案,它有一些大多数插件都能避免的缺点(例如屏幕闪烁,可能会改变窗口视口)。

j9per5c4

j9per5c46#

我使用下面的Map来搜索当前单词并保持光标的位置:

nnoremap <expr> * ':%s/'.expand('<cword>').'//gn<CR>``'

额外的好处是我们还可以计算火柴的数量。

相关问题