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


3762

Я застряг і не можу втекти. Він говорить:

"type :quit<Enter> to quit VIM"

Але коли я набираю, він просто з’являється в тілі об'єкта.


131
Ви просто намагаєтесь вийти з VIM? Якщо це так, то натисніть кнопку «бігти» , а потім введіть «: д»
Поп

47
Не забудьте товсту кишку ! Вам слід набрати, :quitа потім натиснути [ENTER]клавішу.
Farahmand

88
Вивчити основи vim дуже просто, і він вбудований прямо у вашу систему. У терміналі типу "вімтор". Через 25 хвилин ви підете швидше, ніж ваш звичайний текстовий редактор!
Марк Робсон

4
Перевірте тут більше команд.
Тоні

78
Щоб git commitу майбутньому не надсилати вам vim: git config --global core.editor="nano"
Том Келлі,

Відповіді:


4897

Натисніть 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командою - де ви можете знайти відповіді на всі свої запитання та навчальний посібник для початківців.


15
Якщо ви не перезавантажили esc або не маєте дивного відображення у вашому .vimrc, тоді це обов'язково повинно. Якщо на linux введіть xev і переконайтеся, що escape - це ключовий тип, який ви отримуєте, коли потрапляєте на escape.
dirvine

17
Пам'ятайте, що ви можете використовувати ctrl + c, якщо ви не можете використовувати Esc (як я, тому що моя оболонка знаходиться в TotalTerminal). vim.wikia.com/wiki/Avoid_the_escape_key
dotnetCarpenter

25
:x== ZZале :x! = :wq. :xЗапис файлу iff-файл змінився, :wqзапис файлу завжди (важливо, тобто при використанні inotify).
Hauleth

36
Якщо чесно, мені важче використовувати систему довідки Vim, ніж користуватися самим vim, і я в основному покладаюся на швидкі картки посилання та документацію в Інтернеті.
bgvaughan

18
якщо у вас немає дозволів на файл, але у вас є права доступу до sudo:w ! sudo tee %
tvlooy

189

Фотографії вартістю тисячі команд та параметрів Unix:

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

Я малюю це своїм студентам кожного семестру, і вони, здається, сприймають vi згодом.

vi - машина з кінцевим станом із лише трьома станами.

Після запуску vi переходить у режим COMMAND, де ви можете сліпо вводити короткі команди з декількома символами . Ви знаєте, що робите; це не для любителів.

Коли ви хочете фактично редагувати текст, вам слід перейти в режим ВСТАВЛЕННЯ з допомогою однієї символьної команди:

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

Тепер, відповідаючи на питання: вихід.

Ви можете вийти з режиму EX:

  • q: якщо ви не внесли жодних модифікацій або зберегли їх заздалегідь
  • q !: ігнорує будь-які модифікації та завершує роботу
  • wq: зберегти та вийти
  • x: це дорівнює wq

wі xприйняти параметр імені файлу. Якщо ви почали vi з іменем файлу, вам більше не потрібно його вказувати тут.

Нарешті, найважливіше: як можна досягти режиму EX?

Режим EX призначений для довгих команд, які можна побачити введення тексту в нижньому рядку екрана. У режимі COMMAND ви натискаєте двокрапку, :і в нижньому рядку з’явиться двокрапка, де ви можете вводити вищезазначені команди.

У режимі INSERT потрібно натиснути ESC, тобто кнопку Escape, перейти в режим COMMAND, а потім: перейти в режим EX.

Якщо ви не впевнені, натисніть ESC, і це приведе вас до командного режиму.

Отже, надійним методом є ESC -: - x-Enter, який зберігає ваш файл і закриває.


5
Дякую, образ дуже корисний. Однак для мене wне змінюється з Ex в командний режим, але є Esc. Що я роблю неправильно?
Нік Волинкін

2
Якщо ви пишете w-Enter, це зберігає ваш файл і повертається в режим COMMAND. Я написав це, щоб мати повне уявлення про команди збереження та виходу з команди.
Гергелі

3
о, так ти маєш на увазі :w. Тоді це має ідеальний сенс. До речі, чи є команда перезавантажити з диска (тобто повернути зміни, але не закрити файл)? Якщо так, то це може бути поруч wіз діаграмою.
Нік Волинкін

2
@Gergely Я просто з'ясував плутанину! З документів, звичайний режим також називається командним режимом ! Отже, командний режим! = Режим командного рядка. Оце Так!
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, що записують та виходять. Дійсно, на них посилається у документації Vim .

Vim має велику вбудовану допомогу, введіть її, Esc:helpReturnщоб відкрити її.

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


81

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

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


19
Я також використовую це для відмови від вчинення git, або visudo, або crontab,…
Josh Lee

Відмова від git-компіляції :q!спрацьовує чудово, оскільки перевірка git не є порожнім повідомленням, а не ненульовим кодом виходу.
moopet

Я знаю, що це працює, це просто так: cq не вимагає клавіші shift. :-)
Сью Спенс

47

Це найгірший сценарій виходу з Vim, якщо ви просто хочете вийти, не маєте уявлення про те, що ви зробили, і вам не байдуже, що буде з файлами, які ви відкрили.

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

Це має вивести вас більшу частину часу.

Деякі цікаві випадки, коли вам потрібно щось подібне:

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

  • QappendEnter

  • iCtrl-ogQCtrl-r=Ctrl-k (спасибі кашам для цього випадку)

  • :set insertmode(це випадок, коли Ctrl-\Ctrl-nви повертаєте вас у звичайний режим)


Редагувати: Ця відповідь була виправлена ​​через вищевказані випадки. Раніше це було:

EscEscEsc:qa!Enter

Однак це не працює, якщо ви перейшли в режим Ex. У цьому випадку вам потрібно буде зробити:

viEnter:qa!Enter

Тож повна команда для "Я не хочу знати, що я зробив, і не хочу нічого економити, я просто хочу зараз!" було б

viEnterEscEscEsc:qa!Введіть


6
@cavalcade Це надзвичайно загальний метод забезпечення редактора в нормальному режимі, а потім безпечного виходу. При звичайному використанні все , що вам потрібно , :qабо:wq
Dan Passaro

6
Не досить загально! А як бути, якщо я (новачок) набрав i<Ctrl-O>gQ<Ctrl-R>=<Ctrl-K>?
porges

@porges дякую за тестовий випадок! Існують також деякі інші тестові випадки, які доводять, що оригінальний метод був жахливим. Я змінив відповідь, щоб бути більш загальною зараз.
Хейкі Наскі

@HeikkiNaski принаймні для мене мені також потрібен Enter після Ctrl-C (щоб уникнути регістра виразів)
porges

40

Якщо вам потрібно вийти з Vim у легкому режимі (під час використання -yопції), ви можете перейти до звичайного режиму Vim, натиснувши Ctrl+, Lі тоді будь-який із звичайних параметрів виходу буде працювати.


7
Ще один варіант: ви можете Ctrl+Oтимчасово вийти з режиму INSERT, а потім увійти :q. Трюк з цією комбінацією корисний у звичайному vim, а також для виконання однієї команди та повернення в режим INSERT.
Андрій Стародубцев

28

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

Режим введення - все, що ви вводите, всі натискання клавіш лунають на екрані.

Режим команд або Утеча - все, що ви вводите в цьому режимі, трактується як команда.

Ex режим - це ще один редактор, колишній. Це редактор рядків. Він працює на лінію або базується на діапазоні ліній. У цьому режимі :внизу екрана відображається повідомлення. Це колишній редактор.

Для виходу з Vim ви можете вийти, коли ви перебуваєте або в колишньому режимі, або в командному режимі. Ви не можете вийти з Vim, коли перебуваєте в режимі введення.

Вихід із колишнього режиму

  1. Ви повинні бути впевнені, що перебуваєте в режимі Command. Для цього просто натисніть Escклавішу.

  2. Перейдіть до колишнього режиму, натиснувши :клавішу

  3. Для виходу використовуйте будь-яку з наступних комбінацій у колишньому режимі:

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

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

  1. Натисніть клавішу втечі. Ви, мабуть, зробили це вже, якщо ви перебуваєте в командному режимі.

  2. Столиця преси ZZ ( shift zz) - збереження та вихід

  3. Заголовок преси ZQ ( shift zq) - вихід без збереження.


3
Те, що ви називаєте "колишній режим", насправді називається режимом командного рядка . Це дозволяє вводити колишні команди, але з деякими важливими відмінностями .
jpaugh

1
Хм ні. Ви забуваєте зоровий режим.
Прифтан

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 Це виглядає дивним чином знайомим. Iirc це тому, що двоє роблять те саме. Як і в ^[те саме, що ESC. Це цікаво, що Windows робить це складніше. І забавно.
Прифтан

10

Питання задано тут .

The qКоманда з номером закриває даний розкол в цій позиції.

:q<split position> або :<split position>q закриє розкол у такому положенні.

Скажімо, ваш макет вікна Vim такий:

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

Якщо ви запускаєте q1 команду, вона закриє перший розкол.q2закриє другий розкол і навпаки.

Порядок розділення позиції в команді quit не має значення. :2qабо:q2 закриє другий розкол.

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

Наприклад, якщо запустити q100вищевказану установку вікна, де є лише три розбиття, він закриє останній розділ (Split 3).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.