Vim复制行中的第一个单词,并在该单词后打印,每个单词之间用4个空格隔开

Vim复制行中的第一个单词,并在该单词后打印,每个单词之间用4个空格隔开,vim,Vim,我正在使用Vim,希望复制某些行中的第一个单词,并简单地将其粘贴在该单词后,用4个空格分隔。下面是一个例子 football run phone watch 届时将成为: football football run run phone phone watch watch 我只想申请第186至1413行。我可以使用Vim视觉模式执行此操作,但必须有一种更快的方法。您可以使用替换命令和行范围执行此操作: :186,1413s/^\w\+/& &/

我正在使用Vim,希望复制某些行中的第一个单词,并简单地将其粘贴在该单词后,用4个空格分隔。下面是一个例子

football
run
phone
watch
届时将成为:

football    football
run    run
phone    phone
watch    watch

我只想申请第186至1413行。我可以使用Vim视觉模式执行此操作,但必须有一种更快的方法。

您可以使用
替换
命令和行范围执行此操作:

:186,1413s/^\w\+/&    &/
1861413
是要操作的行的范围(开始、结束)
s
substitute
(请参见
:h substitute
)的缩写,它执行正则表达式搜索和替换<代码>^\w\+匹配任何单词字符(字母数字和下划线,不带空格)
&&
将匹配的单词替换为自身、四个空格和自身


第一个单词后的任何文本都将被追加到行尾。

您可以使用
:normal
命令:

:186,1413norm! yw4A ^[p

^[/code>你按
ctrl-v
然后按
ESC

对不起,我应该提到单词中的一些字符是特殊字符,例如ö,ë,ä,',所以直到这些字符被复制为止。所以单词“o'leary”只会被复制到“so only”o将被复制到行尾。而goöball一词,只有“go”将被复制到行尾。您可以使用
[a-zA-Z\u0100-\uFFFF]
(per)而不是
\w
来直接匹配Unicode字符,但这不会匹配撇号。您最好匹配第一个空格正则表达式。