我想在终端中运行一个 vim 命令,例如 gg=G
。
我尝试过 vim gg=G filename
,但它没有起作用。
这很有用,因为我通常使用 gedit,但 vim 非常强大,所以可以使用一些其功能,而无需进入 vim 中输入文件并退出 vim,特别是因为退出需要 14 个上下文相关的指令。
与本问题名称类似的另一个问题是: 如何在 vim 自身上运行 vim 命令。而这个问题是关于在文件上运行 vim 命令。
我想在终端中运行一个 vim 命令,例如 gg=G
。
我尝试过 vim gg=G filename
,但它没有起作用。
这很有用,因为我通常使用 gedit,但 vim 非常强大,所以可以使用一些其功能,而无需进入 vim 中输入文件并退出 vim,特别是因为退出需要 14 个上下文相关的指令。
与本问题名称类似的另一个问题是: 如何在 vim 自身上运行 vim 命令。而这个问题是关于在文件上运行 vim 命令。
Vim可以完美地执行您所期望的命令。
只需使用ex +"<command>" <filename>
或vim -c "<command>" <filename>
,它们是等价的。
尝试运行以下命令:
$ ex +"norm gg=G" +"wq" <filename>
它会打开您的文件,使用第一个命令过滤整个文件,并使用wq
命令保存(覆盖)文件。
如果indent.vim文件是:
:exec "normal gg=G"
:wq
例如,在所有JS文件中运行:
for filename in ./*.js; do
vim -es ./$filename <indent.vim
-e 在文件filename上以ex模式运行Vim,并从文件indent.vim中读取
-s 以静默模式操作,即不输出任何提示(如::提示符)
如果逐个打开文件,则其他答案都很好,但仅针对自动缩进,ALE插件可以自动完成此操作。
或者检查其文件扩展名的linter,例如javascript: link,我确定eslint有一个shell命令标志只缩进一个文件。类似于:
for filename in ./*.js; do
eslint --flagToIndent $filename;
首先打开所需文件(如果文件较多或较大可能会出现错误):
$ vim -p ./*.js;
任何情况下的第二次运行
:silent! argdo exec "normal gg=G"
vim --help
提供了多个可能的选项:
vim --cmd run command before config is loaded
vim -c run command after config is loaded
vim -s read normal mode commands from <scriptin>
你需要将所有命令放入一个文件中,例如:
$ cat pippo
gg=G<enter>
然后你需要运行 vim -s script yourfile,像这样:
$ vim -s pippo yourfile.txt
pippo
file is not needed to be in same directory as yourfile.txt
. Run: pippo="./zzz_deleteMe.txt"; echo "gg=G" > $pippo; vim -s $pippo ~/.vimrc;
- Xopi García
ex +"norm gg=G" +"wq" <filename>
非常好用!您能解释一下norm
是什么吗?另外,当我使用vim -c "<command>" <filename>
时,出现了错误:Error detected while processing command line: E492: Not an editor command: gg=G
。 - Carlos MartinsG
到达EOF),也可以运行执行模式命令(例如:set textwidth=79
)。示例bash同时运行两者:$ vim ~/.vimrc -c ":set foldcolumn=6 textwidth=0 | :execute 'normal zR' | /map"
,其中zR
展开所有内容,/map
搜索映射。 - Xopi Garcíavim -c "norm gg=G" + "wq" <filename>
无法工作了。正确的语法应该是vim -c "norm gg=G" -c "wq" <filename>
。请注意,我们使用了 -c 标志两次,而不是使用+
符号。 - Carlos Martins