无论如何都要从命令行对文件执行Vim命令吗?
我知道相反的情况是这样的:
:!python %
但是如果我想在没有在Vim中打开它的情况下:retab
一个文件怎么办?例如:
> vim myfile.c
:retab | wq
这将打开myfile.c,用空格替换选项卡,然后保存并关闭。我想以某种方式将这个序列链接到一个命令。
这将是这样的:
> vim myfile.c retab | wq
答案 0 :(得分:64)
这有效:
gvim -c "set et|retab|wq" foo.txt
set et
(= set expandtab
)确保用正确的空格数替换tab
个字符(否则retab
将无效)。
我通常不会使用它,但vim -c ...
也可以使用
编辑:
上面给出的解决方案假定默认制表位8是合适的。例如,如果要使用制表位4,请使用命令序列"set ts=4|set et|retab|wq"
。
答案 1 :(得分:58)
您有几种选择:
-c "commands"
:在命令行中输入Ex命令
在您的示例中:vim myfile -c 'retab | wq'
。这就是Firstrock的建议。
-S "vim source file"
:将提供给定的vim脚本
(比如跑vim -c "source 'vim source file'"
):
如果您的文件script.vim
包含:
retab
wq
然后你可以使用vim myfile.c -s script.vim
(扩展名并不重要)
-s "scriptin file"
:将播放文件内容,因为它包含普通模式命令:如果您有script.txt
包含:
:retab
ZZ
,行结尾包含一个^M
字符(例如,您使用:set fileformat=mac | w
保存了脚本),然后您可以运行:vim myfile.c -S script.txt
(ZZ
是另一种退出vim并保存当前文件的方法。)
请注意,您可以使用vim my_file -W script.txt
记录这些脚本,但如果您碰巧使用gvim(GUI),则可以记录suffers a bug。
答案 2 :(得分:2)
不能直接回答您的问题,但如果您想用空格替换制表符(或对任何其他正则表达式进行搜索/替换)以获取文件列表,则可以使用就地sed搜索/替换:
sed -i 's/\t/ /g' foo1.txt foo2.txt
或
ls *.txt | xargs sed -i 's/\t/ /g'
(在这个例子中,我用三个空格替换每个制表符。)
注意:-i
标志表示就地操作。
来自sed
手册页:
-i[SUFFIX], --in-place[=SUFFIX]
edit files in place (makes backup if extension
supplied)