用于 !在VIM中

用于 !在VIM中

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

答案1

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

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

顺便说一句,您还可以使用ZQ执行与 相同的操作:q!ZZ执行相同的操作:wq,这可以更方便地打字:)

Vim 还有一个内置帮助,您可以通过以下方式访问:help:退出有它自己的快速主题页面::help Q_wq

答案2

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

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

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

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

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

答案3

:wq!例如,其他答案对于用例非常完整。

但问题更加开放,关于一般用途!

对于初学者:的名字!是“bang”。例如,谷歌搜索“vim bang linux”就会出现这个问题。 (有趣的是,有一个“shebang”,#!)。

bang 还用于从 Vim 内部发出 bash 命令,例如:

:!ls

产生 bash shell,发出ls并显示输出,然后“按 ENTER 继续”;按 ENTER 后,用户返回到 Vim 中的位置。

从这个历史话题来看:很棒的 Vim 快捷键

:再次将我置于命令模式。!指示下一次复制的内容应通过命令行传送。”

从这里您可以注意到,它的!作用远远不只是强制退出:q!

相关内容