我有一个包含数百个TTL(TeraTermLanguage)文件的文件夹。 现在我想缩进所有这些文件。
我已经创建了teraterm.vim用于缩进,我使用VIM打开一个文件并执行“gg = G”并且整个文件正确缩进。
但有什么办法可以缩进文件夹中的所有文件。
我想在壳牌的帮助下做。但在VIM中,我无法将文件缩进命令作为VIM的参数传递。
请建议哪种方法可以缩进VIM中的所有文件。
答案 0 :(得分:60)
比从bash命令行编写vim简单得多的是使用vim内部的vimscript(或者可能是一个更简单的单行程序,用于从命令行编写vim脚本)。我个人更喜欢使用arg列表进行所有多文件操作。例如:
:args ~/src/myproject/**/*.ttl | argdo execute "normal gg=G" | update
args
使用通配符设置arglist(**
将匹配当前目录以及子目录)|
让我们在一行上运行多个命令argdo
在每个arg上运行以下命令(它将吞下第二个|
)execute
阻止normal
吞下下一根烟斗。normal
运行以下常规模式命令(您首先使用的是什么)update
与:w
类似,但仅在修改缓冲区时保存。此:args ... | argdo ... | update
模式对于任何类型的项目范围文件操作非常有用(例如,通过%s/foo/bar/ge
搜索和替换或设置统一fileformat
或fileencoding
)。
(其他人喜欢使用缓冲区列表和:bufdo
的类似模式,但是使用arg列表我不需要担心关闭当前缓冲区或打开新的vim会话。)
答案 1 :(得分:11)
打开终端。类型:
$ vim -w indentme.scr foo.c
然后,准确输入(在命令模式下):
gg=G:wq
这将关闭vim,保存将文件中的所有行缩进到名为indentme.scr
的Vim脚本的过程。
注意: indentme.scr
将包含所有键入命令的记录,因此当您完成缩进文件时,请不要花费大量时间使用箭头键来查看在文件周围,因为这将导致更大的脚本,并将严重减慢批处理操作。
现在,为了缩进文件中的所有行,只需输入以下命令:
$ vim -s indentme.scr unindented-file.c
Vim会快速打开 - 关闭(如果你在快速计算机上而不是编辑大文件),缩进所有行,然后将文件保存到位。
不幸的是,这一次只能在一个文件上运行,但您可以使用sh
的{{1}}循环轻松扩展功能:
for
注意:这将保存任何文件。除非您for filename in *.ttl ; do
vim -s indentme.scr "$filename"
done
中有set bk
,否则不要指望保存备份。
答案 2 :(得分:3)
我离开了安培塔机器的解决方案。但是,我需要递归搜索多个目录。这是我使用的解决方案:
$ find . -type f -name '*.ttl' -exec vim -s indentme.scr "{}" \;
答案 3 :(得分:0)
参考上述答案,我想完成这项工作。 我将从头开始,以便初学者能够理解。
<强>步骤1 强> 使用以下命令安装astyle(用于格式化的工具) 打开一个终端。类型:
jquery library
Step-2 确保你的系统上安装了vim。从你的代码文件所在的目录中运行以下命令。下面的命令将创建一个我们打算以递归方式运行的脚本以美化我们目录中的每个文件。(如上面的答案所述)
sudo apt-get install astyle
步骤3 然后,准确输入(在命令模式下)并按Enter键
vim -w indentme.scr foo.c
步骤4 然后准确输入(在命令模式下)并按Enter键
:%!astyle
步骤5 最后通过以下命令递归运行:
:wq
所有cpp文件都将正确格式化。