2010-07-10 77 views
33

我有一个包含数百个TTL(TeraTermLanguage)文件的文件夹。 现在我想缩进所有这些文件。在VIM中缩进文件夹中的所有文件

我已经创建了用于缩进的teraterm.vim,并且我使用VIM打开了一个文件并执行“gg = G”,并且整个文件被正确缩进。

但有没有什么办法,我可以缩进文件夹中的所有文件。

我想在壳牌的帮助下做。但在VIM中,我无法将文件indent命令作为参数传递给VIM。

请建议哪些是我可以对VIM中的所有文件进行缩进的最佳方式。

+0

这有点让人困惑...... 哪个Shell你在用? 如果你正在使用类似的bash(和使用从下面amphetamachine答案),下面应该工作: 在* .ttl文件* TTL;做vim -s indentme.src $文件;完成 – skeept 2010-07-10 14:27:49

回答

57

比bash命令行脚本vim简单得多,就是使用vim内部的vimscript(或者从命令行脚本中使用vim脚本更简单一些)。我个人更喜欢使用arg列表来处理所有多文件操作。例如:

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

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

(其他人更喜欢使用缓冲区列表和:bufdo类似的模式,但与ARG名单我也不需要担心关闭当前缓冲区或开辟新的Vim会话。)

+0

谢谢尼古拉斯, 这简直是伟大的做法。这在许多其他情况下也是非常有用的。 尽管我能够使用脚本,但速度要快得多。 那么我有大约900个文件,我不得不修改。我唯一遇到的问题是每次用文件名填满屏幕时,我必须按空格键,以便它可以占用下一组文件。 – hari 2010-07-26 09:15:55

+5

如果出现问题,您应该能够避免“--More--”提示并通过':silent'的自由应用程序在每个屏幕上显示空格。例如。 ':argdo无声地执行“normal gg = G”|无声更新' – 2010-07-26 16:28:37

+1

+1和@ nicholasa.evans我会将该评论的内容移动/复制到实际答案中(但那只是我) – CoatedMoose 2013-01-24 04:43:22

11

打开一个终端。类型:

$ vim -w indentme.scr foo.c 

然后,此类型正好(在命令模式):

gg=G:wq 

这将关闭VIM,节约缩进文件名为indentme.scr Vim脚本中的所有线路的过程。

注:indentme.scr将包含所有键入的按键命令的记录,所以你做缩进文件时,不要使用箭头键查找文件围绕花费了大量的时间,因为这将导致到一个更大的脚本,并会严重拖慢批量操作。现在

,为了缩进所有行的文件,只需键入以下命令:

$ vim -s indentme.scr unindented-file.c 

Vim会闪烁开关(如果你是一个快速的电脑上,而不是编辑巨大文件),缩进所有行,然后就地保存该文件。

不幸的是,这将只在一次处理一个文件,但你可以轻松扩展使用shfor循环功能:

for filename in *.ttl ; do 
    vim -s indentme.scr "$filename" 
done 

注:这将节省,在任何文件。除非set bk在您的~/.vimrc中,否则不要期望保存备份。

2

我去了的amphetamachine的解决方案。不过,我需要递归搜索多个目录。以下是我使用的解决方案:

$ find . -type f -name '*.ttl' -exec vim -s indentme.scr "{}" \; 
0

参考上面的答案,我想完成此操作。 我将从零开始,让初学者能够理解。

步骤-1 安装通过使用下面的命令 打开一个终端的astyle(用于格式化工具)。类型:

sudo apt-get install astyle 

步骤2确保已VIM安装在您的system.Run从目录下面的命令中,你的代码文件are.The以下命令将创建一个我们要运行脚本递归以每个文件美化在我们的目录(如在上面提到的答案)

vim -w indentme.scr foo.c 

步骤3然后,键入这恰好(在命令模式),然后按回车

:%!astyle 

步骤4然后准确键入此(在命令模式),然后按回车

:wq 

步骤-5-上次执行这个递归由以下命令:

find . -type f -name '*.cpp' -exec vim -s indentme.scr "{}" \; 

所有的cpp文件都将被正确格式化。

相关问题