如何从终端对文件执行 运行 vim 命令?
How to run a vim command on a file from the terminal?
我想 运行 一个 vim 命令,例如 gg=G
但在终端中。
我试过vim gg=G filename
但是没用。
这会很有用,因为我通常在 gedit 上工作,但是 vim 非常强大,所以不用在 vim [=28] 中输入文件就可以使用它的一些功能会很酷=] 执行命令并退出 vim,特别是因为退出需要 14 条上下文相关的指令。
另一个与这个问题同名的问题,是关于不同的主题:How to run vim commands on vim it self。虽然这个问题是关于 运行ing vim 文件上的命令
您必须将所有命令插入到一个文件中,例如:
$ cat pippo
gg=G<enter>
之后你必须 运行 vim -s 脚本你的文件,像这样:
$ vim -s pippo yourfile.txt
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>
Vim 可以 运行 完美地按照我解释你的愿望的方式命令。
您只需使用 ex +"<command>" <filename>
或 vim -c "<command>" <filename>
,它们是等价的。
尝试运行以下操作:
$ ex +"norm gg=G" +"wq" <filename>
它将打开您的文件,使用第一个命令过滤整个文件并使用 wq
命令保存(覆盖)。
我猜你想要 loop through every file 并缩进它,甚至不打开它。
- 解决方案 A.1:通过 shell 文件循环。自制Vim脚本
如果 indent.vim 文件将是
:exec "normal gg=G"
:wq
运行 例如在所有 js 文件中:
for filename in ./*.js; do
vim -es ./$filename <indent.vim
-e 运行s Vim 在文件 filename 的 ex 模式下并从文件 indent.vim
中读取
-s 以静默模式运行,即不输出任何提示(如 : 提示)
- 解决方案 A.2:通过 shell 文件循环。使用 linters。
如果您打开 1 对 1 文件。其他答案很好,但是
仅针对自动缩进,ALE 插件可以实现自动缩进。
或者检查它的 linters 是否有你的文件扩展名,例如对于 javascript: link, I am sure eslint 有一个 shell 命令标志来缩进文件。
类似于:
for filename in ./*.js; do
eslint --flagToIndent $filename;
- 解决方案 B: 或通过 Vim argdo, bufdo,...
第一次打开所需的文件(如果文件很多或很重可能会出错):
$ vim -p ./*.js;
第二 运行 在任何
:silent! argdo exec "normal gg=G"
我想 运行 一个 vim 命令,例如 gg=G
但在终端中。
我试过vim gg=G filename
但是没用。
这会很有用,因为我通常在 gedit 上工作,但是 vim 非常强大,所以不用在 vim [=28] 中输入文件就可以使用它的一些功能会很酷=] 执行命令并退出 vim,特别是因为退出需要 14 条上下文相关的指令。
另一个与这个问题同名的问题,是关于不同的主题:How to run vim commands on vim it self。虽然这个问题是关于 运行ing vim 文件上的命令
您必须将所有命令插入到一个文件中,例如:
$ cat pippo
gg=G<enter>
之后你必须 运行 vim -s 脚本你的文件,像这样:
$ vim -s pippo yourfile.txt
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>
Vim 可以 运行 完美地按照我解释你的愿望的方式命令。
您只需使用 ex +"<command>" <filename>
或 vim -c "<command>" <filename>
,它们是等价的。
尝试运行以下操作:
$ ex +"norm gg=G" +"wq" <filename>
它将打开您的文件,使用第一个命令过滤整个文件并使用 wq
命令保存(覆盖)。
我猜你想要 loop through every file 并缩进它,甚至不打开它。
- 解决方案 A.1:通过 shell 文件循环。自制Vim脚本
如果 indent.vim 文件将是
:exec "normal gg=G"
:wq
运行 例如在所有 js 文件中:
for filename in ./*.js; do
vim -es ./$filename <indent.vim
-e 运行s Vim 在文件 filename 的 ex 模式下并从文件 indent.vim
中读取-s 以静默模式运行,即不输出任何提示(如 : 提示)
- 解决方案 A.2:通过 shell 文件循环。使用 linters。
如果您打开 1 对 1 文件。其他答案很好,但是 仅针对自动缩进,ALE 插件可以实现自动缩进。
或者检查它的 linters 是否有你的文件扩展名,例如对于 javascript: link, I am sure eslint 有一个 shell 命令标志来缩进文件。 类似于:
for filename in ./*.js; do
eslint --flagToIndent $filename;
- 解决方案 B: 或通过 Vim argdo, bufdo,...
第一次打开所需的文件(如果文件很多或很重可能会出错):
$ vim -p ./*.js;
第二 运行 在任何
:silent! argdo exec "normal gg=G"