如何退出Vim编辑器?

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

"type :quit<Enter> to quit VIM"

但是当我输入它时它只是出现在物体中.

回答

击中Esc键进入"正常模式".然后您可以键入:以进入"命令行模式".冒号(:)将出现在屏幕底部,您可以键入以下命令之一.要执行命令,请Enter按键.

  • :q 退出(简称:quit)
  • :q!退出而不保存(简称:quit!)
  • :wq 写作和退出
  • :wq! 写入并退出,即使文件只具有读权限(如果文件没有写权限:强制写入)
  • :x 写和退出(类似于:wq,但只有在有变化时才写)
  • :exit写和退出(同:x)
  • :qa全部退出(简称:quitall)
  • :cq 退出而不保存并使Vim返回非零错误(即退出并显示错误)

您也可以直接从"命令模式"退出Vim,方法是键入ZZ保存并退出(相同:x)或ZQ退出(相同:q!).(注意:这种情况下,重要的是在这里.ZZzz并不意味着同样的事情.)

Vim提供了大量帮助 - 您可以使用:help命令访问- 您可以在其中找到所有问题的答案和初学者教程.

  • 说实话,我使用vim的帮助系统比使用vim本身更难,而且主要依靠快速参考卡和在线文档.
  • `:x` ==`ZZ`但是`:x`!=`:wq`.`:x`写文件iff文件已经改变,`:wq`总是写文件(很重要,即使用`inotify`时).
  • 如果您对该文件没有权限但具有sudo权限`:w!sudo tee%`
  • 记住你可以使用ctrl + c如果你不能使用Esc(像我一样,因为我的shell在TotalTerminal中).http://vim.wikia.com/wiki/Avoid_the_escape_key
  • 除非你重新映射esc或在.vimrc中有一个奇怪的映射,否则它肯定应该.如果在linux上输入xev并确保escape是你在逃脱时得到的键类型.
  • @bgvaughan我发现vim的帮助根本没有用来发现和了解新功能.我纯粹将它用作参考.幸运的是有书籍(实用的vim)和网站(学习vimscript的方法很有帮助),这里还有一个专门用于vim的堆栈交换网站http://vi.stackexchange.com/)
  • 第一个语句(“按Esc键;进入命令模式。”)基于对Vi(m)的常见误解。Esc(如果需要)是* current *命令的最后部分,当您完成此操作后,可以键入下一个命令。
  • 如果您对该文件只有只读权限,`:wq!` 不会写入它。如果发生这种情况,这将是操作系统中的安全漏洞。
  • 使用 `ctrl [` 来做同样的事情。

在输入命令之前,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的差异也反映出来.


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

我每个学期都会给我的学生画这个,然后他们似乎抓住了vi.

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

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

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

  • i:转到光标所在的INSERT
  • 我:在行的开头进入INSERT模式
  • a:光标追加
  • A:追加到行尾
  • o:在当前行下面打开一个新行
  • O:在当前行的位置打开一个新行

现在,回答这个问题:退出.

您可以从EX模式退出vi:

  • 问:如果您没有进行任何修改,或事先保存过
  • q!:忽略任何修改并退出
  • wq:保存并退出
  • x:这等于wq

wx接受文件名参数.如果您使用文件名启动vi,则无需再次在此处提供.

最后,最重要的是:你怎么能达到EX模式?

EX模式适用于长命令,您可以在屏幕底部看到输入.在命令模式下,您按冒号,:并在底行显示冒号,您可以在其中键入上述命令.

从INSERT模式,您需要按ESC,即Escape按钮,进入COMMAND模式,然后:进入EX模式.

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

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

  • 你标记的 *command* 模式实际上是 *normal* 模式。你标记的 *ex* 模式实际上是 *command* 模式。**Ex** 模式完全不同!
  • 谢谢,图片非常有帮助。但是,对我来说,`w`不会从Ex更改为Command模式,但是`Esc`可以。我究竟做错了什么?
  • 哦,你的意思是`:w`.然后它很有意义.顺便说一句,是否有从磁盘重新加载的命令(即,还原更改但不关闭文件)?如果是这样,它可能在图中的"w"旁边.
  • 如果你写 w-Enter 来保存你的文件并返回到命令模式。我写它是为了全面了解保存和退出命令。
  • @Gergely 好吧,我终于找到了 vim 文档:`:help vim-modes`。
  • @Gergely我只是弄清楚了这个混乱!从文档中,普通模式也称为*命令模式*!所以,命令模式!=命令行模式.哇!
  • @NickVolynkin从磁盘重新加载的命令是`:e`(或者更可能是`:e!`因为它会在没有`!`的情况下警告你未保存的更改)
  • @PeterMortensen `ed` is the original text editor. From there we got `em` which added video input, and `ex` (short for EXtended) is basically a less processor-demanding `em`. `vi` is built upon `ex`, and `vim` is built upon `vi`.
    `ed` => `em` => `ex` => `vi` => `vim` (=> `gvim`?)

如果要在不保存Vim的情况下退出让Vim返回非零退出代码,则可以使用:cq.

我一直都在使用这个,因为我不能为小调换班而烦恼!.我经常将东西送到Vim,不需要保存在文件中.我们还有一个奇怪的SVN包装器,它必须以非零值退出才能中止签入.

  • 我也使用它来中止git提交,或visudo,或crontab,...
  • I know it works, it's just that :cq doesn't require the shift key. 🙂
  • Aborting a git commit with `:q!` works fine, since git's checking for a non-empty message and not a non-zero exit code.

这是针对退出Vim的最坏情况,如果你只是想要,不知道你做了什么,你不关心你打开的文件会发生什么.

Ctrl-cEnterEnterviEnterCtrl-Ctrl-n:qa!Enter

这应该会让你在大部分时间出门.

一些有趣的案例,你需要这样的东西:


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

EscEscEsc:qa!Enter

但是,如果您已进入Ex模式,则不起作用.在这种情况下,您需要做:

viEnter:qa!Enter

所以完整的命令是"我不想知道我做了什么,我不想保存任何东西,我现在只想出去!" 将会

viEnterEscEscEsc:qa!输入

  • 不够通用!如果我(初学者)键入`i <Ctrl-O> gQ <Ctrl-R> = <Ctrl-K>`,怎么办?
  • @cavalcade这是一种非常通用的方法,可确保编辑器处于正常模式,然后安全地退出.在正常使用中,您只需要`:q`或`:wq`

如果您需要在简易模式下退出Vim (使用-y选项时),您可以通过按Ctrl+键进入正常的Vim模式L,然后任何正常的退出选项都可以.

  • 还有一个选择:你可以使用`Ctrl + O`暂时离开INSERT模式然后输入`:q`.使用此组合的技巧在普通vim中也很有用,可以执行单个命令并返回INSERT模式.

Vim有三种操作模式:输入模式,命令模式和防爆模式.

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

命令模式或转义模式 - 您在此模式下键入的所有内容都将被解释为命令.

Ex模式 - 这是另一个编辑器,例如.这是一个行编辑器.它适用于每行或基于一系列行.在此模式下,:屏幕底部会出现a .这是前编辑.

要退出Vim,您可以在ex模式或命令模式下退出.当您处于输入模式时,无法退出Vim.

退出ex模式

  1. :q- 退出
    :q!- 退出而不保存
    :wq- 保存和退出或写入和退出
    :wq!- 与wq相同,但强制写入以防文件权限是只读
    :x- 写入和退出
    :qa- 退出所有.打开多个文件时很有用,如:vim abc.txt xyz.txt

退出命令模式

  • 您所谓的"ex模式"实际上称为[*命令行模式*](http://vimdoc.sourceforge.net/htmldoc/intro.html#vim-modes-intro).它允许您输入ex命令,但有一些[重要的区别](http://vimdoc.sourceforge.net/htmldoc/intro.html#Ex-mode).

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

您可能会发现机器不允许您退出,因为您的信息尚未保存.如果您还想退出,请!在退出后直接输入(即:quit!).


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

  • 对于Windows上的`Git Bash`,在`Vim`有时`ESC`不工作.使用`CTRL` +`[`代替.

我想加上我的两分钱.这里已经提出了这个问题.

q带数字的命令将关闭该位置的给定分割.

:q<split position>:<split position>q将关闭该位置的分割.

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

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

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

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

如果传递给命令的分割位置大于当前分割的数量,则它将简单地关闭最后一个分割.

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


以上是如何退出Vim编辑器?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>