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

3772

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

"type :quit<Enter> to quit VIM"

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

jclancy
источник
131
Вы просто пытаетесь выйти из VIM? Если это так, нажмите «escape», а затем введите «: q»
Pop
47
Не забудьте о толстой кишке ! Вы должны напечатать :quitи затем нажать [ENTER]клавишу.
Farahmand
88
Изучить основы vim очень просто, и он встроен прямо в вашу систему. В терминале наберите "vimtutor". 25 минут спустя вы будете работать быстрее, чем ваш обычный текстовый редактор!
Марк Робсон
4
Проверьте здесь больше команд.
Тони
78
Чтобы не git commitотправлять вас в vim в будущем: git config --global core.editor="nano"
Том Келли

Ответы:

4910

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

dirvine
источник
15
Если вы не переназначили esc или не нашли странное отображение в вашем .vimrc, тогда это определенно должно быть. Если вы используете Linux, наберите xev и убедитесь, что escape - это ключ, который вы получаете, когда нажимаете escape.
Дирвин
17
Помните, что вы можете использовать Ctrl + C, если вы не можете использовать Esc (как и я, потому что моя оболочка находится в TotalTerminal). vim.wikia.com/wiki/Avoid_the_escape_key
dotnetCarpenter
25
:x== ZZно :x! = :wq. :xЗаписать файл, если файл изменился, :wqвсегда записывать файл (т.е. при использовании inotify).
Хаулет
36
Если честно, мне сложнее использовать справочную систему vim, чем сам vim, и я в основном полагаюсь на быстрые справочные карты и онлайн-документацию.
bgvaughan
18
если у вас нет прав доступа к файлу, но есть права доступа sudo:w ! sudo tee %
tvlooy
191

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

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

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

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

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

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

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

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

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

  • q: если вы не сделали никаких изменений или сохранили их заранее
  • q !: игнорирует любые модификации и выходит
  • WQ: сохранить и выйти
  • х: это равно WQ

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

Наконец, самое важное: как добраться до режима EX?

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

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

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

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

Gergely
источник
5
Спасибо, изображение очень полезно. Тем не менее, для меня wне меняется с Ex на командный режим, но Escделает. Что я делаю неправильно?
Ник Волынкин
2
Если вы напишите w-Enter, это сохранит ваш файл и вернется в режим КОМАНДЫ. Я написал это, чтобы получить полное представление о командах сохранения и выхода.
Гергели
3
О, так вы имеете в виду :w. Тогда это имеет смысл. Кстати, есть ли команда для перезагрузки с диска (то есть, чтобы отменить изменения, но не закрыть файл)? Если это так, это может быть рядом с wдиаграммой.
Ник Волынкин
2
@ Отлично, я только что понял путаницу! Из документов нормальный режим также называется командным режимом ! Итак, командный режим! = Режим командной строки. Вот Это Да!
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 write и quit. Действительно, они упоминаются в документации Vim .

Vim имеет обширную встроенную справку, введите ее, Esc:helpReturnчтобы открыть.

Этот ответ был вдохновлен другим , изначально созданным @dirvine и отредактированным другими пользователями SO. Я включил больше информации из справочника Vim, комментариев SO и некоторых других источников. Различия для Vi и Vim также отражены.

Ник волынкин
источник
81

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

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

Сью Спенс
источник
19
Я также использую это, чтобы прервать коммит мерзавца, или visudo, или crontab,
Джош Ли
Прерывание git commit с помощью :q!работает нормально, так как git проверяет непустое сообщение, а не ненулевой код завершения.
moopet
Я знаю, что это работает, просто: cq не требует клавиши Shift. :-)
Сью Спенс
47

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

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

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

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

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

  • QappendEnter

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

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


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

EscEscEsc:qa!Enter

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

viEnter:qa!Enter

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

viEnterEscEscEsc:qa!Войти

Хейкки Наски
источник
6
@cavalcade Это чрезвычайно общий метод обеспечения того, чтобы редактор находился в нормальном режиме, а затем безопасно выходил из него. При обычном использовании все, что вам нужно, это :qили:wq
Дэн Пассаро
6
Не достаточно общий! А что если я (новичок) напечатал i<Ctrl-O>gQ<Ctrl-R>=<Ctrl-K>?
Porges
@porges спасибо за контрольный пример! Есть также некоторые другие тестовые случаи, которые доказывают, что оригинальный метод был неудачным. Я отредактировал ответ, чтобы быть более общим сейчас.
Хейкки Наски
@HeikkiNaski по крайней мере для меня, мне нужно Enter после Ctrl-C (чтобы выйти из регистра выражений)
porges
40

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

wsams
источник
7
Еще один вариант: вы можете Ctrl+Oвременно выйти из режима INSERT и войти :q. Трюк с этой комбинацией полезен и в обычном vim, чтобы выполнить одну команду и вернуться обратно в режим INSERT.
Андрей Стародубцев
28

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

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

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

Ex mode - это другой редактор, 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) - выйти без сохранения.

tovishalck
источник
3
То, что вы называете «бывшим режимом», на самом деле называется режимом командной строки . Это позволяет вводить команды ex, но с некоторыми важными отличиями .
jpaugh
1
Хм нет Вы забываете визуальный режим.
Pryftan
26

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

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

удали меня
источник
19

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

Бьёрн ван Доммелен
источник
1
Аналогично для vim, выполняющего git на macintosh, это сработало.
Джоэл
1
@Joel только что проверил это на моем Mac, обе команды корректны ( vim -version7.3).
Николай Волынкин,
2
На Git Bashокнах, Vimиногда ESCне работает. используйте CTRL+ [вместо.
Val
@Val Это выглядит странно знакомым. Это потому, что двое делают одно и то же. Как в так ^[же, как 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).

Subash
источник