我使用emacs已有一段时间了,正在尝试Vim。在emacs中,要在搜索缓冲区中选择多个单词,我将光标移到感兴趣的单词的开头,然后单击“ Ctrl + s”,这将弹出搜索模式。然后我会按Ctrl + w选择要逐步搜索的单词,最后再次按Ctrl + s来搜索现在选择的文本。
Vim等效于什么?我知道*在vim中会在光标下搜索单词。但是,如果我想搜索的不仅仅是一个单词,该怎么办?光标后喜欢2个字
Vim没有与此直接等效的方法,但是这是一种获得相同效果的方法。与Emacs相比,此方法需要四次击键。
说这是您的文档,光标位于之间[]
:
I have [s]ome text.
Will I find some text?
Yes. Some people can find text, and I can find some text.
Run Code Online (Sandbox Code Playgroud)
您要搜索“一些文本”。在Emacs中,您将键入四个击键C-s
C-w
C-w
C-s
。这是您在Vim中输入的内容:
v
e
e
y
/
<C-R>
"
<CR>
下面的每个击键都是该命令文档的链接。
"
<C-R>
"–将刚刚拉过的未命名寄存器"
的内容插入命令行。(<C-R>
表示Control+ R。)<CR>
–执行搜索。(<CR>
是回车符,用Enter或键入Return。)如果您不需要对所选择内容的视觉反馈,并且已经知道需要选择多少个单词,则可以通过摇动动作来保存击键,而不用视觉模式进行选择然后摇动。在这种情况下,您可以将替换v
e
e
y
为y
2
e
,这意味着“将所有内容从光标移到第二个下一个单词的末尾”。
如果搜索词包含标点符号,则上述说明可能无法正确搜索,因为标点符号可能会被解释为正则表达式搜索。为避免这种情况,请在键入后\V
立即写(“ very nomagic”)/
,该字面意义是按字面意义对待模式之后的所有字符(反斜杠除外)。(我发现它\V
很有用,我将自定义映射放入默认情况下的字面上.vimrc
进行/
搜索。)
搜索当前在视觉上选择的内容将是v_*
映射的良好选择(意味着*
在视觉模式下)。默认情况下,v_*
它的工作原理与相同*
,但我从未发现该行为会v_*
有所帮助。
这是一对用于自定义映射的v_*
和v_#
,你可以把你的.vimrc
。它们使您可以从字面上向前或向后搜索视觉选择的文本:
xnoremap * y/\V<C-R>"<CR>
xnoremap # y?\V<C-R>"<CR>
Run Code Online (Sandbox Code Playgroud)
使用这些映射,在上面的示例中要搜索“某些文本”,只需按v
e
e
*
。
如果你想使这样的映射更健壮,你可以扩展它来调用一个函数来检查,如果选择停止在单词边界,并增加了字边界搜索字符\<
,并\>
在左右两端如果是这样。您还可以使函数检查并转义反斜杠和正斜杠,以便包含这些斜杠的搜索词始终有效。