如何在vi编辑器中替换带有特殊字符的单词

时间:2018-07-11 17:52:41

标签: regex vim vi

我正在探索vi编辑器,

我想将_(下划线)替换为[]括号。

示例:data_0需要替换为data[0]

我知道vi中的基本替换命令。在这种情况下我该如何更换?

2 个答案:

答案 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用于查找下划线后跟一个数字,并将其替换为方括号内的相同数字!