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

问题描述 投票:2回答:2

我正在研究一个有趣的剧本,其中VIm似乎被证明是非常有用的工具(很多样式/格式等相似的样式),并且我希望能把握当前的状况(自编写以来)转换为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方式考虑这一问题的技巧。

任何指向优质文档的链接/有关宏的学习资源也将非常棒!我还是Vim的新手,所以请忍受...谢谢!

vim vi
2个回答
1
投票

也许类似于以下正则表达式替换:

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

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

CTRL-o

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

我想我应该再解释一下:

:进入命令模式。

%应用于所有行。

s替代。

// xxx / yyy /用yyy替换xxx。

^输入字符串开头的锚点

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

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

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

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

替换字符串从字面上发出,没有任何解释,除了\ 1之类的东西。


0
投票

构建@Stephen Warren's,请根据需要回答以下工作:

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

匹配部分为:

  • 从行^的开头

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

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

    • 第二组是与=匹配的内部组

  • 使用一个或多个字符\+而不是贪婪的*来匹配=的任一侧

替换部分:

  • 基本上是您期望的输出,它调用了先前匹配的组\1\2
© www.soinside.com 2019 - 2024. All rights reserved.