如何退出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!
).(注意:这种情况下,重要的是在这里.ZZ
而zz
并不意味着同样的事情.)
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:help
Return打开它的类型.
这个答案的灵感来自另一个,最初由@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
w
并x
接受文件名参数.如果您使用文件名启动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-cEnterEntervi
EnterCtrl-Ctrl-n:qa!
Enter
这应该会让你在大部分时间出门.
一些有趣的案例,你需要这样的东西:
编辑:由于上述情况,此答案已得到纠正.它曾经是:
EscEscEsc:qa!
Enter
但是,如果您已进入Ex模式,则不起作用.在这种情况下,您需要做:
vi
Enter:qa!
Enter
所以完整的命令是"我不想知道我做了什么,我不想保存任何东西,我现在只想出去!" 将会
vi
EnterEscEscEsc: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模式
-
: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).