我有一个看起来像这样的文件:
file1
file2
file3
.
.
.
filen
我想将其转换为:
echo "file1"
cat file1
echo "file2"
cat file2
.
.
.
.
echo "filen"
cat filen
一种方法是使用for循环并读取原始文件的内容并将修改后的内容写入另一个文件,我这样做并且它有效。是否有任何命令在vim
到:g
或任何其他命令中执行相同操作?
答案 0 :(得分:8)
试试这个:
:%s/.*/echo "\0"\rcat \0/g
的说明:强> 的
:%s/a/b/g
表示搜索整个文件并将a
替换为b
。
.*
表示匹配一行中的所有内容。
\0
表示匹配的内容。
\r
表示新行。
答案 1 :(得分:3)
或者您可以应用宏
yypha"<esc>^iecho "<esc>j^icat <esc>j
yypha"
猛烈抓住当前行,将其置于当前行之下,然后使用h
a"<esc>
附加"
并返回正常模式^iecho "<esc>
将echo "
放在file*
前面并再次恢复正常j^icat<esc>
在下一行上添加cat,j
最后转到下一行准备重新应用宏您可以按qq
和所述按钮或
将yypha"^[^iecho "^[j^icat ^[j
写为{strong> ^[
,然后输入Ctrl-V
,然后Esc
,然后"qyy
来排除q中的行-th register,也是一个可执行的宏。
宏本身可以使用@q
一次或30@q
三十次运行。
答案 2 :(得分:1)
我通常会接受已接受的答案,但只是为了表明命令模式(Ex)命令也可以很好:
:g/^./t. | norm!
icat␣
^ Ok
^ O0echo␣"
^ O < / KBD> A"
注意:使用 ^ V 输入密钥代码(例如 ^ V ^ O )。在Windows上, ^ Q 默认具有该功能)
解释
:g/^./
(对包含至少一个字符的每一行重复)t.
(重复下面一行)其余的:
k
(上一行)0
(行首)'echo "'
'"'