Jak wyjść z edytora Vima?

3762

Utknąłem i nie mogę uciec. To mówi:

"type :quit<Enter> to quit VIM"

Ale kiedy piszę, po prostu pojawia się w ciele obiektu.

jclancy
źródło
131
Po prostu próbujesz wyjść z VIM? W takim przypadku naciśnij „Escape”, a następnie wpisz „: q”
Pop
47
Nie zapomnij o dwukropku ! Powinieneś wpisać, :quita następnie nacisnąć [ENTER]klawisz.
Farahmand
88
Bardzo łatwo jest nauczyć się podstaw vima i jest on wbudowany w twój system. W terminalu wpisz „vimtutor”. 25 minut później będziesz szybciej niż zwykły edytor tekstu!
Mark Robson
4
Sprawdź tutaj więcej poleceń.
Toni,
78
Aby uniemożliwić git commitwysyłanie vimów w przyszłości: git config --global core.editor="nano"
Tom Kelly

Odpowiedzi:

4897

Naciśnij Escklawisz, aby przejść do „Trybu normalnego”. Następnie możesz wpisać, :aby przejść do „Trybu wiersza poleceń”. Na :dole ekranu pojawi się dwukropek ( ) i możesz wpisać jedno z następujących poleceń. Aby wykonać polecenie, naciśnij Enterklawisz.

  • :q wyjść (skrót od :quit)
  • :q!wyjść bez zapisywania (skrót od :quit!)
  • :wq pisać i wychodzić
  • :wq! pisać i wychodzić, nawet jeśli plik ma tylko uprawnienia do odczytu (jeśli plik nie ma uprawnień do zapisu: wymuś zapis)
  • :x pisać i wychodzić (podobnie jak :wq, ale pisz tylko, jeśli są zmiany)
  • :exitpisać i wychodzić (tak samo jak :x)
  • :qarzucić wszystko (skrót od :quitall)
  • :cq wyjść bez zapisywania i sprawić, że Vim zwróci błąd niezerowy (tzn. wyjdzie z błędem)

Możesz także wyjść z Vima bezpośrednio z „Trybu normalnego”, pisząc, ZZaby zapisać i wyjść (tak samo jak :x) lub ZQpo prostu wyjść (tak samo :q!). (Należy pamiętać, że wielkość liter ma znaczenie. ZZI zznie oznacza to samo).

Vim ma obszerną pomoc - do której można uzyskać dostęp za pomocą :helppolecenia - w której można znaleźć odpowiedzi na wszystkie pytania i samouczek dla początkujących.

dirvine
źródło
15
Chyba, że ​​zmieniłeś mapowanie esc lub masz dziwne mapowanie w .vimrc, to zdecydowanie powinno. Jeśli na Linuksie wpisz xev i upewnij się, że klawisz ucieczki jest kluczem, który otrzymujesz po naciśnięciu klawisza Escape.
dirvine
17
Pamiętaj, że możesz użyć ctrl + c, jeśli nie możesz użyć Esc (jak ja, ponieważ moja powłoka jest w TotalTerminal). vim.wikia.com/wiki/Avoid_the_escape_key
dotnetCarpenter
25
:x== ZZale :x! = :wq. :xnapisz plik iff plik się zmienił, :wqzawsze pisz plik (ważne, np. kiedy używasz inotify).
Hauleth
36
Szczerze mówiąc, trudniej jest mi używać systemu pomocy vima niż samego vima i polegam głównie na szybkich kartach referencyjnych i dokumentacji online.
bgvaughan
18
jeśli nie masz uprawnień do pliku, ale masz uprawnienia sudo:w ! sudo tee %
tvlooy
189

Obrazy są warte tysiąca uniksowych poleceń i opcji:

Wpisz opis zdjęcia tutaj

Rysuję to moim studentom w każdym semestrze, a oni wydają się rozumieć później.

vi jest skończoną maszyną stanów z tylko trzema stanami.

Po uruchomieniu vi przechodzi do trybu POLECENIA, w którym można na ślepo wpisywać krótkie, kilka znaków postaci . Wiesz co robisz; to nie jest dla amatorów.

Jeśli chcesz faktycznie edytować tekst, powinieneś przejść do trybu INSERT za pomocą jednoznakowego polecenia:

  • i: przejdź do INSERT w miejscu kursora
  • I: przejdź do trybu INSERT na początku wiersza
  • Odp .: dołącz za kursorem
  • Odp .: dołącz na końcu linii
  • o: otwórz nową linię poniżej bieżącej linii
  • O: otwórz nową linię zamiast aktualnej linii

Teraz odpowiadając na pytanie: wyjście.

Możesz wyjść z trybu EX z vi:

  • q: jeśli nie dokonałeś żadnych modyfikacji lub nie zapisałeś ich wcześniej
  • q !: ignoruje wszelkie modyfikacje i wychodzi
  • wq: zapisz i wyjdź
  • x: jest to równe wq

wi xzaakceptuj parametr nazwy pliku. Jeśli zacząłeś vi z nazwą pliku, nie musisz go tutaj ponownie podawać.

Wreszcie najważniejsze: jak przejść do trybu EX?

Tryb EX służy do długich poleceń, które można zobaczyć podczas pisania w dolnej linii ekranu. W trybie POLECENIA naciskasz dwukropek, :a w dolnym wierszu pojawi się dwukropek, w którym możesz wpisać powyższe polecenia.

Z trybu INSERT należy nacisnąć ESC, tzn. Przycisk Escape, przejść do trybu POLECENIA, a następnie: aby przejść do trybu EX.

Jeśli nie masz pewności, wciśnij ESC, co spowoduje przejście do trybu poleceń.

Tak więc solidną metodą jest ESC -: - x-Enter, która zapisuje plik i kończy pracę.

Gergely
źródło
5
Dziękuję, obraz jest bardzo pomocny. Jednak dla mnie wnie zmienia się z trybu Ex na tryb poleceń, ale się Esczmienia. Co ja robię źle?
Nick Volynkin
2
Jeśli napiszesz w-Enter, który zapisze plik i wróci do trybu POLECENIA. Napisałem to, aby mieć pełny obraz poleceń zapisywania i wychodzenia.
Gergely
3
och, więc masz na myśli :w. To ma sens. Nawiasem mówiąc, czy istnieje polecenie przeładowania z dysku (to znaczy, aby cofnąć zmiany, ale nie zamknąć pliku)? Jeśli tak, może znajdować się obok wna schemacie.
Nick Volynkin
2
@Gergely właśnie wymyśliłem zamieszanie! Z dokumentów, tryb normalny jest również nazywany trybem poleceń ! Tak więc tryb poleceń! = Tryb wiersza poleceń. Łał!
jpaugh
2
@NickVolynkin polecenie przeładowania z dysku jest :e(lub bardziej prawdopodobne, :e!ponieważ ostrzeże Cię przed niezapisanymi zmianami bez !)
JDS
177

Przed wprowadzeniem polecenia naciśnij Escklawisz . Po wprowadzeniu kliknij przycisk, Returnaby potwierdzić.

Esckończy bieżące polecenie i przełącza Vima w tryb normalny . Teraz, jeśli naciśniesz :, :ikona pojawi się na dole ekranu. Potwierdza to, że faktycznie wpisujesz polecenie, a nie edytujesz plik.

Większość poleceń ma skrótów, z opcjonalną część w nawiasach: c[ommand].

Polecenia oznaczone „*” są tylko dla Vima (nie są zaimplementowane w Vi).

Bezpieczne zamknięcie (kończy się niepowodzeniem, jeśli są niezapisane zmiany):

  • :q[uit] Wyjdź z bieżącego okna . Wyjdź z Vima, jeśli jest to ostatnie okno. Nie udaje się to po wprowadzeniu zmian w bieżącym buforze .
  • :qa[ll]* Zamknij wszystkie okna i Vima, chyba że zostały zmienione niektóre bufory.

Monituj-wyjdź (monituje, czy są niezapisane zmiany)

  • :conf[irm] q[uit]* Wyjdź, ale wyświetlaj monit, gdy zostaną zmienione niektóre bufory.
  • :conf[irm] xa[ll]* Napisz wszystkie zmienione bufory i wyjdź z Vima. Wyświetl monit, gdy nie można zapisać niektórych buforów.

Zapisz (zapisz) zmiany i wyjdź:

  • :wqNapisz bieżący plik (nawet jeśli nie został zmieniony) i wyjdź. Zapis kończy się niepowodzeniem, gdy plik jest tylko do odczytu lub bufor nie ma nazwy. :wqa[ll]* dla wszystkich okien.
  • :wq!To samo, ale zapisuje nawet pliki tylko do odczytu. :wqa[ll]!* dla wszystkich okien.
  • :x[it], ZZ(ze szczegółami ). Zapisz plik tylko wtedy, gdy został zmieniony i wyjdź, :xa[ll]* dla wszystkich okien.

Odrzuć zmiany i wyjdź:

  • :q[uit]! ZQ* Wyjdź bez pisania, także gdy widoczne bufory mają zmiany. Nie wychodzi, gdy zmienione są ukryte bufory.
  • :qa[ll]!*, :quita[ll][!]* Wyjdź z Vima, wszystkie zmiany w buforach (w tym ukrytych) zostaną utracone.

Naciśnij, Returnaby potwierdzić polecenie.

Ta odpowiedź nie odwołuje się do wszystkich poleceń i argumentów Vima do pisania i wychodzenia. Rzeczywiście są one przywoływane w dokumentacji Vima .

Vim ma obszerną wbudowaną pomoc, wpisz, Esc:helpReturnaby ją otworzyć.

Ta odpowiedź została zainspirowana drugą , pierwotnie autorstwa @dirvine i edytowaną przez innych użytkowników SO. Podałem więcej informacji z referencji Vima, komentarzy SO i innych źródeł. Odzwierciedlają również różnice dla Vi i Vima.

Nick Volynkin
źródło
81

Jeśli chcesz wyjść bez zapisywania w Vimie i pozwolić Vimowi zwrócić niezerowy kod wyjścia, możesz użyć :cq.

Korzystam z tego cały czas, ponieważ nie mogę się martwić, że zmieniam się !. Często przesyłam do Vima rzeczy, których nie trzeba zapisywać w pliku. Mamy również dziwne opakowanie SVN w pracy, które musi zostać zakończone wartością niezerową, aby przerwać sprawdzanie.

Sue Spence
źródło
19
Używam tego również do przerwania git commit, visudo lub crontab…
Josh Lee
Przerwanie zatwierdzenia git z działaniem :q!działa dobrze, ponieważ git sprawdza, czy nie jest pusty komunikat, a nie niezerowy kod wyjścia.
moopet
Wiem, że to działa, po prostu: cq nie wymaga klawisza Shift. :-)
Sue Spence
47

Jest to najgorszy scenariusz wyjścia z Vima, jeśli chcesz po prostu wyjść, nie masz pojęcia, co zrobiłeś, i nie obchodzi Cię, co stanie się z plikami, które otworzyłeś.

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

To powinno cię wyciągnąć przez większość czasu.

Kilka interesujących przypadków, w których potrzebujesz czegoś takiego:

  • iCtrl-ovg (wchodzisz w tryb wstawiania, następnie tryb wizualny, a następnie tryb oczekiwania operatora)

  • QappendEnter

  • iCtrl-ogQCtrl-r=Ctrl-k (dzięki porty dla tego przypadku)

  • :set insertmode(tak jest w przypadku Ctrl-\Ctrl-npowrotu do trybu normalnego)


Edycja: odpowiedź została poprawiona z powodu powyższych przypadków. To kiedyś było:

EscEscEsc:qa!Enter

Jednak to nie działa, jeśli wszedłeś w tryb Ex. W takim przypadku musisz zrobić:

viEnter:qa!Enter

Więc kompletne polecenie dla „Nie chcę wiedzieć, co zrobiłem i nie chcę niczego ratować, chcę tylko teraz!” byłoby

viEnterEscEscEsc:qa!Wchodzić

Heikki Naski
źródło
6
@cavalcade Jest to niezwykle ogólna metoda upewnienia się, że edytor znajduje się w trybie normalnym, a następnie bezpiecznie kończy pracę. W normalnym użyciu wszystko czego potrzebujesz to :qlub:wq
Dan Passaro
6
Nie dość ogólne! A jeśli ja (początkujący) zacznę pisać i<Ctrl-O>gQ<Ctrl-R>=<Ctrl-K>?
porcje
@porges dziękuje za przypadek testowy! Istnieje również kilka innych przypadków testowych, które dowodzą, że oryginalna metoda była żałosna. Zredagowałem odpowiedź, aby była bardziej ogólna.
Heikki Naski
@HeikkiNaski Przynajmniej dla mnie potrzebuję też Enter po Ctrl-C (aby uciec od rejestru wyrażeń)
odczytuje
40

W przypadku, gdy musisz wyjść z Vima w trybie łatwym (podczas korzystania z -yopcji), możesz przejść do normalnego trybu Vima, naciskając Ctrl+, La wtedy dowolna z normalnych opcji wychodzenia będzie działać.

wsams
źródło
7
Jeszcze inna opcja: możesz Ctrl+Otymczasowo opuścić tryb INSERT, a następnie wejść :q. Sztuczka z tą kombinacją jest przydatna również w normalnym vimie, aby wykonać pojedyncze polecenie i powrócić do trybu INSERT.
Andrey Starodubtsev,
28

Vim ma trzy tryby działania: tryb wprowadzania, tryb poleceń i tryb Ex.

Tryb wprowadzania - wszystko, co piszesz, wszystkie naciśnięcia klawiszy są odtwarzane na ekranie.

Tryb poleceń lub Tryb ucieczki - wszystko, co piszesz w tym trybie, jest interpretowane jako polecenie.

Tryb Ex - to kolejny edytor, np. Jest to edytor linii. Działa na linii lub w oparciu o zakres linii. W tym trybie :na dole ekranu pojawia się ikona. To jest były redaktor.

Aby wyjść z Vima, możesz wyjść, gdy jesteś w trybie ex lub w trybie poleceń. Nie możesz wyjść z Vima, gdy jesteś w trybie wprowadzania.

Wyjście z trybu ex

  1. Musisz być pewien, że jesteś w trybie poleceń. Aby to zrobić, po prostu naciśnij Escklawisz.

  2. Przejdź do trybu ex, naciskając :klawisz

  3. Użyj dowolnej z następujących kombinacji w trybie ex, aby wyjść:

    :q- quit :q!- quit bez zapisywania :wq- save & quit lub write & quit :wq!- to samo co wq, ale wymusza zapis w przypadku, gdy uprawnienia do plików są tylko do odczytu :x- write & quit :qa- quit all. przydatne, gdy otwartych jest wiele plików, takich jak:vim abc.txt xyz.txt

Wyjście z trybu poleceń

  1. Naciśnij klawisz Escape. Prawdopodobnie już to zrobiłeś, jeśli jesteś w trybie poleceń.

  2. Naciśnij kapitał ZZ ( shift zz) - zapisz i wyjdź

  3. Naciśnij kapitał ZQ ( shift zq) - wyjdź bez zapisywania.

tovishalck
źródło
3
To, co nazywacie „trybem ex”, jest tak naprawdę nazywane trybem wiersza poleceń . Umożliwia wprowadzanie komend ex, ale z pewnymi istotnymi różnicami .
jpaugh
1
Hmm nie Zapomniałeś trybu wizualnego.
Pryftan,
26

Po naciśnięciu ESC(lub cmd+ Cna moim komputerze) musisz nacisnąć, :aby wyświetlić wiersz polecenia. Następnie możesz wejść quit.

Może się okazać, że urządzenie nie pozwoli ci wyjść, ponieważ twoje informacje nie zostały zapisane. Jeśli mimo to chcesz wyjść, wpisz !bezpośrednio po wyjściu (tj :quit!.).

Usuń mnie
źródło
19

Dostałem Vima, instalując klienta Git w systemie Windows. :qnie wyjdzie dla mnie z Vima. :exitzrobił jednak ...

Bjørn van Dommelen
źródło
1
Podobnie działało to dla vima wykonującego git na komputerze Macintosh.
Joel
1
@Joel właśnie to sprawdził na moim Macu, oba polecenia są zgodne z prawdą ( vim -version7.3).
Nick Volynkin
2
W Git Bashsystemie Windows Vimczasami ESCnie działa. zamiast tego użyj CTRL+ [.
Val
@Val To wygląda dziwnie znajomo. To dlatego, że obaj robią to samo. Jak w ^[to to samo co ESC. To interesujące, że Windows komplikuje to. I zabawne.
Pryftan,
10

Pytanie zostało zadane tutaj .

qPolecenia z numerem zamyka daną rozłam w tej pozycji.

:q<split position>lub :<split position>qzamknie podział w tej pozycji.

Powiedzmy, że układ twojego okna Vima wygląda następująco:

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

Uruchomienie q1polecenia spowoduje zamknięcie pierwszego podziału. q2zamknie drugi split i na odwrót.

Kolejność podziału pozycji w poleceniu quit nie ma znaczenia. :2qlub :q2zamknie drugi podział.

Jeśli pozycja podziału przekazywana do polecenia jest większa niż liczba bieżących podziałów, po prostu zamknie ostatni podział.

Na przykład, jeśli uruchomisz q100powyższą konfigurację okna, w której są tylko trzy podziały, zamknie ostatni podział (Podział 3).

Subash
źródło