我发现有时: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
您提到的,但也save
:save!
如果文件已存在,则将覆盖该文件,而如果您确定自己在做什么,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!
!