Emacs在Vim中的Ctrl + s Ctrl + w'等效

时间:2016-10-15 00:03:39

标签: vim

我已经使用了emacs一段时间,我正在尝试Vim。在emacs中,要在搜索缓冲区中选择多个单词,我会将光标移动到感兴趣的单词的开头,然后点击“Ctrl + s”,这将调出搜索模式。然后我按Ctrl + w选择要逐步搜索的单词,最后再次按Ctrl + s搜索现在选择的文本。

什么是Vim相当于此? 我了解到vim中的*会搜索光标下的单词。但是如果我想搜索的不只是那个单词呢?像光标后的2个单词

2 个答案:

答案 0 :(得分:4)

Vim最接近的等值

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>

击键按键说明

下面的每个按键都是该命令文档的链接。

  • v - 进入可视模式,选择当前字符“s”
  • e e - 前进两个单词,选择短语“some text”
  • y - 将该文本提取(复制)到默认寄存器,未命名的寄存器"
  • / - 开始搜索;提示搜索字词
  • <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中。