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

Vim 从同一字符(=符号)开始的多行编辑[没有宏?],vim,vi,Vim,Vi,我正在写一本ansible剧本,VIm似乎被证明是一个非常有用的工具,在样式/格式等方面有很多相似的模式,我希望把我目前的情况写下来,把它变成VIm课程 我已经广泛使用代码块来进行多行编辑,但我认为我已经达到了它们的极限,我想了解如何更动态地进行行编辑。在这个场景中,我有一段代码要转换 发件人: 进入: 要做到这一点,第一部分相当简单。按住Shift-I键,然后按住ctrl-V键(对于块),遍历要编辑的线,键入-{regexp:“^ - { regexp: '^rcon.port=25575 -

我正在写一本ansible剧本,VIm似乎被证明是一个非常有用的工具,在样式/格式等方面有很多相似的模式,我希望把我目前的情况写下来,把它变成VIm课程

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

发件人:

进入:

要做到这一点,第一部分相当简单。按住Shift-I键,然后按住ctrl-V键(对于块),遍历要编辑的线,键入-{regexp:“^

- { regexp: '^rcon.port=25575
- { regexp: '^rcon.password=strong-password
- { regexp: '^enable-rcon=true
不幸的是,从那以后,我有点迷路了,因为宏以及这是否是过度杀伤力对我来说仍然有点不清楚。除了宏之外,还有什么可能的方法来解决这个问题吗

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


任何指向宏的良好文档/学习资源的链接都将非常棒!我还是Vim的新手,请耐心等待……谢谢!

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

:%s/^\(.*\)$/- { regexp: '^\1' }/
或通过目视选择所有相关线路:

CTRL-o

:s/^\(.*\)$/- { regexp: '^\1' }/
我想我应该再解释一下:

:进入命令模式

%适用于所有行

让我们来代替

/xxx/yyy/将xxx替换为yyy

^锚定在输入字符串的开头

匹配字符串中的xxx捕获与xxx匹配的任何内容

\替换字符串中的1替换为任何匹配的xxx

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

$Anchor位于输入字符串的末尾


替换字符串按字面意思发送到结果中,没有任何解释,除了\1之类的内容。

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

:%s/^\(.*\)$/- { regexp: '^\1' }/
或通过目视选择所有相关线路:

CTRL-o

:s/^\(.*\)$/- { regexp: '^\1' }/
我想我应该再解释一下:

:进入命令模式

%适用于所有行

让我们来代替

/xxx/yyy/将xxx替换为yyy

^锚定在输入字符串的开头

匹配字符串中的xxx捕获与xxx匹配的任何内容

\替换字符串中的1替换为任何匹配的xxx

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

$Anchor位于输入字符串的末尾

替换字符串按字面意思发送到结果中,没有任何解释,但\1之类的内容除外。

根据需要构建以下工作:

:%s/^\(\(.\+\)=.\+\)/- regex: '\2', line: '\1' }/
比赛部分是:

从一开始^

它有两个组而不是一个组\\

第一组是与整行匹配的外部组

第二个组是与=

匹配一个或多个字符\+而不是贪婪*用于匹配=

替换部分:

基本上,您期望的输出调用先前匹配的组\1和\2 按要求完成以下工作:

:%s/^\(\(.\+\)=.\+\)/- regex: '\2', line: '\1' }/
比赛部分是:

从一开始^

它有两个组而不是一个组\\

第一组是与整行匹配的外部组

第二个组是与=

匹配一个或多个字符\+而不是贪婪*用于匹配=

替换部分:

基本上,您期望的输出调用先前匹配的组\1和\2
使用非常神奇的:%s/^\v.{-}=.+/-{regex:'^\2',line:'\1'}Noice如何。对于OP:help\vOh是的,我想我忘了替换=并将line:添加到输出中了!使用非常神奇的:%s/\v.{-}=.+/-{regex:'^\2',line:'\1'}如何Noice.For OP:help\vOh是的,我想我忘了替换=并在输出中添加行:!