Vim - 在每个字母之间插入一些内容

Mat*_*ert 4 vim

在 vim 中我有一行这样的文本:

abcdef
Run Code Online (Sandbox Code Playgroud)

现在我想在每个字母之间添加下划线或其他内容,所以结果如下:

a_b_c_d_e_f
Run Code Online (Sandbox Code Playgroud)

我知道这样做的唯一方法是记录这样的宏:

qqa_<esc>lq4@q
Run Code Online (Sandbox Code Playgroud)

有没有更好、更简单的方法来做到这一点?

Cal*_*ngh 5

:%s/\(\p\)\p\@=/\1_/g

  • 启动:一个命令。
  • 搜索%整个文档。
  • 将\(\p\)匹配并捕获可打印符号。例如,如果您只想匹配字符,则可以替换\p为。\w
  • 进行\p\@=前瞻检查以确保匹配的(第一个)\p后面跟着另一个\p。第二个,即,\p\@=不构成比赛的一部分。这个很重要。
  • 在替换部分中,\1填写匹配的(第一个)\p值,并且_是一个文字。
  • 最后一个标志g是标准的所有标志。