4

我有一个看起来像这样的文件:

file1
file2
file3
.
.
.
filen

我想将其转换为:

echo "file1"
cat file1
echo "file2"
cat file2
.
.
.
.
echo "filen"
cat filen

一种方法是有一个 for 循环并读取原始文件的内容并将修改后的内容写入另一个文件,我这样做了,它奏效了。vim在through:g或任何其他命令中是否有任何命令可以执行相同的操作?

4

3 回答 3

8

尝试这个:

:%s/.*/echo "\0"\rcat \0/g

解释:

:%s/a/b/g表示搜索整个文件并替换ab.

.*表示匹配一行中的所有内容。

\0表示匹配的东西。

\r表示新行。

于 2012-07-06T10:26:42.323 回答
3

或者你可以应用一个宏

yypha"<esc>^iecho "<esc>j^icat <esc>j
  • yypha"拉动当前行将其置于当前行之下并与h
  • a"<esc>附加 a"并返回正常模式
  • ^iecho "<esc>放在echo "前面,file*然后又恢复正常
  • j^icat<esc>在下一行添加 cat 和
  • j最后转到下一行以准备重新应用宏

您可以通过按下qq和 描述的按钮来录制宏,或者

write yypha"^[^iecho "^[j^icat ^[jwith^[被输入 as Ctrl-VthenEsc然后"qyy在第 q 个寄存器中抽出该行,这也是一个可执行宏。

宏本身可以运行@q一次或30@q三十次。

于 2012-07-06T11:04:22.867 回答
1
于 2012-07-06T21:52:52.097 回答