【问题标题】:How to use Vim to do multiple line edit如何使用 Vim 进行多行编辑
【发布时间】:2017-10-25 14:37:05
【问题描述】:

我有这样的文字:

    w ky,
    wyz,
    wyy,
    wj,
    w w,

我想把它改成这样:

    "w ky",
    "wyz",
    "wyy",
    "wj",
    "w w",

我现在使用:

  1. 录制一个宏以在一行中插入双倍配额,然后转到下一行qa0wi"$i"j
  2. 然后输入4@a

是的,它有效,但有更简单的方法吗?

【问题讨论】:

  • 在谷歌输入问题时的第一个结果stackoverflow.com/questions/11784408/…
  • @J.Knight 但当每行长度相同时,该答案才有效
  • 代替0w,您可以使用^...不确定您所说的简单是什么意思...但您也可以使用替换...s/\S[^,]*/"&"/
  • @Sundeep 我知道ggCtrl-vG$ 会选择所有单词,但我可以选择每一行直到最后一个逗号吗?
  • 只是为了添加到@Sundeep 的评论中。 :%s/\S[^,]*/"&"/g 将一次性全部替换

标签: vim editor vi


【解决方案1】:

在前面进行基本的多行编辑,然后将 , 上的字符串替换为 ",

【讨论】:

    【解决方案2】:

    做一个“非常神奇的搜索\v”我们可以搜索...

    \v(\w ?\w+),
    \v ........... starts very magic search mode
    (  ........... starts group one
    \w ........... any word
     ? ........... optional space
    +  ........... one or more
    )  ........... ends group one
    

    测试搜索后,我们可以传递给我们的命令或 通过在搜索模式上放置两个斜杠来使用最后一个搜索

    %s/\v(\w ?\w+),/"\1",/g
    %s//"\1",/g
    

    第一组匹配的所有内容都可以通过\1推荐。

    【讨论】:

      【解决方案3】:

      一个更简单的方法。您可以使用norm 命令。我会推荐这个:

      1. 直观地选择所有行

      2. 类型

        :norm I"<C-v><esc>$i"<cr>
        

        当您实际输入此内容时(在按 Enter 之前),应在命令行中显示的文本为:

        :'<,'>norm I"^[$i"
        

      norm 命令告诉 vim 在某些行上模拟一组正常模式的击键。在这种情况下,命令是:

      :'<,'>      " On every line in the visual selection:
      norm        " Do the following as if typed in normal mode:
      I"<esc>$i"  " Insert an '"', escape, then insert a '"' at the end (before the comma)
      

      您也可以在不使用视觉选择的情况下执行此操作,只需键入 &lt;n&gt;:norm ...,该命令将应用当前的 n 行。 (当前行和接下来的 n-1 行)

      【讨论】:

        猜你喜欢
        • 2022-12-31
        • 2011-10-21
        • 1970-01-01
        • 2012-03-16
        • 2012-07-31
        • 2012-11-01
        • 2022-09-28
        • 1970-01-01
        • 2013-03-20
        相关资源
        最近更新 更多