代码之家  ›  专栏  ›  技术社区  ›  Chetan

删除/更改VIM中的搜索文本

  •  10
  • Chetan  · 技术社区  · 14 年前

    当我对某个模式进行交互式搜索时,每次我点击 n ,我得到下一个结果。如何删除/更改我得到的每个结果?

    理想情况下,我要找的是这样的:我击中 n 获取搜索结果,然后 magic command 以视觉模式突出显示结果,然后我可以 d c 删除或更改突出显示的文本。

    例子 :

    我输入命令

    /hello .
    

    而且它匹配 hello ,一个空格,以及其后的任何字符。

    所以说第一场比赛是“你好,W”。

    现在,我想删除所有 hello w ,搜索下一个匹配项(假设是 hello a )将下一个匹配项更改为 hello there 继续为每一场比赛做不同的事情。

    我不是只想搜索和替换,因为我想能够执行 任何 以交互方式对每个结果执行的操作,例如删除第一个结果,将第二个结果替换为 bye ,并将第三个结果替换为 later .

    7 回复  |  直到 6 年前
        1
  •  14
  •   Michael Anderson    14 年前

    要选择当前匹配项的整个匹配项(如果您在匹配项的开头),可以键入

    v//e
    

    删除到匹配的结尾

    d//e
    

    改变比赛

    c//e
    

    唯一的缺点是你不能用 n (因为这将重做 //e )而是必须使用 //

    所以典型的工作流程是这样的

    /hello ./    : Jump to the start of the next "hello ."
    d//e         : Delete the item
    //           : repeat the search to get to the begining of the next "hello ."
    c//e         : change it
    //           : next one.
    etc.
    
        2
  •  6
  •   Michael Mior    7 年前

    我想你想要 gn :(转到下一个匹配项并)在视觉模式下选择它。您可以用命令作为前缀,例如 cgn 更改匹配项, dgn 删除等。我发现,如果已经在一个匹配项上,则使用此匹配项,以便这样做。

        3
  •  2
  •   Ben Jackson    14 年前

    我会按照前一个海报的建议做:用d构造一个删除命令 目标 然后击中。使用n查找每个事件之后。在这种情况下 7x 将删除任何匹配的内容 hello . 这是 d7l d7[space] 因为D接受任何移动指令。

    但是,如果您想要真正通用的搜索和删除regexp的解决方案,则可以执行单个替换命令(即使失败),然后执行搜索并使用&将最后一个替换重新应用到当前行:

    :s/hello .//
    /hello .
    &
    n
    &
    

    第一行(替换)可能会失败。您仍可以稍后再应用。我有点惊讶于第一个替换命令没有设置默认模式,但是它可能在vi中而不是vi m中设置。

        4
  •  2
  •   Matt Briggs    14 年前

    你在找“确认”

    :%s/hello .//gc
    

    :要进入Ex模式,%要应用于整个缓冲区,s要替换,/hello./要搜索该regex,//不替换为空,g要在一行中查找所有匹配项,c要在每次匹配之前确认是否删除。

    这是假设你正在寻找确认。如果你想一次完成所有的工作,已经有很多人提到过了

    :%s/hello .//g
    

    :要进入Ex模式,%要应用于整个缓冲区,s要替换,/hello./要搜索该regex,//不替换它,g要在一行中查找所有匹配项

        5
  •  1
  •   Greg Hewgill    14 年前

    更改第一个,使用 cwfoo ESC 或者别的,然后用 . 命令对要更改的每个进一步事件重复该编辑。

        6
  •  1
  •   rkta    6 年前

    用录音来做这个怎么样?

    质量保证/ textsearch 进入 V9LVQ

    9是(长度 文本搜索 -1)即10-1=9

    现在,一旦你准备好了登记册上的记录 a AGV ( @ :执行名为的录制 GV 选择搜索文本。)

    现在,您可以对所选文本执行任何操作,完成后,可以转到下一个 一带 @

        7
  •  0
  •   shoebox639    14 年前

    按X键。

    或用户搜索和替换: [esc] :%s/[search-regex]/[replace-regex]/g

    如果 replace-regex 为空,您将删除刚才搜索的内容。