草庐IT

如何退出 Vim?

HuntsBot 2023-09-26 原文

问题描述:

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

type :quit to quit VIM

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

解决方案1:

huntsbot.com全球7大洲远程工作机会,探索不一样的工作方式

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 命令访问 - 您可以在其中找到所有问题的答案和初学者教程。

除非您已重新映射 esc 或在您的 .vimrc 中有一个奇怪的映射,否则它绝对应该。如果在 linux 上输入 xev 并确保 escape 是您在点击 escape 时获得的键类型。

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

:x == ZZ 但 :x != :wq。 :x 仅当文件已更改时写入文件,:wq 始终写入文件(即使用 inotify 时的问题)。

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

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

解决方案2:

huntsbot.com聚合了超过10+全球外包任务平台的外包需求,寻找外包任务与机会变的简单与高效。

图片值一千个 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-Enter 来保存您的文件并返回命令模式。我写它是为了全面了解保存和退出命令。

哦,你的意思是:w。那么它就很有意义了。顺便说一句,是否有从磁盘重新加载的命令(即恢复更改但不关闭文件)?如果是这样,它可能在图中的 w 旁边。

您标记的命令模式实际上是正常模式。您标记的 ex 模式实际上是命令模式。 Ex 模式是完全不同的野兽!

@Gergely 好吧,我终于找到了 vim 文档::help vim-modes。

解决方案3:

保持自己快人一步,享受全网独家提供的一站式外包任务、远程工作、创意产品订阅服务–huntsbot.com

在输入命令之前,请按 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:helpReturn 来打开它。

这个答案的灵感来自于 other one,最初由 @dirvine 创作并由其他 SO 用户编辑。我已经包含了来自 Vim 参考、SO 评论和其他一些来源的更多信息。 Vi 和 Vim 的差异也反映出来。

解决方案4:

huntsbot.com洞察每一个产品背后的需求与收益,从而捕获灵感

如果你想退出而不保存在 Vim 并且让 Vim 返回一个非零的退出代码,你可以使用 :cq。

我一直都在使用它,因为我懒得为 ! 换小指。我经常将不需要保存在文件中的东西通过管道传输到 Vim。我们还有一个奇怪的 SVN 包装器在工作,它必须以非零值退出才能中止签入。

我还使用它来中止 git commit、visudo 或 crontab,......

使用 :q! 中止 git 提交可以正常工作,因为 git 正在检查非空消息而不是非零退出代码。

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

解决方案5:

一个优秀的自由职业者,应该有对需求敏感和精准需求捕获的能力,而huntsbot.com提供了这个机会

这是终极的、严肃的、硬核的退出命令,适用于最坏情况下的退出 Vim,如果你想退出,不知道你做了什么,也不关心你打开的文件会发生什么。

Ctrl-cEnterCtrl-\Ctrl-n回车:qa!回车

这会让你大部分时间都出去。最多。

您可能会天真地认为您可以按 Esc 几次然后执行 :qa!。哦,你怎么会弄错的。

看看这些点击 Esc 是不够的有趣案例:

iCtrl-ovg(您进入插入模式,然后是可视模式,然后是操作员挂起模式)

QappendEnter

iCtrl-ogQCtrl-r=Ctrl-k (感谢 porges 对于这种情况)

iCtrl-ogQCtrl-r=inputdialog(‘foo’,‘bar’)回车

:set insertmode (这是 Ctrl-\Ctrl-n 返回正常模式的情况)

@cavalcade 这是确保编辑器处于正常模式然后安全退出的一种非常通用的方法。在正常使用中,您只需要 :q 或 :wq

不够一般!如果我(初学者)输入 igQ= 会怎样?

@porges 感谢您的测试用例!还有一些其他的测试用例证明原来的方法很糟糕。我现在将答案编辑得更笼统。

@HeikkiNaski 至少对我来说我也需要在 Ctrl-C 之后 Enter (以转义表达式寄存器)

解决方案6:

与HuntsBot一起,探索全球自由职业机会–huntsbot.com

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

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

解决方案7:

huntsbot.com全球7大洲远程工作机会,探索不一样的工作方式

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) - 退出而不保存。

您所说的“前模式”实际上称为 command-line mode。它允许您输入 ex 命令,但带有一些 important differences。

嗯,没有。你忘记了视觉模式。

Save(?)+Exit from insert mode: Alt Z Z 即按:alt-shift-z 然后 shift-z命令字符。

我认为您所说的“前模式”是正常或“命令”模式。要进入前模式,您必须按 Q。在该模式下,您可以输入一个又一个命令,而无需每次都按 :。要退出前模式,您可以输入 :vi 或 :visual

解决方案8:

huntsbot.com汇聚了国内外优秀的初创产品创意,可按收入、分类等筛选,希望这些产品与实践经验能给您带来灵感。

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

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

解决方案9:

huntsbot.com洞察每一个产品背后的需求与收益,从而捕获灵感

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

同样,对于在 Macintosh 上执行 git 的 vim,这很有效。

@Joel 刚刚在我的 Mac 上检查了这一点,这两个命令都是合法的(vim -version 7.3)。

对于 Windows 上的 Git Bash,在 Vim 中有时 ESC 不起作用。请改用 CTRL + [。

@Val 这看起来很熟悉。 Iirc 那是因为两者做同样的事情。如 ^[ 与 ESC 相同。有趣的是,Windows 使它变得更加复杂。而且很有趣。

解决方案10:

打造属于自己的副业,开启自由职业之旅,从huntsbot.com开始!

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

:q 或 :q 将关闭该位置的拆分。

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

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

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

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

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

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

问题已被提出 here。

解决方案11:

huntsbot.com提供全网独家一站式外包任务、远程工作、创意产品分享与订阅服务!

一种有保证的方法是杀死运行 vim 的端口

! kill - 9 $(ps | grep vim | cut -d " " -f 1)

更好的方法是killall -9 vim && killall -9 vi

在 Windows 上的 powershell 中不起作用

您也可以按计算机上的重置按钮。它将最终退出 vim。一个小的副作用是它还会退出您正在运行的所有其他程序......包括 SO

@SarveshM.D 最好在此处使用 || 而不是 &&,否则第二个命令将不起作用

原文链接:https://www.huntsbot.com/qa/A82r/how-do-i-exit-vim?lang=zh_CN

huntsbot.com – 高效赚钱,自由工作

有关如何退出 Vim?的更多相关文章

  1. ruby - 如何使用 Nokogiri 的 xpath 和 at_xpath 方法 - 2

    我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div

  2. ruby - 如何从 ruby​​ 中的字符串运行任意对象方法? - 2

    总的来说,我对ruby​​还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用

  3. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  4. ruby-on-rails - 如何验证 update_all 是否实际在 Rails 中更新 - 2

    给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru

  5. ruby-on-rails - 'compass watch' 是如何工作的/它是如何与 rails 一起使用的 - 2

    我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t

  6. ruby - 如何将脚本文件的末尾读取为数据文件(Perl 或任何其他语言) - 2

    我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚

  7. ruby - 如何指定 Rack 处理程序 - 2

    Rackup通过Rack的默认处理程序成功运行任何Rack应用程序。例如:classRackAppdefcall(environment)['200',{'Content-Type'=>'text/html'},["Helloworld"]]endendrunRackApp.new但是当最后一行更改为使用Rack的内置CGI处理程序时,rackup给出“NoMethodErrorat/undefinedmethod`call'fornil:NilClass”:Rack::Handler::CGI.runRackApp.newRack的其他内置处理程序也提出了同样的反对意见。例如Rack

  8. ruby - 使用 Vim Rails,您可以创建一个新的迁移文件并一次性打开它吗? - 2

    使用带有Rails插件的vim,您可以创建一个迁移文件,然后一次性打开该文件吗?textmate也可以这样吗? 最佳答案 你可以使用rails.vim然后做类似的事情::Rgeneratemigratonadd_foo_to_bar插件将打开迁移生成的文件,这正是您想要的。我不能代表textmate。 关于ruby-使用VimRails,您可以创建一个新的迁移文件并一次性打开它吗?,我们在StackOverflow上找到一个类似的问题: https://sta

  9. ruby - 如何每月在 Heroku 运行一次 Scheduler 插件? - 2

    在选择我想要运行操作的频率时,唯一的选项是“每天”、“每小时”和“每10分钟”。谢谢!我想为我的Rails3.1应用程序运行调度程序。 最佳答案 这不是一个优雅的解决方案,但您可以安排它每天运行,并在实际开始工作之前检查日期是否为当月的第一天。 关于ruby-如何每月在Heroku运行一次Scheduler插件?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/8692687/

  10. ruby-on-rails - 如何从 format.xml 中删除 <hash></hash> - 2

    我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为

随机推荐