在 vim 中仅在行前添加文本

在 vim 中仅在行前添加文本

我有如下列表:

words
more words
here's more

skip space
words here
bananza!


D: look
more spaces
and words!

我怎样才能只在那些有文本的行的开头插入内容?:%norm 0i*这样就*可以了,但由于它会插入所有行,所以也会有空行。有没有办法做到这一点而不必返回并清除那些空格(我知道它们只是 *,所以这应该不难做到,但这是额外的工作)

答案1

类似这样的事情应该可以工作:

:%s/^\(.*[^\n]\)$/* \1/

编辑由于您要求对正则表达式进行细分:

:%所有线路

s/替代命令的开始;开始模式

^行首

\(我们要保留的组的开头。这在后面很重要。

.*任意数量的字符

[^\n]除了换行符之外的一些字符

\)小组结束

$行结束

/模式结束,替代开始

* \1插入*,然后是我们在左边选择的第一个组。

/替换和命令结束

答案2

尝试

:g/\S/s/^/* /

g/\S/是一个范围运算符(类似于,%但它选择所有具有非空白字符的行)。

s/^/* /在每个选定行的开头插入“*”。

这避免了@objectified 的答案中将前缀放在双空行序列第一行的问题。

以下在选定的每一行末尾附加“*”。

:g/\S/s/$/ */

答案3

如果空白行确实是空的,仅包含 NewLine,那么此方法有效。

:g/./s/^/*

解释

:g/全局替代开始寻找模式

.匹配除换行符之外的任意字符:help /.

/^匹配行首

/*插入*

相关内容