Wyjdź z vima szybciej

124

Używam Vima głównie do szybkiej edycji, a nie do długich sesji roboczych. W tym sensie uważam, że kolejność klawiaturowy dla rzucenia szczególnie pracochłonne: Esc, Shift+ ;, w, q, Enter.

Jak wyjść z Vima (prawdopodobnie zapisując dokument) przy najmniejszej liczbie naciśnięć klawiszy? Zwłaszcza z trybu wstawiania.

vemv
źródło
50
Wiesz, że przycisk zasilania jest tylko jednym kliknięciem.
Renan
2
@jasonwryan ma rację - ZZ jest dość szybki, jeśli jesteś w trybie poleceń, ale porównanie nie jest całkiem poprawne. Sekwencja klawiszy zakłada, że ​​jesteś w trybie wstawiania. Aby wyjść z trybu wstawiania, Ctrl- [jest szybszy niż Esc. Shift-: to jedno naciśnięcie klawisza - nie można pisać: szybciej samodzielnie. Więc oszczędzasz trochę, ale niewiele.
Dominic Cronin
2
Nie powinieneś używać, Escaby wyjść z trybu wstawiania, ponieważ Escklucz jest daleki od innych na nowoczesnych klawiaturach. Użyj Ctrl+ ]lub utwórz własne mapowanie.
void-pointer
3
Zdobądź francuską klawiaturę - możesz wyeliminować zmianę.
Bogaty
1
void-pointer, czy Ctrl + C nie działa zamiast Ctrl + [jako zamiennik Esc?
zumalifeguard

Odpowiedzi:

154

Shiftzz w trybie komend zapisuje plik i wychodzi.

jasonwryan
źródło
4
Czy to absolutnie potrzebuje Shift, czy jest to po prostu Z Z(wielkie litery)? Ponadto, czy nie musisz znajdować się w trybie poleceń, aby działał, co by go sprawiło Esc Z Z?
CVn
35
Ponadto, ESC Z Qaby wyjść bez zapisywania
Carlos Campderrós
Strg + ZZ jest po prostu źle.
Wyśle
2
@ MichaelKjörling: ZZ musi być tylko dużymi literami.
LarsH
2
To jednak zamyka tylko jeden plik. Mam wiele otwartych kart, więc zajęłoby to mnóstwo Zs.
Filip
41

ZZw trybie normalnym zapisuje bieżący plik, jeśli został zmodyfikowany, i wychodzi lub zamyka bieżące okno / kartę (to samo co, :xale :wqzapisuje plik, nawet jeśli nie został zmodyfikowany).

Aby wyjść bezwarunkowo po zapisaniu wszystkich zmodyfikowanych plików we wszystkich oknach, zakładkach i ukrytych buforach, potrzebujesz :xa(nadal nie wyjdzie, jeśli niektórych plików nie można zapisać z jakiegoś powodu)

Aby wyjść bezwarunkowo bez zmiany czegokolwiek: ZQ(tak samo jak :q!).

Stéphane Chazelas
źródło
1
Myślę, że masz na myśli tryb normalny. „tryb poleceń” można łatwo pomylić z trybem wiersza poleceń
David Brown
@DavidBrown, command modeto tradycyjna nazwa, ale zgadzam się, że normal modejest mniej dwuznaczna. Poprawiłem odpowiedź.
Stéphane Chazelas
33

:x jest o jeden klucz mniej niż :wq

Tomasz Myrta
źródło
11
Nie tak dobrze, Shift + Z Zjakby!
CodeMedic 01.10.13
@CodeMedic Jest to zdecydowanie najszybsze, jeśli masz nno : ;i nno ; :chociaż. (plus vno to samo). Byłem niepewny co do zamiany, ale nigdy nie wrócisz. :nno ,: :silent! unmap :<CR>:silent! unmap ;<CR>i :nno ,; :nno ; :<CR>:nno : ;<CR>:vno ; :<CR>:vno : ;<CR>wspierać dziwne yap@"i takie.
jthill,
20

Utwórz niestandardowe mapowanie dla często używanych zadań. Jeśli często wychodzisz z Vima, utwórz mapowanie kilkoma naciśnięciami klawiszy, np

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

Jeśli <leader>ustawiono przecinek przy użyciu let mapleader = ","dwukrotnego naciśnięcia przecinka, to szybki sposób na zamknięcie vima i zapisanie zmian. Jeśli chcesz zapisać jeszcze jedno naciśnięcie klawisza w trybie wstawiania, utwórz również odpowiednie mapowanie trybu wstawiania:

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

Ale uwaga, to może przypadkowo całkiem vim, gdy uderzysz <leaderdwukrotnie.

Marco
źródło
1
Dzięki za dokładną odpowiedź, zachęca mnie to, aby dowiedzieć się więcej o vimie (którego zwykle unikam)!
vemv
4
@vemv, powinieneś pracować na odwrót - za każdym razem, gdy musisz zrobić to samo więcej niż raz, sprawdź, czy jest jakiś sposób, aby temu zapobiec!
Wayne Werner
17

Użyj tego, aby wykonać magię. Tylko dwa naciśnięcia klawiszy!

Ctrl+ saby zapisać,

ctrl+, daby zapisać i wyjść,

ctrl+, qaby wyjść z odrzucania zmian.

1. miejsce Umieść to w swoim ~ / .bashrc

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

2. miejsce Umieść to w swoim ~ / .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>

3. miejsce Uruchom ponownie vima i uzyskaj więcej produktywnych dni!

Mózg 90
źródło
2
Po co używać CTRL + D / CTRL + Q, aby zapisać + wyjść, a nie tylko ZZ i ZQ?
Evan Carroll
Cześć Evan, ctrl + d / ctrl + q potrzebują tylko dwóch kombinacji klawiszy, podczas gdy ZZ i ZQ potrzebują trzech kombinacji klawiszy. shift + z + z / shift + q + q. Jeden klucz oszczędzania jest znaczący, jeśli robimy to często. Co więcej, podnieśliśmy za pomocą skrótu Ctrl + s jako skrótu oszczędzania, myślę, że jest bardziej intuicyjny niż ZZ lub ZQ.
Brain90
3
Zawsze uważałem ZQ za niebezpieczny. Możesz zamiar nacisnąć ZQ, aby nie zapisywać, ale jeśli przypadkowo dwukrotnie naciśniesz Z, odszedłeś i zapisałeś plik bez znaczenia.
Keith Devens
1
jeśli używasz komputera Mac, użyj ~ / .bash_profile. I pamiętaj, aby go zdobyć.
Snowcrash
16

Co powiesz Qna „Quit”?

Będzie to wymagało tylko jednego przesuniętego naciśnięcia klawisza (tj. ShiftI Q). To także kluczowa kombinacja, którą rzadko trafiam przypadkiem.

Domyślnie vim mapuje Q na switch to "Ex" mode. Jeśli uważasz, że tryb „Ex” jest tak samo bezużyteczny (lub denerwujący), jak ja, to w ogóle nie przegapisz jego domyślnej funkcji.

Oto, co mam w swoim .vimrcpliku:

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

Jeśli masz niezapisane bufory, wyświetli monit przed wyjściem.

Lambart
źródło
jakoś w moim VIM Q był już :qdomyślnie zmapowany . Dzięki za wskazówkę.
user13107,
7

Oto ściągawka dla VIM

Ściągawka dla 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.

Trochę więcej ::

Zamykanie i zapisywanie plików

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.
vkulkarni
źródło
Ostatnie 2 powinny dodać „od czasu ostatniego zapisania pliku” ... to „oczywiste”, ale początkujący może zrozumieć „świetnie, odkąd otworzyłem vi” i odkryć, że nie, jeśli zapisali podczas sesji, „: q! ” w ogóle nie odzyska oryginalnego pliku, podobnie jak „: e!”. Po prostu odrzuci modyfikacje, które wystąpiły od czasu ostatniego otwarcia lub zapisania pliku (w zależności od tego, co nastąpi najpóźniej).
Olivier Dulac
3

Moje proste i wygodne rozwiązanie do wychodzenia i oszczędzania przed vimem to:

Ctrl+ Xskrót.

Dodaj ten kod do .vimrcpliku:

"Fast quit and save from normal and insert mode
:map <C-X> <ESC>:x<CR>
:imap <C-X> <ESC>:x<CR>
skywinder
źródło
1
Fajnie, ale dlaczego <C-Q>nie można zmapować?
friederbluemle
2

Próbować

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

Jeśli użyjesz fFtT, zajmie to trochę czasu, ale przyzwyczajenie się ;xdo zapisywania jest konieczne, ;qaby nie zapisywać. Ponadto wszystko inne staje się również szybsze.

jthill
źródło