如何在 vi 编辑器中替换与特殊字符组合的单词

how to replace a word combined with special character in vi editor

我正在探索 vi 编辑器,

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

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

我知道 vi 中的基本替换命令。这种情况怎么更换?

下面的命令应该可以工作。它使用括号捕获 _ 之后的索引。

:%s/_\(\d\+\)/[]

</code> 提供第一个捕获的组,即 <code>_ 之后的数字。

只是为了扩展 gaganso's 答案,并解释

:%s/_\(\d\+\)/[]

表示。

  • : 这是一个 ex 命令
  • % 跨越整个文件
  • s是替换

替换采用以下格式(参见 :help :s

:[range]s/[find]/[replace]/[flags]

我们已经处理了范围(它是全局的,感谢 %),现在我们只需要解释 [find][replace] 块中的内容。

这个正则表达式的 [find] 部分是

_\(\d\+\)

它说

  • _ 找一个下划线
  • \( 打开一个新的分组(转义的括号表示我们在里面找到的任何东西都应该是 'saved' 所以我们可以稍后把它放回去)
  • \d+ 在一行中查找任意数量的数字
  • \) 关闭分组(因此我们稍后 'saved' 的部分是下划线之后的任意数量的连续数字。在您的示例中,这将是 0data_0

[replace]部分

  • [ 放下方括号
  • </code> 记下我们在分组中保存的任何内容(1 表示我们正在使用在第一个分组中找到的任何内容,我们也恰好只有一个分组)</li> <li><code>]再放下一个方括号

给你! vim 正则表达式,用于查找下划线后跟数字,并将其替换为方括号内的相同数字!