如何退出Vim编辑器?


3760

我被困住了,无法逃脱。它说:

"type :quit<Enter> to quit VIM"

但是当我键入它时,它只是出现在对象主体中。


131
您只是想退出VIM吗?如果是这种情况,请按“转义”,然后键入“:q”
2012年

47
不要忘记冒号!您应该键入:quit,然后按下[ENTER]键。
Farahmand

88
学习vim的基础真的很容易,并且它直接内置在您的系统中。在终端中输入“ vimtutor”。25分钟后,您将比平时的文本编辑器快!
Mark Robson

4
在此处检查更多命令。
托尼2015年

77
为防止git commit日后将您发送到Vim: git config --global core.editor="nano"
Tom Kelly,

Answers:


4895

点击Esc键进入“普通模式”。然后,您可以键入:以进入“命令行模式”。冒号(:)将出现在屏幕底部,您可以键入以下命令之一。要执行命令,请Enter按键。

  • :q 退出(的缩写:quit
  • :q!不保存即退出(的缩写:quit!
  • :wq 写和退出
  • :wq! 即使文件只有读权限也可以写并退出(如果文件没有写权限:强制写)
  • :x 写入并退出(类似于:wq,但仅在有更改时写入)
  • :exit写入并退出(与相同:x
  • :qa全部退出(的缩写:quitall
  • :cq 退出而不保存并使Vim返回非零错误(即退出时出现错误)

您也可以通过输入ZZ保存并退出(与:x)或ZQ直接退出(与:q!)来直接从“普通模式”退出Vim 。(注意这种情况下是非常重要的在这里。ZZzz并不意味着同样的事情。)

Vim提供了广泛的帮助-您可以使用:help命令进行访问-在这里您可以找到所有问题的答案以及针对初学者的教程。


15
除非您已重新映射esc或.vimrc中具有怪异的映射,否则绝对应该如此。如果在linux上,键入xev并确保转义是您在按下转义时获得的键类型。
dirvine

17
请记住,如果您不能使用Esc,则可以使用ctrl + c(像我一样,因为我的shell在TotalTerminal中)。vim.wikia.com/wiki/Avoid_the_escape_key
dotnetCarpenter 2015年

25
:x== ZZ但是:x!= :wq:x如果文件已更改,则:wq写入文件,始终写入文件(注意,即使用时inotify)。
2015年

36
老实说,我使用vim的帮助系统比使用vim本身更困难,并且主要依靠快速参考卡和在线文档。
bgvaughan 2015年

18
如果您没有文件权限但拥有sudo权限:w ! sudo tee %
tvlooy

188

图片值得一千个Unix命令和选项:

在此处输入图片说明

我每学期将其吸引到我的学生那里,他们似乎后来掌握了vi。

vi是只有三个状态的有限状态机

启动后,vi进入COMMAND模式,您可以在其中盲目地键入简短的字符命令。你知道你在做什么;这不适合业余爱好者。

当您想实际编辑文本时,应使用一些单字符命令进入INSERT模式:

  • i:在光标位置转到INSERT
  • I:在行首进入INSERT模式
  • a:光标追加
  • 答:在行尾追加
  • o:在当前行下方打开新行
  • O:在当前行的位置打开新行

现在,回答问题:退出。

您可以从EX模式退出vi:

  • 问:如果您尚未进行任何修改,或者未事先保存它们
  • q !:忽略任何修改并退出
  • wq:保存并退出
  • x:这等于wq

wx接受文件名参数。如果以文件名开头vi,则无需在此处再次输入。

最后,最重要的是:如何进入EX模式?

EX模式适用于长命令,您可以在屏幕底行看到键入内容。在COMMAND模式下,按冒号,:冒号将出现在底行,您可以在其中键入上述命令。

在INSERT模式下,您需要按ESC键(即Escape键),进入COMMAND模式,然后按:进入EX模式。

如果不确定,请按ESC,这将使您进入命令模式。

因此,健壮的方法是ESC-:-x-Enter,它可以保存文件并退出。


5
谢谢,图片非常有帮助。但是,对我而言,w并没有从Ex更改为Command模式,而是更改了Esc。我究竟做错了什么?
尼克·沃伦金

2
如果编写w-Enter,将保存文件并返回COMMAND模式。我写它的目的是了解保存并退出命令的全貌。
Gergely

3
哦,所以你的意思是:w。那就很有意义了。顺便说一句,是否有命令从磁盘重新加载(即,还原更改但不关闭文件)?如果是这样,它可能w在图中的旁边。
尼克·沃伦金

2
@Gergely我只是弄清楚了困惑!从文档中,普通模式也称为命令模式!因此,命令模式!=命令行模式。哇!
jpaugh

2
@NickVolynkin从磁盘重新加载的命令是:e(或者更有可能是:e!因为它会警告您有关没有保存的未保存更改!
JDS

177

输入命令之前,Esc按键。输入后,点击Return进行确认。

Esc完成当前命令并将Vim切换到普通模式。现在,如果按::它将出现在屏幕底部。这确认您实际上是在键入命令,而不是在编辑文件。

大多数命令都有缩写,括号中包含可选部分: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]*对于所有窗口。

放弃更改并退出:

  • :q[uit]! ZQ*如果可见缓冲区发生变化,也无需编写即可退出。当更改了隐藏缓冲区时,不会退出。
  • :qa[ll]!*,:quita[ll][!]*退出Vim,对缓冲区的所有更改(包括隐藏)都将丢失。

按下Return以确认命令。

这个答案没有引用所有的Vim写入和退出命令和参数。实际上,在Vim文档中引用了它们。

Vim具有广泛的内置帮助,请键入Esc:helpReturn以打开它。

这个答案是由另一个答案启发的,该答案最初由@dirvine编写,并由其他SO用户编辑。我从Vim参考资料,SO注释和其他一些来源中获得了更多信息。Vi和Vim的差异也被反映出来。


81

如果您想退出而不保存在Vim中并使 Vim返回非零退出代码,则可以使用:cq

我一直用这个,因为我不会被困扰于平淡的转变!。我经常将不需要保存在文件中的内容通过管道传送到Vim。我们也有一个奇怪的SVN包装器,该包装器必须以非零值退出才能中止签入。


19
我也用它来中止git commit或visudo或crontab…
Josh Lee

中止git commit的:q!工作正常,因为git检查非空消息而不是非零退出代码。
moopet

我知道它有效,只是:cq不需要Shift键。:-)
Sue Spence

47

这是在最坏的情况下退出Vim的情况,如果您只是想退出,不知道自己做了什么,并且不在乎打开的文件会发生什么。

Ctrl-cEnterEnterviEnterCtrl-\Ctrl-n:qa!Enter

这应该使您大部分时间都无法使用。

在一些有趣的情况下,您需要这样的东西:

  • iCtrl-ovg (您进入插入模式,然后进入可视模式,然后进入操作员待命模式)

  • QappendEnter

  • iCtrl-ogQCtrl-r=Ctrl-k (感谢本案的烦恼)

  • :set insertmode(这种情况会在Ctrl-\Ctrl-n您返回正常模式时出现)


编辑:由于上述情况,此答案已得到纠正。它曾经是:

EscEscEsc:qa!Enter

但是,如果您进入了Ex模式,那将不起作用。在这种情况下,您需要执行以下操作:

viEnter:qa!Enter

因此,有一个完整的命令:“我不想知道自己做了什么,也不想保存任何东西,我现在就想出去!” 将会

viEnterEscEscEsc:qa!输入


6
@cavalcade这是确保编辑器处于正常模式然后安全退出的极为通用的方法。在正常使用所有你需要的是:q:wq
丹Passaro

6
不够一般!如果我(初学者)打字i<Ctrl-O>gQ<Ctrl-R>=<Ctrl-K>怎么办?
流行于

@porges感谢您的测试用例!还有其他一些测试用例证明了原始方法是可悲的。我现在将答案编辑得更加笼统。
Heikki Naski

@HeikkiNaski至少对我来说,我也需要在Ctrl-C之后输入Enter(以逃避表达式寄存器)
伪装成

40

如果您需要以简单模式(使用-y选项时)退出Vim,则可以通过按Ctrl+ 进入正常Vim模式L,然后任何正常的退出选项都将起作用。


7
另一个选择:您可以Ctrl+O暂时退出INSERT模式,然后输入:q。这种组合的技巧在正常vim中也很有用,它可以执行单个命令并返回到INSERT模式。
Andrey Starodubtsev

28

Vim具有三种操作模式:输入模式,命令模式和Ex模式。

输入模式 -您键入的所有内容,所有击键都会在屏幕上回显。

命令模式或转义模式 -在此模式下键入的所有内容均被解释为命令。

防爆模式 -这是另一个编辑器,例如。它是行编辑器。它每行或基于一系列行工作。在此模式下,a :出现在屏幕底部。这是前任编辑。

为了退出Vim,您可以在ex模式或命令模式下退出。在输入模式下,不能退出Vim。

从ex模式退出

  1. 您需要确保您处于命令模式。为此,只需Esc按键。

  2. :按键进入防爆模式

  3. 在ex模式下使用以下任意组合退出:

    :q-退出 :q!-退出但不保存 :wq-保存并退出或写入并退出 :wq!-与wq相同,但如果文件权限为只读,则强制写入 :x-写入并退出 :qa-退出所有。当打开多个文件时很有用:vim abc.txt xyz.txt

从命令模式退出

  1. 按退出键。如果您处于命令方式,则可能已经完成了。

  2. 按大写字母ZZ(shift zz)-保存并退出

  3. 按大写字母ZQ(shift zq)-不保存即退出。


3
您所说的“ ex模式”实际上称为命令行模式。它允许您输入ex命令,但有一些重要区别
jpaugh

1
嗯 您忘记了视觉模式。
Pryftan

26

点击ESC(或在我的计算机上为cmd+ C)后,您必须点击:以显示命令提示符。然后,您可以输入quit

您可能会发现由于您的信息尚未保存,机器不允许您退出。如果仍然要退出,请!在退出后直接输入(即:quit!)。


19

我通过在Windows上安装Git客户端来获得Vim。:q不会为我退出Vim。:exit但是...


1
类似地,对于vim在macintosh上执行git的方法也是如此。
乔尔

1
@Joel刚刚在我的mac上检查了一下,两个命令都是合法的(vim -version7.3)。
Nick Volynkin 2015年

2
对于Git BashWindows,Vim有时ESC无法正常工作。使用CTRL+ [代替。
Val

@Val看起来很陌生。Iirc是因为这两个做同一件事。与中^[的相同ESC。Windows使其变得更加复杂,这很有趣。和有趣。
Pryftan

10

这里已经问这个问题。

q带数字的命令将在该位置关闭给定的拆分。

:q<split position>:<split position>q将在该位置关闭拆分。

假设您的Vim窗口布局如下:

-------------------------------------------------
|               |               |               |
-------------------------------------------------
|               |               |               |
|               |               |               |
|    Split 1    |    Split 2    |     Split 3   |
|               |               |               |
-------------------------------------------------

如果运行q1命令,它将关闭第一个拆分。q2将关闭第二个拆分,反之亦然。

quit命令中拆分位置的顺序无关紧要。:2q:q2将关闭第二个拆分。

如果传递给命令的拆分位置大于当前拆分的数量,则它将仅关闭最后一个拆分。

例如,如果q100在只有三个拆分的上述窗口设置上运行,它将关闭最后一个拆分(拆分3)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.