Shell 使每一条线双倍于vim
我有一个如下所示的文件:Shell 使每一条线双倍于vim,shell,vim,vi,Shell,Vim,Vi,我有一个如下所示的文件: file1 文件2 文件3 . . . 菲林 我想将其转换为: echo“file1” cat文件1 回显“文件2” cat文件2 . . . . 回声“文件” 猫锉 一种方法是使用for循环,读取原始文件的内容,然后将修改后的内容写入另一个文件,我这样做了,它成功了。在vim到:g或任何其他命令中是否有任何命令可以执行相同的操作?尝试以下操作: :%s/.*/echo "\0"\rcat \0/g 说明: :%s/a/b/g表示搜索整个文件并将a替换为b *表示
file1
文件2
文件3
.
.
.
菲林
我想将其转换为:
echo“file1”
cat文件1
回显“文件2”
cat文件2
.
.
.
.
回声“文件”
猫锉
一种方法是使用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“^iecho”j^icat j
猛拉当前行,将其置于当前行下方,然后随着yypha“
h
追加一个a“
并返回正常模式”
将^iecho”
放在echo“
前面,然后再次恢复正常文件*
在下一行中预先添加cat,然后j^icat
最后转到下一行,准备重新应用宏j
qq
和所述按钮录制宏,或
写入yypha“^[^iecho”^[j^icat^[j
,将^[/code>
输入为Ctrl-V
,然后Esc
,然后“qyy
将第q个寄存器中的行拉出,这也是一个可执行宏
宏本身可以使用
@q
运行一次或30@q
30次。我通常会同意接受的答案,但只是为了说明命令模式(Ex)命令也很好:
:g/^./t.| norm!
icat␣代码>^Ok
^O0echo␣“
^OA”
注意:使用^V(例如^V^O)输入键码。在windows上,^Q默认具有该功能)
解释
:g/^./
(对至少包含一个字符的每行重复)
t.
(复制下面的行)
- 其余的:
- 插入“cat”
- ^O
k
(向上一行)
- ^O
0
(在行首)
- 插入
“echo”
- 在行尾追加
“
太棒了……世界上有什么事情是vim做不到的:)……如果你能解释一下它是如何工作的,那就太好了。。thanks@nav_jan:它不洗碗。这是Emacs的事。@xdazz为什么要更改答案:%s/\(.*)/echo“\1”\rcat\1/g
对我来说非常有效?@nav_jan因为这一个同样有效,但更短,请检查我的编辑。@vim\r
中的fork0是新行。是的,没有解释宏很难获得。但最酷的是宏存储在寄存器中(这里是q)因此,您可以粘贴和编辑它并将其拉回到寄存器中-因此,键入错误的宏不是重新录制宏的理由。如何查看寄存器的内容?您可以键入:reg
,或者仅将其粘贴到空文件中,例如使用“qp
(粘贴寄存器q)为什么在0
之前需要^O
,而在A
之前不需要呢?@sg-lecram-Oops。不知怎的,这件事出了岔子。谢谢提醒,我已经解决了