我被困住了,无法逃脱。它说:
type :quit<Enter> to quit VIM
但是当我键入它时,它只会出现在对象主体中。
:quit
,然后按 [ENTER]
键。
git commit
将来将您发送到 vim:git config --global core.editor="nano"
VIM 基本上有两种模式:命令模式(下面也称为“普通模式”)和插入模式。您很可能处于“插入模式”,它会(毫不奇怪)插入您键入的内容,而在“命令模式”中,它会尝试执行您给出的命令(例如 :quit
)。
然而,VIM 通过在最后一行的左侧显示“-- INSERT --”来指示它何时处于插入模式(它还在那里显示行号和列号)。
https://i.stack.imgur.com/BqGxD.png
因此,要结束插入模式并返回命令模式,只需按 Esc 键。然后你可以输入 :
进入“命令行模式”。屏幕底部将出现一个冒号 (:
),您可以输入以下命令之一。要执行命令,请按 Enter 键。
:q 退出(:quit 的缩写)
:问!不保存就退出(简写:quit!)
:wq 写和退出
:wq!即使文件只有读取权限,也要写入和退出(如果文件没有写入权限:强制写入)
:x 写入和退出(类似于 :wq,但只有在有变化时才写入)
:exit 写入并退出(与 :x 相同)
:qa 全部退出(:quitall 的缩写)
:cq 退出而不保存并使 Vim 返回非零错误(即退出错误)
您也可以通过输入 ZZ
保存并退出(与 :x
相同)或 ZQ
直接退出(与 :q!
相同)直接从“普通模式”退出 Vim。 (注意大小写在这里很重要。ZZ
和 zz
不是同一个意思。)
Vim 有广泛的帮助 - 您可以使用 :help
命令访问 - 您可以在其中找到所有问题的答案和初学者教程。
图片值一千个 Unix 命令和选项:
https://i.stack.imgur.com/BN6vl.png
我每学期都把这个画给我的学生,之后他们似乎掌握了 vi。
Vi 是一个只有三个状态的 finite state machine。
启动时,vi 进入 COMMAND 模式,您可以在其中盲目地键入简短的、少量字符的命令。你知道你在做什么;这不适合业余爱好者。
当您想实际编辑文本时,您应该使用一些单字符命令进入 INSERT 模式:
i:在光标处进入 INSERT
I:在行首进入 INSERT 模式
a:在光标后追加
A:在行尾追加
o:在当前行下方新开一行
O:在当前行的地方开一个新行
现在,回答问题:退出。
您可以从 EX 模式退出 vi:
q:如果您没有进行任何修改,或事先保存它们
q!:忽略任何修改并退出
wq:保存并退出
x:这等于 wq
w
和 x
接受文件名参数。如果您以文件名启动 vi,则无需在此处再次提供。
最后,最重要的一点:如何进入 EX 模式?
EX 模式适用于您可以在屏幕底部看到输入的长命令。在 COMMAND 模式下,您按下冒号 :
,冒号将出现在底行,您可以在此处键入上述命令。
在 INSERT 模式下,您需要按 ESC,即 Escape 按钮,进入 COMMAND 模式,然后: 进入 EX 模式。
如果您不确定,请按 ESC,这将使您进入命令模式。
稳健的方法是 ESC-:-x-Enter 保存文件并退出。
w
不会从 Ex 模式更改为 Command 模式,但 Esc
会。我究竟做错了什么?
:w
。那么它就很有意义了。顺便说一句,是否有从磁盘重新加载的命令(即恢复更改但不关闭文件)?如果是这样,它可能在图中的 w
旁边。
:help vim-modes
。
在输入命令之前,请按 Esc 键。输入后,点击回车确认。
Esc 结束当前命令并将 Vim 切换到 normal mode。现在,如果您按 :,:
将出现在屏幕的底部。这确认您实际上是在键入命令而不是在编辑文件。
大多数命令都有缩写,可选部分括在括号中:c[ommand]
。
标有“*”的命令仅适用于 Vim(未在 Vi 中实现)。
安全退出(如果有未保存的更改则失败):
:q[uit] 退出当前窗口。如果这是最后一个窗口,请退出 Vim。当在当前缓冲区中进行更改时,这将失败。
:qa[ll]* 退出所有窗口和 Vim,除非有一些缓冲区已被更改。
提示退出(如果有未保存的更改则提示)
:conf[irm] q[uit]* 退出,但是当有一些缓冲区被改变时给出提示。
:conf[irm] xa[ll]* 写入所有更改的缓冲区并退出 Vim。当某些缓冲区无法写入时,会出现提示。
写入(保存)更改并退出:
:wq 写入当前文件(即使它没有改变)并退出。当文件为只读文件或缓冲区没有名称时,写入失败。 :wqa[ll]* 用于所有窗口。
:wq!相同,但甚至写入只读文件。 :wqa[ll]!* 适用于所有窗口。
:x[it], ZZ(详细信息)。仅当文件被更改并退出时才写入文件, :xa[ll]* 用于所有窗口。
放弃更改并退出:
:退出]! ZQ* 不写就退出,可见缓冲区发生变化时也是如此。有更改的隐藏缓冲区时不退出。
:qa[ll]!*, :quita[ll][!]* 退出 Vim,对缓冲区的所有更改(包括隐藏)都将丢失。
按 Return 确认命令。
这个答案没有引用所有 Vim 写入和退出命令和参数。实际上,它们在 Vim documentation 中被引用。
Vim 有大量的内置帮助,键入 Esc:help
Return 来打开它。
这个答案的灵感来自于 other one,最初由 @dirvine 创作并由其他 SO 用户编辑。我已经包含了来自 Vim 参考、SO 评论和其他一些来源的更多信息。 Vi 和 Vim 的差异也反映出来。
如果你想退出而不保存在 Vim 并且让 Vim 返回一个非零的退出代码,你可以使用 :cq
。
我一直都在使用它,因为我懒得为 !
换小指。我经常将不需要保存在文件中的东西通过管道传输到 Vim。我们还有一个奇怪的 SVN 包装器在工作,它必须以非零值退出才能中止签入。
:q!
中止 git 提交可以正常工作,因为 git 正在检查非空消息而不是非零退出代码。
这是终极的、严肃的、硬核的退出命令,适用于最坏情况下的退出 Vim,如果你想退出,不知道你做了什么,也不关心你打开的文件会发生什么。
Ctrl-cEnterCtrl-\Ctrl-n kbd>回车:qa!
回车
这会让你大部分时间都出去。最多。
您可能会天真地认为您可以按 Esc 几次然后执行 :qa!
。哦,你怎么会弄错的。
看看这些点击 Esc 是不够的有趣案例:
iCtrl-ovg(您进入插入模式,然后是可视模式,然后是操作员挂起模式)
QappendEnter
iCtrl-ogQCtrl-r=Ctrl-k (感谢 porges 对于这种情况)
iCtrl-ogQCtrl-r=inputdialog('foo','bar')回车
:set insertmode (这是 Ctrl-\Ctrl-n 返回正常模式的情况)
:q
或 :wq
i<Ctrl-O>gQ<Ctrl-R>=<Ctrl-K>
会怎样?
如果您需要在 easy 模式 中退出 Vim(使用 -y
选项),您可以通过按 Ctrl + L 进入普通 Vim 模式然后任何正常的退出选项都将起作用。
Ctrl+O
暂时离开 INSERT 模式,然后输入 :q
。这种组合的技巧在普通 vim 中也很有用,也可以执行单个命令并返回到 INSERT 模式。
Vim 具有三种操作模式:输入模式、命令模式和 Ex 模式。
输入模式 - 您键入的所有内容,所有击键都会在屏幕上回显。
命令模式或转义模式 - 您在此模式下键入的所有内容都被解释为命令。
Ex 模式 - 这是另一个编辑器,例如。它是一个行编辑器。它适用于每行或基于一系列行。在此模式下,屏幕底部会出现一个 :。这是前任编辑。
要退出 Vim,您可以在 ex 模式或命令模式下退出。当你处于输入模式时,你不能退出 Vim。
退出 ex 模式
您需要确保您处于命令模式。为此,只需按 Esc 键。按 : 键进入 ex 模式 在 ex 模式中使用以下任意组合退出: :q - 退出 :q! - 退出而不保存:wq - 保存并退出或写入并退出:wq! - 与 wq 相同,但在文件权限为只读的情况下强制写入 :x - 写入并退出 :qa - 全部退出。当打开多个文件时很有用:vim abc.txt xyz.txt
退出命令模式
按退出键。如果您处于命令模式,您可能已经这样做了。按大写 ZZ (shift zz) - 保存并退出 按大写 ZQ (shift zq) - 退出而不保存。
Alt Z
Z
即按:alt-shift-z
然后 shift-z
命令字符。
Q
。在该模式下,您可以输入一个又一个命令,而无需每次都按 :
。要退出前模式,您可以输入 :vi
或 :visual
在点击 ESC (或我的电脑上的 cmd + C )后,您必须点击 : 以显示命令提示符.然后,您可以输入 quit
。
您可能会发现机器不允许您退出,因为您的信息尚未保存。如果您仍然想退出,请在退出后直接输入 !(即 :quit!
)。
我通过在 Windows 上安装 Git 客户端获得了 Vim。 :q
不会为我退出 Vim。 :exit
但是...
vim -version
7.3)。
Git Bash
,在 Vim
中有时 ESC
不起作用。请改用 CTRL
+ [
。
^[
与 ESC
相同。有趣的是,Windows 使它变得更加复杂。而且很有趣。
带有数字的 q
命令关闭该位置的给定拆分。
:q<split position>
或 :<split position>q
将关闭该位置的拆分。
假设您的 Vim 窗口布局如下:
-------------------------------------------------
| | | |
-------------------------------------------------
| | | |
| | | |
| Split 1 | Split 2 | Split 3 |
| | | |
-------------------------------------------------
如果您运行 q1
命令,它将关闭第一个拆分。 q2
将关闭第二个拆分,反之亦然。
退出命令中拆分位置的顺序无关紧要。 :2q
或 :q2
将关闭第二个拆分。
如果您传递给命令的拆分位置大于当前拆分的数量,它将简单地关闭最后一个拆分。
例如,如果您在上面只有三个拆分的窗口设置上运行 q100
,它将关闭最后一个拆分(拆分 3)。
问题已被提出 here。
一种有保证的方法是杀死运行 vim 的端口
! kill - 9 $(ps | grep vim | cut -d " " -f 1)
killall -9 vim && killall -9 vi
||
而不是 &&
,否则第二个命令将不起作用
从四种模式中的任何一种:插入、可视、命令或命令行(ex)模式,如果更改,请按此保存,然后退出 vim:
Alt-Z
Z
也就是说,按:alt + shift + z
然后按 shift + z
为什么会这样:从插入模式和显然其他模式,您可以退出到命令模式并通过按住 Alt 和任何命令字符的组合来执行命令。第二个 Alt+Shift+Z 被忽略,因此您必须放开 Alt 但保留 Shift。锻炼肌肉记忆! :-)
Q 优先与结肠优先
很多人都知道冒号-q 退出策略。但对于额外的策略和后代,这里是 q-colon-iq 方法:
在 Normal
模式下,您可以键入:
q:iq<enter>
如果您仔细观察并眯起眼睛,您几乎可以“快速”地读出该命令,因为这是退出的缓慢方式。
(注意:尽管我尝试幽默,但这确实有效!)
不定期副业成功案例分享
:x
==ZZ
但:x
!=:wq
。:x
仅当文件已更改时写入文件,:wq
始终写入文件(即使用inotify
时的问题)。:w ! sudo tee %