Vim有*(星号)命令,它向前搜索光标下单词的下一个(或[count],如果提供的话)。对word
使用该命令,\<word\>
寄存器(包含最新的搜索模式)将获得"/
。
搜索word
和\<word\>
之间的区别在于,第一个模式与word
,wordfoo
等中的bar_word
匹配,而第二个模式不匹配。这是因为\<
和\>
分别匹配单词的开头和结尾。
我想知道抽出一个单词的最佳方法是什么,比如* do(或#,向后版本),但不改变光标位置。
答案 0 :(得分:3)
如果您想将\<
,\>
以及光标下的单词组合在一起
寄存器中的搜索模式,为什么不明确地这样做呢?
:let @/ = '\<'.expand('<cword>').'\>'
(如有必要,将@/
更改为引用任何其他注册表。)
如果您的情况有必要,可以将此行映射为单键或双键 长度捷径。
:noremap <silent> ,/ :let @/ = '\<'.expand('<cword>').'\>'<cr>
答案 1 :(得分:1)
我认为你通过查看yank选项走错了路线,我认为你需要编写一个快速宏来搜索寄存器中的单词并在那里添加单词边界标记。然后,您可以使用yiw
,yaw
,yw
以及所有其他各种标准的yank命令,您的宏将处理搜索的添加边界。
答案 2 :(得分:1)
*
将搜索标识符,并将searchterm放在/
寄存器中。您可以在输入模式下按<Ctrl-R>/
或在正常模式下按"/p
来访问它。
不幸的是,这会将光标移动到下一个匹配项。您可以使用标记保存当前位置。使用ma
保存当前位置,并使用'a
将其恢复。
最后一个命令是ma*'a
。
答案 3 :(得分:0)
yw
命令从光标位置猛拉到单词的 end 。使用Vim text objects,yaw
命令会拉动光标所在的整个单词,即使光标不位于单词的开头。