当我使用 g* 或 * 或 g# 时,它会触发对光标下单词的搜索。然而,光标会移动到该单词的下一个/上一个出现位置。有没有一种方法可以在不使光标移动的情况下搜索当前单词?
这很烦人,因为我经常想按以下步骤操作:
- *
:.,+5s/foo/bar/g
但是这个问题迫使我要做以下步骤:
- *
- 然后 Shift + * (我想跳过这一步)
- 进行查找和替换。
当我使用 g* 或 * 或 g# 时,它会触发对光标下单词的搜索。然而,光标会移动到该单词的下一个/上一个出现位置。有没有一种方法可以在不使光标移动的情况下搜索当前单词?
这很烦人,因为我经常想按以下步骤操作:
:.,+5s/foo/bar/g
但是这个问题迫使我要做以下步骤:
有没有一种方法可以在不移动光标的情况下搜索当前单词?
通配符*
、#
等命令的整个意义在文档中已经非常清晰了:“向前搜索”或“向后搜索”。你的问题似乎是你不是为了它们的预期目的而使用这些命令,而是为了一个副作用,可能是突出显示光标下单词的所有出现。
由于没有内置的命令,因此您需要自己进行映射:
nnoremap <key> *``
nnoremap <anotherkey> #``
...
m
:keepjumps normal! *``´,请注意,gstar 也适用于无单词边界搜索。 - Jay-Pi/
寄存器:<cmd>let @/='\<'.expand("<cword>").'\>'<Bar>wincmd w<Bar>normal n<CR><cmd>wincmd w<CR>
。请注意,vimscript 不喜欢长命令链。 - Jay-Pi不必按下*来填充搜索模式,而是直接使用CTRL-R CTRL-W将单词复制到命令行中。即:
:.,+5s/<C-R><C-W>/bar/g
vim
是我使用了约 25 年的主要工具之一。 我曾经完全阅读过它的文档,不止一次。自那时以来,我定期重新审视文档(尤其是当新的主要版本发布时),以发现新的技巧和功能。 :-) - phd您可以进行映射:
nnoremap # #N
nnoremap * *N
nnoremap <expr> * ':%s/'.expand('<cword>').'//gn<CR>``'
*
/ #
/ g*
等的功能,以使其不跳转(特别是没有给定的[count]
),这是一个经常被要求的功能。因此,大量插件会更改Vim的默认行为,通常与其他搜索相关命令一起使用。我的SearchHighlighting 插件就是其中之一。(插件页面有许多可供尝试的替代插件链接。)noremap * :let @/ = "\\<<C-r><C-w>\\>"<cr>:set hlsearch<cr>
它只是将搜索模式设置为光标下的整个单词,然后触发搜索高亮的更新。