从同一字符(= 符号)开始的多行编辑[没有宏?]
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>
我正在编写一个 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>