Выходите из Vim быстрее


124

Я использую Vim в основном для быстрого редактирования, а не для длительных рабочих сессий. В этом смысле, я считаю последовательность клавиатуры для отказа от курения , особенно трудоемок: Esc, Shift+ ;, w, q, Enter.

Как выйти из Vim (возможно, сохранив документ) с наименьшим количеством нажатий клавиш? Особенно из режима вставки.


50
Знаете, кнопка питания находится всего в одном клике.
Ренан

2
@jasonwryan прав - ZZ довольно быстр, если вы находитесь в командном режиме, но сравнение не совсем верно. Ваша последовательность клавиш предполагает, что вы находитесь в режиме вставки. Чтобы выйти из режима вставки, Ctrl- [быстрее чем Esc. Shift-: это одно нажатие клавиши - вы не можете печатать: быстрее. Таким образом, вы экономите немного, но не очень.
Доминик Кронин

2
Не следует использовать Escдля выхода из режима вставки, так как Escклавиша на современных клавиатурах далека от других. Используйте Ctrl+ ]или создать свое собственное отображение.
указатель на пустоту

3
Получить французскую клавиатуру - вы можете устранить сдвиг.
Богатое

1
void-указатель, не работает ли Ctrl + C вместо Ctrl + [вместо Esc?
zumalifeguard

Ответы:


154

Shiftzz в командном режиме сохраняет файл и выходит.


4
Для этого нужен Shift или просто Z Z(верхний регистр)? Кроме того, вам не нужно быть в командном режиме, чтобы он работал, что бы это сделать Esc Z Z?
CVN

35
Кроме того, ESC Z Qчтобы выйти без сохранения
Карлос Кампдеррос

Strg + zz просто неправильно. Он отправит процесс vim в фоновый
режим

2
@ MichaelKjörling: ZZ просто должен быть в верхнем регистре.
LarsH

2
Это закрывает только один файл. У меня есть много открытых вкладок, так что это заняло бы тонны Zs.
Филипп

41

ZZв обычном режиме сохраняет текущий файл, если он был изменен, и закрывает или закрывает текущее окно / вкладку (то же самое, что и :xнет, :wqкоторый записывает файл, даже если он не был изменен).

Чтобы выйти безоговорочно после записи всех измененных файлов во все окна, вкладки и скрытые буферы, вам нужен :xa(он все равно не выйдет, если некоторые файлы не могут быть записаны по той или иной причине)

Чтобы выйти без каких-либо изменений: ZQ(так же, как :q!).


1
Я думаю, что вы имеете в виду нормальный режим. «Командный режим» можно легко спутать с режимом командной строки
Дэвид Браун

@DavidBrown, command modeэто традиционное имя, но я согласен, что normal modeэто менее двусмысленно. Я исправил ответ.
Стефан Шазелас

33

:x на один ключ меньше :wq


11
Не так хорошо, как Shift + Z Zесли бы!
CodeMedic

@CodeMedic Это намного быстрее, если у вас есть, nno : ;и nno ; :, тем не менее. (плюс вно тоже самое). Я сомневался в обмене, но ты никогда не вернешься. :nno ,: :silent! unmap :<CR>:silent! unmap ;<CR>и :nno ,; :nno ; :<CR>:nno : ;<CR>:vno ; :<CR>:vno : ;<CR>поддерживать странное yap@"и такое.
до

20

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

nnoremap <leader><leader> :xa<cr>

Если <leader>для запятой используется let mapleader = ","двойное нажатие на запятую, это быстрый способ выйти из vim и сохранить изменения. Если вы хотите сохранить еще один ход клавиш в режиме вставки, также создайте соответствующее отображение режима вставки:

inoremap <leader><leader> <esc>:xa<cr>

Но будьте осторожны, это может произойти совершенно случайно, когда вы попали <leaderдважды.


1
Спасибо за подробный ответ, это побуждает меня больше узнать о vim (чего я стараюсь избегать)!
VEMV

4
@vemv, вы должны работать наоборот - всякий раз, когда вам нужно делать то же самое более одного раза, посмотрите, есть ли способ остановить это!
Уэйн Вернер

17

Используйте это, чтобы сделать магию. Только два нажатия клавиш!

Ctrl+ sсохранить,

ctrl+ dсохранить и выйти,

ctrl+ qдля выхода без изменений.

Первый. Поместите это в ваш ~ / .bashrc

bind -r '\C-s'
stty -ixon

Второй. Поместите это в ваш ~ / .vimrc

inoremap <C-s> <esc>:w<cr>                 " save files
nnoremap <C-s> :w<cr>
inoremap <C-d> <esc>:wq!<cr>               " save and exit
nnoremap <C-d> :wq!<cr>
inoremap <C-q> <esc>:qa!<cr>               " quit discarding changes
nnoremap <C-q> :qa!<cr>

Третий. Перезапустите vim и получите больше продуктивных дней!


2
Зачем использовать CTRL + D / CTRL + Q для сохранения + выхода, а не только ZZ и ZQ?
Эван Кэрролл

Привет Эван, Ctrl + D / CTRL + Q просто нужно два нажатия клавиш, в то время как ZZ и ZQ нужно три нажатия клавиш. shift + z + z / shift + q + q. Один ключ сохранения важен, если мы делаем это часто. Более того, мы повысили ctrl + s в качестве сохраняющего ярлыка, я думаю, что он более интуитивный, чем ZZ или ZQ.
Brain90

4
Я всегда считал ZQ опасным. Вы можете намереваться нажать ZQ, чтобы не сохранять, но если вы случайно нажали Z дважды, вы ушли и сохранили файл без смысла.
Кит Девенс

1
если вы на Mac, используйте ~ / .bash_profile. И не забудьте получить его.
Снегопад

16

Как насчет просто Q«Выйти»?

Это потребует только одного сдвинутого нажатия клавиши (то есть Shiftи Q). Это также комбинация клавиш, которую я случайно ударил случайно.

По умолчанию vim отображает Q на switch to "Ex" mode. Если вы найдете режим «Ex» таким же бесполезным (или раздражающим), как и я, то вы не пропустите его функцию по умолчанию.

Вот что у меня в .vimrcфайле:

" allow quit via single keypress (Q)
map Q :qa<CR>

Если у вас есть несохраненные буферы, он выдаст запрос перед выходом.


как-то в моем VIM Q уже был сопоставлен :qпо умолчанию. Спасибо за чаевые.
user13107

7

Вот шпаргалка для VIM

Чит-лист-для-VIM

To quit the vi editor without saving any changes you've made:

If you are currently in insert or append mode, press Esc. 

Press  :  (colon). The cursor should reappear at the lower left corner of the screen beside a colon prompt. 

Enter the following:
  q!
This will quit the editor, and all changes you have made to the document will be lost.

Еще немного ::

Закрытие и сохранение файлов

When you edit a file in vi, you are actually editing a copy of the file rather than the original. The following sections describe methods you might use when closing a file, quitting vi, or both.
Quitting and Saving a File

The command ZZ (notice that it is in uppercase) will allow you to quit vi and save the edits made to a file. You will then return to a Unix prompt. Note that you can also use the following commands:

:w  to save your file but not quit vi (this is good to do periodically in
    case of machine crash!).
:q  to quit if you haven't made any edits.
:wq to quit and save edits (basically the same as ZZ).
Quitting without Saving Edits

Sometimes, when you create a mess (when you first start using vi this is easy to do!) you may wish to erase all edits made to the file and either start over or quit. To do this, you can choose from the following two commands:

:e! reads the original file back in so that you can start over.
:q! wipes out all edits and allows you to exit from vi.

Последние 2 должны добавить «с момента последнего сохранения файла» ... это «очевидно», но новичок может понять «отлично, это так как я открыл vi» и обнаружить, что нет, если они сохранили во время сеанса »: д!» не восстановит исходный файл вообще и не будет ": e!". Он просто отбрасывает изменения, которые произошли с момента последнего открытия или сохранения файла (в зависимости от того, какой из них является последним).
Оливье Дюлак

3

Мое простое и удобное решение для выхода и сохранения из vim - это:

Ctrl+ Xярлык.

Просто добавьте этот код в .vimrcфайл:

"Fast quit and save from normal and insert mode
:map <C-X> <ESC>:x<CR>
:imap <C-X> <ESC>:x<CR>

1
<C-Q>Хорошо , но почему не отображается?
Friederbluemle

2

Пытаться

nno : ;
nno ; :
vno : ;
vno ; :

Если вы используете fFtT, к этому потребуется некоторое привыкание, но теперь выход - просто ;xсохранить, если нужно, а ;qне сохранить. Кроме того, все остальное тоже становится быстрее.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.