用于 !在 VIM 中

use*_*293 9 vim vi

我已经看到有时:q有效,但有时我们必须使用:q!. 许多命令都是这种情况。我想知道!in的一般用途是什么vim以及何时使用它。我试图用谷歌搜索这个,但似乎搜索省略了感叹号。

Dra*_*oan 26

当您不对文件的实际内容进行任何更改时,您只需使用:q. 但是,如果您进行编辑,vim 将不允许简单的退出,因为您可能不想放弃这些更改(特别是如果您在 vim 中长时间编辑和使用时:q不小心)。在:q!这种情况下是一种力量的退出操作(覆盖警告)。您可以发出强制退出所有打开的窗口(如与开Ctrlwn)用:qa!

您可以使用:wq(或:x)写出更改并退出,这有时会失败(文件已以只读方式打开(-R在命令行上,或使用view命令调用 vim ),在这种情况下,您可以使用:wq!.

顺便说一句,你还可以用ZQ做同样的操作:q!,并ZZ做同样的:wq,它可以在手打字更容易:)

Vim 还有一个内置的帮助,你可以通过:help; 退出有它自己的快速主题页面::help Q_wq

  • 另一方面,你也可以使用 `!` 来运行 shell 命令,如 `:!ls -l` (2认同)

小智 5

没有“一般用途” !,它只是一个修饰符。每个命令都可以选择额外的命令!对其执行的操作。

许多情况下,命令被编程为!强制执行。示例包括q您提到的,但也savesave!如果文件已存在,则将覆盖该文件,而如果您确定自己在做什么,save则将返回错误并建议使用。save!

最后!单独使用用于 shell 命令,例如:!ls:!mkdir foo

在(来自您的评论)的情况下read,该命令read! <something>被 Vim 解释为“执行<something>并读取(意思是,在 Vim 中,写入缓冲区)其输出”。因此,在这里, 好像!不是作为命令的修饰符read,而是作为独立的命令!。可能是该read命令没有声明一个变体!,所以 Vim 只是独立解释其余部分(因此它!在 后读取“单独使用” read),或者声明一个具有这种特定行为的read变体( “将其余部分作为 shell 执行”)这恰好模仿了“单独使用”的作用。!!

我想要点是:没有规则,每个命令都定义了!要做什么,虽然试图在修饰符的效果上保持某种一致性,但没有超级严格的规则(例如!永远是for forcing")允许用更少的击键获得更有用的行为,这也是一个优点。

  • ...还有 `:w!cat` 和 `:w!cat` 之间令人烦恼的区别 (3认同)