Как выйти из редактора Vim?

Я застрял и не могу сбежать. Он говорит:

"type :quit<Enter> to quit VIM"

Но когда я набираю текст, он просто появляется в теле объекта.


person jclancy    schedule 06.08.2012    source источник
comment
Вы просто пытаетесь выйти из VIM? В этом случае нажмите escape и введите ': q'.   -  person Pop    schedule 06.08.2012
comment
Не забывайте двоеточие! Вы должны ввести :quit и затем нажать клавишу [ENTER].   -  person Farahmand    schedule 04.03.2014
comment
Изучить основы vim действительно легко, и он встроен прямо в вашу систему. В терминале введите vimtutor. Через 25 минут вы будете работать быстрее, чем ваш обычный текстовый редактор!   -  person Mark Robson    schedule 26.01.2015
comment
Проверьте здесь другие команды.   -  person Toni    schedule 07.08.2015
comment
Чтобы предотвратить git commit отправку вас в vim в будущем: git config --global core.editor="nano"   -  person Tom Kelly    schedule 24.05.2017
comment
Еще не упомянуто; но если вы работаете в графическом интерфейсе, вы можете использовать gvim и закрыть окно. (Если есть несохраненные изменения, будет предложено Сохранить / Отменить / Отменить).   -  person M.M    schedule 24.05.2017
comment
@Toni Почему бы не использовать распечатанный одностраничный чит-лист? Обычная версия qwerty и dvorak.   -  person nilon    schedule 29.11.2018
comment
Из командной строки вы можете выйти из vim сразу после ввода: vim --cmd q. Его можно использовать вместе с -V опцией: vim -V20vim.log --cmd exe +q. Недавно созданный vim.log может быть полезен для целей диагностики / отладки.   -  person MAGA    schedule 21.02.2019
comment
@TomKelly Большое спасибо, это помогло мне, но на самом деле это git config --global core.editor "nano" с пробелом, а не знаком =   -  person Jérôme MEVEL    schedule 17.04.2019
comment
Вы можете искать в: help, как и в любом другом окне, набрав / ‹некоторый текст›, который ищет вхождения ‹некоторого текста›   -  person Ahmad    schedule 29.12.2020


Ответы (10)


Нажмите кнопку 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, где вы можете найти ответы на все свои вопросы и учебное пособие для начинающих.

person dirvine    schedule 06.08.2012
comment
Если вы не переназначили esc или не имели странного сопоставления в вашем .vimrc, тогда это определенно должно быть. Если в Linux введите xev и убедитесь, что escape - это тип ключа, который вы получаете, когда нажимаете escape. - person dirvine; 12.06.2014
comment
Помните, что вы можете использовать ctrl + c, если не можете использовать Esc (например, я, потому что моя оболочка находится в TotalTerminal). vim.wikia.com/wiki/Avoid_the_escape_key - person dotnetCarpenter; 27.01.2015
comment
:x == ZZ, но :x! = :wq. :x записывать файл, если файл был изменен, :wq записывать файл всегда (имеет значение, например, при использовании inotify). - person Hauleth; 05.02.2015
comment
Честно говоря, мне труднее использовать справочную систему vim, чем сам vim, и я в основном полагаюсь на карточки с быстрыми ссылками и онлайн-документацию. - person bgvaughan; 08.07.2015
comment
@bgvaughan Я вообще не нахожу помощь vim в поиске и изучении новых функций. Я использую это исключительно как ссылку. К счастью, здесь есть книги (практические vim) и сайты (изучите vimscript на собственном опыте), а также есть сайт обмена стеками, посвященный vim vi.stackexchange .com) - person ; 24.09.2015
comment
Первый оператор (нажмите клавишу Esc; переход в командный режим) основан на распространенном неправильном понимании Vi (m). Esc (при необходимости) является последней частью текущей команды, и когда вы закончите ее таким образом, вы можете ввести следующую команду. - person Olaf Seibert; 28.10.2015
comment
Esc переходит в командный режим, только если вы все еще находитесь в режиме ввода. Если вы находитесь в режиме Ex, этого не произойдет: E492: Not an editor command: ^[:q - person aij; 21.07.2016
comment
:x! делает то, что упоминалось, но также добавляет подтверждение. Я всегда использую это вместо :wq! - person Mark; 05.01.2017
comment
если у вас нет прав доступа к файлу, но есть разрешения sudo :w ! sudo tee % - person tvlooy; 23.05.2017
comment
В чем разница между Сохранить и выйти и Записать и выйти? - person Stevoisiak; 25.05.2017
comment
Если у вас есть разрешение только на чтение для файла, :wq! не будет его записывать. Если бы это произошло, это было бы брешь в безопасности ОС. - person sid-m; 25.05.2017
comment
@StevenVascellaro Нет никакой разницы; запись в файл и сохранение файла означают одно и то же. - person victor; 20.07.2017
comment
Что делать, если нет клавиши выхода ?? - person Elliot Cameron; 28.10.2017
comment
Используйте ctrl [, чтобы сделать то же самое. - person dirvine; 29.10.2017
comment
Иногда Esc недостаточно. Для уверенности может потребоваться ввести Esc несколько раз. (Например, после нажатия ^V или ^O в режиме вставки.) (Конечно, Хейкки подробно рассказал об этом.) - person jpaugh; 13.02.2018
comment
Вы можете искать в :help, как и в любом другом окне, набрав /<some text>, который ищет совпадения <some text> - person WorldSEnder; 18.06.2018
comment
@ sid-m Да и нет. Это зависит от того, говорите ли вы root. Но в целом ты прав. Правильнее будет сказать, что это работает, если vim находится в режиме только для чтения. Затем, если у вас есть разрешение на запись в сам файл, вы можете принудительно выполнить запись (это отключит режим только для чтения). - person Pryftan; 10.11.2019

Картинки стоят тысячи команд и опций Unix:

Введите описание изображения здесь

Я рисую это своим студентам каждый семестр, и они, кажется, понимают vi впоследствии.

vi - это конечный автомат всего с тремя состояниями.

После запуска vi переходит в режим КОМАНДЫ, в котором вы можете набирать короткие команды, состоящие из нескольких символов, вслепую. Вы знаете, что делаете; это не для любителей.

Если вы действительно хотите отредактировать текст, вы должны перейти в режим INSERT с помощью какой-нибудь односимвольной команды:

  • i: перейти к INSERT вместо курсора
  • I: перейти в режим INSERT в начале строки
  • a: добавить после курсора
  • A: добавить в конец строки
  • o: открыть новую строку ниже текущей строки
  • O: открыть новую строку вместо текущей строки

Теперь, отвечая на вопрос: выход.

Вы можете выйти из vi из режима EX:

  • q: если вы не вносили никаких изменений или сохранили их заранее
  • q !: игнорирует любые изменения и выйти
  • wq: сохранить и выйти
  • x: это равно wq

w и x принимают параметр имени файла. Если вы запустили vi с именем файла, вам не нужно указывать его здесь снова.

Наконец, самое главное: как попасть в режим EX?

Режим EX предназначен для длинных команд, которые вы можете увидеть при вводе в нижней строке экрана. В режиме КОМАНДА вы нажимаете двоеточие, :, и двоеточие появляется в нижней строке, где вы можете вводить указанные выше команды.

В режиме INSERT вам нужно нажать ESC, то есть кнопку Escape, перейти в режим COMMAND, а затем: чтобы перейти в режим EX.

Если вы не уверены, нажмите ESC, и вы перейдете в командный режим.

Итак, надежным методом является ESC -: - x-Enter, который сохраняет ваш файл и завершает работу.

person Gergely    schedule 26.05.2017
comment
Спасибо, изображение очень помогло. Однако для меня w не переходит из Ex в командный режим, а Esc меняется. Что я делаю неправильно? - person Nick Volynkin; 28.05.2017
comment
Если вы напишете w-Enter, файл сохранится и вернется в режим КОМАНДА. Я написал его, чтобы иметь полное представление о командах сохранения и выхода. - person Gergely; 28.05.2017
comment
о, так ты имеешь в виду :w. Тогда это имеет смысл. Кстати, есть ли команда перезагрузить с диска (то есть вернуть изменения, но не закрыть файл)? Если да, то он может быть рядом с w на диаграмме. - person Nick Volynkin; 28.05.2017
comment
То, что вы пометили command mode, на самом деле является нормальным режимом. То, что вы обозначили ex режимом, на самом деле является режимом command. Режим Ex - это совсем другое дело! - person jpaugh; 13.02.2018
comment
@jpaugh у вас есть ссылка на это? - person Gergely; 13.02.2018
comment
@Gergely Ну, наконец-то я нашел документацию по vim: :help vim-modes. - person jpaugh; 13.02.2018
comment
О режиме Ex: как в режиме командной строки, но после ввода команды вы остаетесь в режиме Ex. Единственный способ выйти из режима ex (который я знаю) - это использовать :vi, чтобы вернуться в нормальный режим. Обычный командный режим переводит вас в нормальный режим, как только вы вводите одну команду. - person jpaugh; 13.02.2018
comment
(FWIW, я узнал о режиме ex на собственном горьком опыте: я вошел в него случайно (несколько раз) и был в ловушке, пока не использовал ^C или не узнал об этом. Я никогда не забывал урок! ;-) - person jpaugh; 13.02.2018
comment
@Gergely Я только что понял путаницу! В документации нормальный режим также называется командным режимом! Итак, командный режим! = Режим командной строки. Ух ты! - person jpaugh; 13.02.2018
comment
@NickVolynkin команда для перезагрузки с диска - :e (или, что более вероятно, :e!, поскольку она предупредит вас о несохраненных изменениях без !) - person JDS; 26.03.2018
comment
Я не знаю об О.Г. vi (например, визуальный режим), но в vim это режимы normal, insert, Ex, command и visual. Нормальный - это режим по умолчанию, в котором нажатие :q приведет к выходу из vim. Режим Ex эмулирует ex и доступен через Q. Доступ к командному режиму осуществляется через : из обычного и визуального режима, а режим visual / visual-line / visual-block - это аккуратный режим, позволяющий выделять текст и выполнять специальные операции (попробуйте Ctrl-v и опускайтесь, пока не получите крайний правый столбец выбран для всего блока, затем нажмите A, чтобы перейти в режим вставки и ввести текст. Текст будет добавлен в каждую выбранную вами строку) - person Braden Best; 02.04.2018
comment
Нет ли более длинного названия для EX? Расширенный? - person Peter Mortensen; 21.08.2019
comment
@PeterMortensen ed - оригинальный текстовый редактор. Отсюда мы получили em, который добавил видеовход, а ex (сокращение от EXtended), по сути, менее требователен к процессору em. vi построен на ex, а vim построен на vi. ed = ›em =› ex = ›vi =› vim (= ›gvim?) - person mazunki; 16.05.2020
comment
В оригинальном vi также есть открытый режим, который является своего рода однострочным нормальным режимом с собственным вариантом режима вставки. Это полезно, если вы когда-нибудь переносите машину времени в 1980-е и должны работать на модеме со скоростью 1200 бод. Вы попадете туда, набрав: o - person gpvos; 01.07.2020
comment
говорит кое-что о кривой обучения vi, что вы должны знать о конечных автоматах, прежде чем пытаться его использовать - person Nikolai R Kristiansen; 26.04.2021
comment
Unix создается программистами для программистов - person Gergely; 26.04.2021

Прежде чем вводить команду, нажмите клавишу 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.

person Nick Volynkin    schedule 08.06.2015

Если вы хотите выйти без сохранения в Vim и, чтобы Vim возвращал ненулевой код выхода, вы можете использовать :cq.

Я использую это все время, потому что меня не беспокоит мизинец для !. Я часто передаю в Vim вещи, которые не нужно сохранять в файл. У нас также есть нечетная оболочка SVN, которая должна быть завершена с ненулевым значением, чтобы прервать проверку.

person Sue Spence    schedule 28.01.2014
comment
Я также использую это, чтобы прервать коммит git, или visudo, или crontab,… - person Josh Lee; 03.02.2017
comment
Прерывание фиксации git с :q! работает нормально, поскольку git проверяет непустое сообщение, а не ненулевой код выхода. - person moopet; 30.11.2019
comment
Я знаю, что это работает, просто cq не требует клавиши Shift. :-) - person Sue Spence; 08.01.2020

Это наихудший сценарий выхода из Vim, если вы просто хотите выйти, не знаете, что сделали, и вам все равно, что произойдет с открытыми вами файлами.

Ctrl-c Enter Enter vi Enter Ctrl- \ Ctrl- n :qa! Enter

Это должно вывести вас из строя в большинстве случаев.

Несколько интересных случаев, когда вам нужно что-то вроде этого:

  • i Ctrl-o vg (вы входите в режим вставки, затем в визуальный режим, а затем в режим ожидания оператора)

  • Qappend Enter

  • i Ctrl-o gQ Ctrl-r = Ctrl-k (спасибо porges за этот случай)

  • :set insertmode (это случай, когда Ctrl- \ Ctrl-n возвращает вас в нормальный режим)


Изменить: этот ответ был исправлен из-за приведенных выше случаев. Это было:

Esc Esc Esc :qa! Enter

Однако это не сработает, если вы вошли в режим Ex. В этом случае вам нужно будет сделать:

vi Enter :qa! Enter

Итак, полная команда для «Я не хочу знать, что я сделал, и я не хочу ничего сохранять, я просто хочу уйти сейчас!» было бы

vi Enter Esc Esc Esc :qa!Enter

person Heikki Naski    schedule 24.06.2015
comment
@cavalcade Это чрезвычайно общий метод проверки того, что редактор находится в нормальном режиме, а затем безопасно закрывается. При нормальном использовании все, что вам нужно, это :q или :wq - person Dan Passaro; 23.05.2017
comment
Недостаточно общего! Что если я (новичок) наберу i<Ctrl-O>gQ<Ctrl-R>=<Ctrl-K>? - person porges; 24.05.2017
comment
@porges спасибо за тестовый пример! Есть также несколько других тестовых примеров, которые доказывают, что исходный метод был неудачным. Я отредактировал ответ, чтобы он был более общим. - person Heikki Naski; 24.05.2017
comment
@HeikkiNaski, по крайней мере, для меня мне также нужно Enter после Ctrl-C (чтобы избежать регистра выражения) - person porges; 24.05.2017

Если вам нужно выйти из Vim в простом режиме (при использовании опции -y), вы можете войти в обычный режим Vim, нажав Ctrl + L, а затем любой из обычных вариантов выхода будет работать.

person wsams    schedule 18.07.2014
comment
Еще один вариант: вы можете использовать Ctrl+O, чтобы временно выйти из режима INSERT, а затем ввести :q. Уловка с этой комбинацией полезна также в обычном vim для выполнения одной команды и возврата в режим INSERT. - person Andrey Starodubtsev; 17.09.2015

Vim имеет три режима работы: режим ввода, командный режим и режим Ex.

Режим ввода - все, что вы вводите, все нажатия клавиш отражаются на экране.

Командный режим или режим выхода - все, что вы вводите в этом режиме, интерпретируется как команда.

Ex режим - это другой редактор, напр. Это линейный редактор. Он работает на строку или на основе диапазона строк. В этом режиме внизу экрана появляется :. Это бывший редактор.

Чтобы выйти из Vim, вы можете выйти, находясь либо в режиме ex, либо в командном режиме. Вы не можете выйти из Vim, когда находитесь в режиме ввода.

Выход из режима Ex

  1. Вы должны быть уверены, что находитесь в командном режиме. Для этого просто нажмите клавишу Esc.

  2. Перейдите в режим ex, нажав кнопку :

  3. Для выхода используйте любую из следующих комбинаций в режиме ex:

    :q - выйти :q! - выйти без сохранения :wq - сохранить и выйти или написать и выйти :wq! - то же, что и wq, но принудительная запись в случае, если права доступа к файлам доступны только для чтения :x - запись и выход :qa - выйти из всего. полезно, когда открыто несколько файлов, например: vim abc.txt xyz.txt

Выход из командного режима

  1. Нажмите клавишу выхода. Вы, вероятно, уже сделали это, если находитесь в командном режиме.

  2. Нажмите заглавную ZZ (shift zz) - сохранить и выйти

  3. Нажать заглавную ZQ (shift zq) - выйти без сохранения.

person tovishalck    schedule 24.05.2017
comment
То, что вы вызываете в режиме ex, на самом деле называется командной строкой режим. Он позволяет вводить ex-команды, но с некоторыми важными отличиями. - person jpaugh; 13.02.2018
comment
Хм, нет. Вы забываете о визуальном режиме. - person Pryftan; 10.11.2019

После нажатия ESC (или cmd + C на моем компьютере) вы должны нажать :, чтобы появилась командная строка . Затем вы можете ввести quit.

Вы можете обнаружить, что машина не позволит вам выйти, потому что ваша информация не была сохранена. Если вы все равно хотите выйти, введите ! сразу после выхода (т. Е. :quit!).

person deleteMe    schedule 28.11.2014

Я получил Vim, установив клиент Git в Windows. :q не мог выйти из Vim из-за меня. :exit однако ...

person Bjørn van Dommelen    schedule 05.02.2015
comment
Аналогично для vim, выполняющего git на Macintosh, это сработало. - person Joel; 29.04.2015
comment
@Joel только что проверил это на моем Mac, обе команды верны (vim -version 7.3). - person Nick Volynkin; 08.06.2015
comment
Для Git Bash в windows, в Vim иногда ESC не работает. используйте вместо этого CTRL + [. - person Val; 08.09.2017
comment
@Val Это выглядит странно знакомым. Iirc это потому, что двое делают одно и то же. Как в ^[ совпадает с ESC. Интересно, что в Windows все усложняется. И забавно. - person Pryftan; 10.11.2019

Команда q с номером закрывает данную группу split в этой позиции.

:q<split position> или :<split position>q закроют разделение в этой позиции.

Допустим, у вас следующая компоновка окна Vim:

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

Если вы запустите команду q1, она закроет первое разделение. q2 закроет второй сплит и наоборот.

Порядок разделения позиций в команде выхода не имеет значения. :2q или :q2 закроют второй сплит.

Если позиция разделения, которую вы передаете команде, больше, чем количество текущих разделений, она просто закроет последнее разделение.

Например, если вы запустите q100 в настройке окна выше, где есть только три разделения, он закроет последнее разделение (Разделение 3).

Вопрос задан здесь.

person Subash    schedule 12.02.2018