如何使用vim向非空行添加字符

如何使用vim向非空行添加字符,vim,Vim,我有一个文本文档,其中有空行和以大写月份开头的行 我想在每个非空行的开头加上“-” 我试过这个: 1,$s/^[A-Z]/- / 并删除当月的第一个字母(例如,应为“-June”时的“-une”) 我怎样才能把那封信加回去?或者有一个“更好”的方法来做一个大文件,我需要保持空白行未被触摸。 试试这个,它会给你想要的 %s/^[A-Z]/- &/ 或者使用:g: :g/^[A-Z]/s/^/- / 试试这个,它会给你想要的 %s/^[A-Z]/- &/ 或者使用:g: :

我有一个文本文档,其中有空行和以大写月份开头的行

我想在每个非空行的开头加上“-”

我试过这个:

1,$s/^[A-Z]/- / 
并删除当月的第一个字母(例如,应为“-June”时的“-une”)
我怎样才能把那封信加回去?或者有一个“更好”的方法来做一个大文件,我需要保持空白行未被触摸。 试试这个,它会给你想要的

%s/^[A-Z]/- &/
或者使用
:g

:g/^[A-Z]/s/^/- /

试试这个,它会给你想要的

%s/^[A-Z]/- &/
或者使用
:g

:g/^[A-Z]/s/^/- /

您有一个答案,要么将匹配的文本添加回,要么在替换过程中避免完全匹配文本。另一种方法是将匹配指定为零宽度,或设置匹配的结尾,以便匹配但不替换文本:

%s/^[A-Z]\@=/- /


请参见
:help zero width
:help/\@=
:help/\ze
,您得到的答案要么将匹配的文本重新添加,要么在替换过程中避免完全匹配文本。另一种方法是将匹配指定为零宽度,或设置匹配的结尾,以便匹配但不替换文本:

%s/^[A-Z]\@=/- /


请参见
:help zero width
:help/\@=
:help/\ze

或者如果更容易记住,
\0
与替换部分中的
&
几乎相同。vimgolf:如果行确实是空的,那么我们可以使用
,因此
:%s/^.-&
或者如果更容易记住,
\0
与替换零件中的
&
几乎相同。vimgolf:如果行是真正的空白,那么我们可以使用
,因此
:%s/^./-&
两个答案都有效,我感谢这一个答案中的帮助和解释。两个答案都有效,我很感激这篇文章中的帮助和解释。