2010-07-09 66 views
2

我知道,使用VIM我可以只使用格式代码

gg=G 

现在我必须格式化30个文件的格式C++代码,由专人这样做就变得乏味。我看看如何将外部命令传递给VIM,所以我试过

vim -c gg=G -c wq file.cpp 

但它不起作用。

你能给我一个提示吗?

感谢

回答

8

为什么不加载所有的文件起来缓冲区和使用bufdo一次执行所有这些的命令?

:bufdo "execute normal gg=G" 
+0

如何加载缓冲区中的所有文件?在bash脚本中使用“for”循环?谢谢 – flow 2010-07-09 16:13:39

+1

如果您的shell支持文件匹配,则不需要脚本。例如,如果我想加载目录'〜/ mycode'中的所有ruby文件,我会输入'$ vim〜/ mycode/*。rb' – michaelmichael 2010-07-09 16:18:16

+0

太棒了!我完成了编辑它们。现在我该如何拯救他们?我尝试过:bufdo“执行正常的wq”但它不起作用 – flow 2010-07-09 16:24:06

5

-c gg=G更改为-c 'normal! gg=G'-c交换机只接受ex模式命令,gg=G是两个正常模式命令。

1

我更喜欢:bufdo答案稍作修改。我更喜欢arg列表而不是缓冲区列表,所以我不必担心关闭当前缓冲区或打开新的vim会话。例如:

:args ~/src/myproject/**/*.cpp | argdo execute "normal gg=G" | update 
  • args设置arglist中,使用通配符(**将匹配当前目录以及子目录)
  • |让我们在一行
  • argdo运行多个命令运行以下命令在每个参数(它会吞下第二个|
  • execute防止normal吞噬下一个管道。
  • normal运行以下普通模式下的命令(你用摆在首位的工作)
  • update就像:w,但只有当缓冲区被修改保存。

:args ... | argdo ... | update图案为任何类型的项目宽文件操作的非常有用的(例如,查询,并经由“%S /富/酒吧/ GE”或设置均匀fileformatfileencoding替换)。