Vim - 在每个字母之间插入一些东西

时间:2015-07-20 04:22:31

标签: vim

在vim中,我有一行文字:

abcdef

现在我想在每个字母之间添加一个下划线或其他 ,所以这就是结果:

a_b_c_d_e_f

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

qqa_<esc>lq4@q

有更好,更简单的方法吗?

5 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:4)

如果您只想在字母之间添加:%s/\a\zs\ze\a/_/g ,可以这样做:

\a

如果您想要多于ASCII字母,请将:help \a替换为其他模式。

要了解这应该如何运作::help \zs:help \zetypedef struct node node; struct node { unsigned long long distance; int edges; int* edgesL; node **next; node *qnext; int limit; };

答案 2 :(得分:2)

使用正向前瞻和替代:

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

这将匹配除line break以外的任何字符后跟的任何字符。

答案 3 :(得分:1)

这是一种快速且更具互动性的方式,所有这一切都在正常模式下。

将光标放在行的开头,按:

  1. i_<Esc>x插入和删除分隔符。 (我们这样做是为了副作用。)
  2. gp将分隔符放回去。
  3. .,按住它直到工作完成。
  4. 很遗憾,我们无法在此使用.计数,因为它只会粘贴分隔符&#39; count&#39;当场时间。

答案 4 :(得分:0)

:%s​​ /../&:/ g

这将在整行的每两个字符之后添加“:”。 前两个期间表示要跳过的字符数。 vim会解释“&”(从我收集的内容中),以识别要添加的字符。 只需在“&”之后指出该字符 “ / g”全局进行更改。 我还没有弄清楚如何排除行的结尾,结果是插入的字符被标记到了结尾……所以像这样:

“ c400ad4db63b”

成为“ c4:00:ad:4d:b6:3b:”