在Vim中合并多个文本文件

3
我有一个非常简单的问题,但是我找不到答案,也无法解决它。
我需要在Vim中附加多个文本文件(都在同一个目录中)。 我需要在Vim中执行此操作的原因是我正在运行Windows,无法访问*nix实用程序。
所有文件都具有名称模式(ex1.sql,ex2.sql,ex3.sql)。
我所需要做的就是获取它们中的文本(按照它们在目录中的顺序),并将它们附加到新的空文件中。
我已经制作了参数列表。
:args ex*.sql

希望对a寄存器中的所有参数执行命令。

:argdo gg"AyG

据说这些行是从每个文件中复制过来的。

然而,当我想将注册表粘贴到新文件中时,却没有任何输出。

:"ap

所以我检查了寄存器:

:reg

a 寄存器里充满了无意义的字符 (^]Jyecw?)。

有没有更好的方法做这个操作?为什么它说正在复制进寄存器,但实际上却是放入一堆奇怪的字符?


看看这个插件,它应该能够满足你的需求:http://www.vim.org/scripts/script.php?script_id=2789 - Explosion Pills
你是不是想在 "ap" 前面加上冒号? - dash-tom-bang
一个小提示,在Windows上,你可以使用DOS复制命令来合并文件。复制ex*.sql excombined.sql - Guillaume Gros
1个回答

6

argdo 会在参数列表中的每个文件执行一个ex-mode命令。你想要使用 gg"AyG 执行一个normal命令。尝试以下命令:

:argdo normal gg"AyG

3
Vimgolf 时间::argdo %y A(说明:该命令为 Vim 编辑器中的命令,具体含义为在多个文件中执行 %y A 命令,即将每个文件的全部内容复制到寄存器中并添加到行末。) - Peter Rincker
使用 :normal! 避免与映射发生冲突。 - ib.
不要忘记使用 qaq:let @a='' 清除寄存器。 - ib.
@ib 我不确定你所说的“与映射冲突”的意思是什么。此外,感谢您包含了如何清除寄存器的信息。我也在找这个。 - svh160
我已经非常接近了,只是在粘贴寄存器语法方面有些粗心(我包含了分号)。 - svh160
@svh160 没有首选方法。但我认为许多人喜欢使用Unix的cat或Windows的copy命令(例如copy mar89.rpt + apr89.rpt + may89.rpt report)。至于使用vim,可能取决于个人,无论感觉如何都可以。我个人喜欢较短的方法,因为它使用纯ex命令,这些命令往往更快。当然,有可能超过您的寄存器大小。那么最好使用:argdo w >> destination.txt - Peter Rincker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接