我有如下列表:
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 /.
/^
匹配行首
/*
插入*