我有一个如下所示的文件:
file1
file2
file3
.
.
.
filen
我想将其转换为:
echo "file1"
cat file1
echo "file2"
cat file2
.
.
.
.
echo "filen"
cat filen
一种方法是使用 for 循环并读取原始文件的内容并将修改后的内容写入另一个文件,我这样做了并且成功了。是否有任何命令可以在
vim
到 :g
或任何其他命令中执行相同的操作?
试试这个:
:%s/.*/echo "\0"\rcat \0/g
说明:
:%s/a/b/g
表示搜索整个文件并将a
替换为b
。
.*
表示匹配一行中的所有内容。
\0
表示匹配的东西。
\r
表示新行。
或者你可以应用宏
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
,其中 ^[
输入为 Ctrl-V
,然后是 Esc
,然后是 "qyy
,以拉出第 q 个寄存器中的行,这也是一个可执行宏。
宏本身可以使用
@q
运行一次或 30@q
三十次。
我通常会选择接受的答案,但只是为了表明命令模式(Ex)命令也可以很好:
:g/^./t. | norm!
^Oicat␣
^Ok
^OA0echo␣"
"
注意:使用 ^V 输入键码(例如 ^V^O)。在 Windows 上,^Q 默认具有该功能)
说明
:g/^./
(对包含至少一个字符的每一行重复)t.
(复制下面的行)其余:
k
(上一行)0
(在行首)'echo "'
'"'