从同一字符(= 符号)开始的多行编辑[没有宏?]

Multi-line edit starting at the same character (= sign) [no macros?]

我正在编写一个 ansible 剧本,其中 VIm 似乎被证明是一个非常有用的工具(style/formatting 等中有很多类似的模式),我希望把我目前的情况(写完后)变成一个 Vim 教训。

我已经广泛使用代码块来进行多行编辑,但我认为我已经达到了它们的极限,并且想了解如何更动态地进行行编辑。在这种情况下,我有一段代码要转换

来自:

rcon.port=25575
rcon.password=strong-password
enable-rcon=true

进入:

- { regexp: '^rcon.port', line: 'rcon.port=25575' }
- { regexp: '^rcon.password', line: 'rcon.password=strong-password' }
- { regexp: '^enable-rcon', line: 'enable-rcon=true' }

要做到这一点,第一部分相当简单。 Shift-I,然后 ctrl-V 块,遍历要编辑的行,键入 - { regexp: '^" 以获取以下内容:

- { regexp: '^rcon.port=25575
- { regexp: '^rcon.password=strong-password
- { regexp: '^enable-rcon=true

不幸的是,从那里我有点迷茫,因为宏(以及它是否过大)对我来说仍然有点不清楚。除了宏之外,是否有任何可能的方法来解决这个问题?

我不是在寻找一个完整的解决方案,而只是在这里寻找最佳(或唯一方法)的提示,以及是否有任何以 Vim 方式思考这个问题的技巧。

任何指向宏的 documentation/learning 资源的链接也很棒!我还是 Vim 的新手,所以请多多包涵...谢谢!

可能类似于以下正则表达式替换:

:%s/^\(.*\)$/- { regexp: '^' }/

或者在视觉上选择所有相关行:

CTRL-o

:s/^\(.*\)$/- { regexp: '^' }/

我想我应该再解释一下:

: 进入命令模式。

% 应用于所有行。

s 替补。

/xxx/yyy/ 将 xxx 替换为 yyy。

^ 输入字符串开头的锚点

(xxx)(在匹配字符串中)捕获任何匹配 xxx 的内容。

\1(在替换字符串中)替换为任何匹配的 (xxx)。

.* 匹配任意数量的任意字符。

$ 输入字符串末尾的锚点。

替换字符串按字面意思发送到结果中,没有任何解释,除了像 \1.

这样的东西

建立 根据要求回答以下工作:

:%s/^\(\(.\+\)=.\+\)/- regex: '', line: '' }/

比赛部分是:

  • 从行首开始^

  • 它有两组而不是一组\(\)

    • 第一组是匹配整行的外组

    • 第二组是匹配到=

    • 的内组
  • 匹配一个或多个字符 \+ 用于匹配 =

    [=45 的任一侧,而不是贪婪的 * =]

替换部分:

  • 基本上您预期的输出调用之前匹配的组 </code> 和 <code>