我正在探索vi编辑器,
我想将_
(下划线)替换为[]
括号。
示例:data_0
需要替换为data[0]
。
我知道vi中的基本替换命令。在这种情况下我该如何更换?
答案 0 :(得分:6)
下面的命令应该起作用。它使用括号捕获_
之后的索引。
:%s/_\(\d\+\)/[\1]
\1
提供第一个捕获的组,它是_
之后的数字。
答案 1 :(得分:4)
只需扩展gaganso's的答案,然后解释一下
:%s/_\(\d\+\)/[\1]
表示。
:
是ex命令%
遍及整个文件s
是替代人替换采用以下格式(请参见:help :s
)
:[range]s/[find]/[replace]/[flags]
我们已经处理了范围(感谢%
,它是全局的),现在我们只需要解释[find]
和[replace]
块中的内容。
此正则表达式的 [find]
部分是
_\(\d\+\)
它说
_
找到下划线\(
打开一个新的分组(方括号括起来表示,我们在内部找到的任何内容均应“保存”,以便稍后再放回去)\d+
连续查找任意位数\)
紧密分组(因此我们稍后保存的部分是一行中的任意数字,下划线后的数字。在您的示例中,这是{的0
{1}} 以及 data_0
部分
[replace]
放在方括号[
记下我们在分组中保存的所有内容(1表示我们正在采用第一个分组中发现的任何内容,无论如何我们也恰好只有一个分组)\1
放下另一个方括号就在那里! vim regex用于查找下划线后跟一个数字,并将其替换为方括号内的相同数字!