我已经使用了emacs一段时间,我正在尝试Vim。在emacs中,要在搜索缓冲区中选择多个单词,我会将光标移动到感兴趣的单词的开头,然后点击“Ctrl + s”,这将调出搜索模式。然后我按Ctrl + w选择要逐步搜索的单词,最后再次按Ctrl + s搜索现在选择的文本。
什么是Vim相当于此? 我了解到vim中的*会搜索光标下的单词。但是如果我想搜索的不只是那个单词呢?像光标后的2个单词
答案 0 :(得分:4)
Vim没有任何直接的等价物,但这是一种获得相同效果的方法。此方法比Emacs中的方法多四次。
假设这是您的文档,光标位于[]
:
I have [s]ome text.
Will I find some text?
Yes. Some people can find text, and I can find some text.
您想要搜索“某些文字”。在Emacs中,您可以输入四个键击C-s
C-w
C-w
C-s
。这是你在Vim中输入的内容:
v
e
e
y
/
<C-R>
"
<CR>
下面的每个按键都是该命令文档的链接。
"
<C-R>
“ - 将您刚刚抓取的unnamed register "
的内容插入命令行。(<C-R>
表示 Control < / KBD> + - [R 。)<CR>
- 执行搜索。 (<CR>
是回车符,键入 Enter 或返回。)如果您不需要对所选内容进行视觉反馈,并且您已经知道需要选择多少单词,则可以通过使用动作进行yanking来节省击键,而不是选择使用可视模式然后进行选择。在这种情况下,您会将v
e
e
y
替换为y
2
e
,这意味着“从将光标移到第二个单词“。
如果搜索字词包含标点符号,则上述说明可能无法正确搜索,因为标点符号可能会被解释为正则表达式搜索。为了避免这种情况,请在输入/
之后立即写\V
(“very nomagic”),\V
表示在字面上处理模式后面的所有字符(反斜杠除外)。 (我发现.vimrc
非常有帮助,我将custom mappings放在我的/
中,默认情况下进行v_*
字面搜索。)
搜索当前视觉选择的内容将是*
映射(在可视模式下意为v_*
)的良好候选者。默认情况下,*
与v_*
的工作方式相同,但我从未发现v_*
的行为有用。
以下是v_#
和.vimrc
的一对自定义映射,您可以将其放在xnoremap * y/\V<C-R>"<CR>
xnoremap # y?\V<C-R>"<CR>
中。它们允许您从字面上向前或向后搜索视觉选择的文本:
v
使用这些映射,要在上面的示例中搜索“某些文字”,您只需按e
e
*
\<
。
如果您想使此映射更加健壮,可以将其扩展为调用一个函数,该函数检查选择是否在字边界处停止,并添加单词边界搜索字符\>
和$this->db->query("SELECT SUM(A.votes) as reputation from
(
SELECT reply.votes FROM reply where reply.user_id = $user_id
UNION ALL
SELECT thread.votes FROM thread where thread.user_id = $user_id
)AS A");
如果是这样,左右两端。您还可以对函数进行检查并转义反斜杠和正斜杠,以便包含这些的搜索条件始终有效。
答案 1 :(得分:2)
我经常使用该插件,允许您在可视模式下使用*
:https://github.com/thinca/vim-visualstar。
有了它,您在emacs中的^S^W^W^W^S
序列将是veee*
在Vim中。