Bagaimana cara saya keluar dari editor Vim?

3766

Saya terjebak dan tidak bisa melarikan diri. Ia mengatakan:

"type :quit<Enter> to quit VIM"

Tetapi ketika saya mengetik itu hanya muncul di objek benda.

jclancy
sumber
131
Apakah Anda hanya mencoba untuk berhenti VIM? Jika ini masalahnya, tekan "escape" lalu ketik ': q'
Pop
47
Jangan lupakan usus besar ! Anda harus mengetik :quitdan kemudian tekan [ENTER]tombol.
Farahmand
88
Sangat mudah untuk mempelajari dasar-dasar vim, dan itu dibangun langsung ke dalam sistem Anda. Di terminal ketik "vimtutor". 25 menit kemudian Anda akan lebih cepat daripada editor teks biasa!
Mark Robson
4
Periksa di sini lebih banyak perintah.
Toni
78
Untuk mencegah git commitpengiriman Anda ke vim di masa mendatang: git config --global core.editor="nano"
Tom Kelly

Jawaban:

4905

Tekan Esctombol untuk masuk ke "mode Normal". Kemudian Anda dapat mengetik :untuk masuk ke "mode baris perintah". Tanda titik dua ( :) akan muncul di bagian bawah layar dan Anda dapat mengetikkan salah satu dari perintah berikut. Untuk menjalankan perintah, tekan Entertombol.

  • :q untuk berhenti (kependekan dari :quit)
  • :q!untuk berhenti tanpa menabung (kependekan dari :quit!)
  • :wq untuk menulis dan berhenti
  • :wq! untuk menulis dan berhenti walaupun file hanya memiliki izin baca (jika file tidak memiliki izin menulis: paksa menulis)
  • :x untuk menulis dan berhenti (mirip dengan :wq, tetapi hanya menulis jika ada perubahan)
  • :exituntuk menulis dan keluar (sama seperti :x)
  • :qauntuk keluar semua (kependekan dari :quitall)
  • :cq untuk berhenti tanpa menyimpan dan membuat Vim mengembalikan kesalahan bukan nol (yaitu keluar dengan kesalahan)

Anda juga dapat keluar dari Vim langsung dari "mode Normal" dengan mengetik ZZuntuk menyimpan dan keluar (sama dengan :x) atau ZQhanya keluar (sama seperti :q!). (Perhatikan bahwa kasing penting di sini. ZZDan zzjangan berarti hal yang sama.)

Vim memiliki bantuan luas - yang dapat Anda akses dengan :helpperintah - di mana Anda dapat menemukan jawaban untuk semua pertanyaan Anda dan tutorial untuk pemula.

dirvine
sumber
15
Kecuali Anda telah memetakan ulang esc atau memiliki pemetaan aneh di .vimrc Anda, maka itu harus dilakukan. Jika di linux ketik xev dan pastikan escape adalah tipe kunci yang Anda dapatkan ketika Anda menekan escape.
dirvine
17
Ingat Anda dapat menggunakan ctrl + c jika Anda tidak dapat menggunakan Esc (seperti saya karena shell saya ada di TotalTerminal). vim.wikia.com/wiki/Avoid_the_escape_key
dotnetCarpenter
25
:x== ZZtapi :x! = :wq. :xtulis file iff file telah berubah, :wqselalu tulis file (hal yaitu saat menggunakan inotify).
Hauleth
36
Sejujurnya, saya mengalami kesulitan menggunakan sistem bantuan vim daripada menggunakan vim itu sendiri, dan sebagian besar mengandalkan kartu referensi cepat dan dokumentasi online.
bgvaughan
18
jika Anda tidak memiliki izin pada file tetapi memiliki izin sudo:w ! sudo tee %
tvlooy
190

Gambar bernilai seribu perintah dan opsi Unix:

Masukkan deskripsi gambar di sini

Saya menggambar ini untuk siswa saya setiap semester dan mereka tampaknya memahami vi setelahnya.

vi adalah mesin negara terbatas dengan hanya tiga negara.

Saat memulai, vi masuk ke mode PERINTAH, di mana Anda dapat mengetik perintah pendek, beberapa karakter, secara membabi buta . Anda tahu apa yang Anda lakukan; ini bukan untuk amatir.

Ketika Anda benar-benar ingin mengedit teks, Anda harus pergi ke mode INSERT dengan beberapa perintah satu karakter:

  • i: pergi ke INSERT di tempat kursor
  • I: masuk ke mode INSERT di awal baris
  • a: tambahkan setelah kursor
  • A: tambahkan di akhir baris
  • o: buka baris baru di bawah baris saat ini
  • O: buka baris baru di tempat baris saat ini

Sekarang, jawab pertanyaannya: keluar.

Anda dapat keluar dari mode EX:

  • q: jika Anda belum melakukan modifikasi, atau menyimpannya sebelumnya
  • q !: abaikan modifikasi apa pun dan berhentilah
  • wq: simpan dan keluar
  • x: ini sama dengan wq

wdan xmenerima parameter nama file. Jika Anda mulai vi dengan nama file, Anda tidak perlu memberikannya lagi di sini.

Akhirnya, yang paling penting: bagaimana Anda bisa mencapai mode EX?

Mode EX untuk perintah panjang yang bisa Anda lihat mengetik di bagian bawah layar. Dari mode PERINTAH, Anda menekan titik dua, :dan titik dua akan muncul di baris terbawah, di mana Anda dapat mengetik perintah di atas.

Dari mode INSERT, Anda perlu menekan ESC, yaitu tombol Escape, pergi ke mode PERINTAH, dan kemudian: untuk pergi ke mode EX.

Jika Anda tidak yakin, tekan ESC dan itu akan membawa Anda ke mode perintah.

Jadi, metode yang kuat adalah ESC -: - x-Enter yang menyimpan file Anda dan berhenti.

Gergely
sumber
5
Terima kasih, gambarnya sangat membantu. Namun, bagi saya wtidak berubah dari Ex ke mode Command, tetapi Esctidak. Apa yang saya lakukan salah?
Nick Volynkin
2
Jika Anda menulis w-Enter yang menyimpan file Anda dan kembali ke mode PERINTAH. Saya menulisnya untuk memiliki gambaran lengkap tentang perintah simpan & keluar.
Gergely
3
oh, jadi Anda maksud :w. Maka itu masuk akal. Omong-omong, apakah ada perintah untuk memuat ulang dari disk (yaitu, untuk mengembalikan perubahan tetapi tidak menutup file)? Jika demikian, bisa di sebelah wdalam diagram.
Nick Volynkin
2
@Sungguh saya baru tahu kebingungan! Dari dokumen, mode normal juga disebut mode perintah ! Jadi, mode perintah! = Mode baris perintah. Wow!
jpaugh
2
@NickVolynkin perintah untuk memuat ulang dari disk adalah :e(atau lebih mungkin :e!karena akan memperingatkan Anda tentang perubahan yang belum disimpan tanpa !)
JDS
177

Sebelum Anda memasukkan perintah, tekan Esctombol . Setelah Anda memasukkannya, tekan Returnuntuk konfirmasi.

Escmenyelesaikan perintah saat ini dan mengalihkan Vim ke mode normal . Sekarang jika Anda menekan :, :akan muncul di bagian bawah layar. Ini mengkonfirmasi bahwa Anda benar-benar mengetik perintah dan tidak mengedit file.

Sebagian besar perintah memiliki singkatan, dengan bagian opsional ditutupi dalam kurung: c[ommand].

Perintah yang ditandai dengan '*' hanya untuk Vim (tidak diterapkan di Vi).

Berhenti-aman (gagal jika ada perubahan yang belum disimpan):

  • :q[uit] Keluar dari jendela saat ini . Keluar dari Vim jika ini adalah jendela terakhir. Ini gagal ketika perubahan telah dibuat di buffer saat ini .
  • :qa[ll]* Tutup semua jendela dan Vim, kecuali ada beberapa buffer yang telah diubah.

Prompt-stops (meminta jika ada perubahan yang belum disimpan)

  • :conf[irm] q[uit]* Berhenti, tetapi beri prompt ketika ada beberapa buffer yang telah diubah.
  • :conf[irm] xa[ll]* Tulis semua buffer yang diubah dan keluar dari Vim. Memunculkan prompt ketika beberapa buffer tidak dapat ditulis.

Tulis (simpan) perubahan dan keluar:

  • :wqTulis file saat ini (bahkan jika itu tidak diubah) dan berhenti. Penulisan gagal saat file hanya-baca atau buffer tidak memiliki nama. :wqa[ll]* untuk semua jendela.
  • :wq!Hal yang sama, tetapi bahkan menulis file read-only. :wqa[ll]!* untuk semua jendela.
  • :x[it], ZZ(dengan perincian ). Tulis file hanya jika diubah dan keluar, :xa[ll]* untuk semua jendela.

Buang perubahan dan keluar:

  • :q[uit]! ZQ* Berhenti tanpa menulis, juga ketika buffer terlihat memiliki perubahan. Tidak keluar ketika ada buffer tersembunyi yang diubah.
  • :qa[ll]!*, :quita[ll][!]* Keluar Vim, semua perubahan ke buffer (termasuk tersembunyi) hilang.

Tekan Returnuntuk mengkonfirmasi perintah.

Jawaban ini tidak merujuk semua perintah dan argumen Vim. Memang, mereka dirujuk dalam dokumentasi Vim .

Vim memiliki bantuan bawaan yang luas, ketik Esc:helpReturnuntuk membukanya.

Jawaban ini terinspirasi oleh yang lain , awalnya ditulis oleh @dirvine dan diedit oleh pengguna SO lainnya. Saya telah memasukkan lebih banyak informasi dari referensi Vim, komentar SO dan beberapa sumber lainnya. Perbedaan untuk Vi dan Vim juga tercermin.

Nick Volynkin
sumber
81

Jika Anda ingin berhenti tanpa menyimpan di Vim dan meminta Vim mengembalikan kode keluar yang tidak nol, Anda dapat menggunakannya :cq.

Saya menggunakan ini sepanjang waktu karena saya tidak dapat diganggu untuk beralih pinky untuk !. Saya sering mem-pipe sesuatu ke Vim yang tidak perlu disimpan dalam file. Kami juga memiliki pembungkus SVN ganjil di tempat kerja yang harus dikeluarkan dengan nilai tidak nol untuk membatalkan checkin.

Sue Spence
sumber
19
Saya juga menggunakan ini untuk membatalkan komit git, atau visudo, atau crontab, ...
Josh Lee
Batalkan git komit dengan :q!berfungsi dengan baik, karena git memeriksa pesan yang tidak kosong dan bukan kode keluar non-nol.
moopet
Saya tahu itu berfungsi, hanya saja: cq tidak memerlukan tombol shift. :-)
Sue Spence
47

Ini untuk skenario terburuk keluar dari Vim jika Anda hanya ingin keluar, tidak tahu apa yang telah Anda lakukan dan Anda tidak peduli apa yang akan terjadi pada file yang Anda buka.

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

Ini akan membuat Anda keluar sebagian besar waktu.

Beberapa kasus menarik di mana Anda memerlukan sesuatu seperti ini:

  • iCtrl-ovg (Anda memasukkan mode penyisipan, lalu mode visual dan kemudian mode pending operator)

  • QappendEnter

  • iCtrl-ogQCtrl-r=Ctrl-k (terima kasih kepada porges untuk kasus ini)

  • :set insertmode(ini merupakan kasus ketika Ctrl-\Ctrl-nmengembalikan Anda ke mode normal)


Sunting: Jawaban ini diperbaiki karena kasus di atas. Dulu:

EscEscEsc:qa!Enter

Namun, itu tidak berfungsi jika Anda telah memasuki mode Ex. Dalam hal ini yang perlu Anda lakukan:

viEnter:qa!Enter

Jadi perintah lengkap untuk "Saya tidak ingin tahu apa yang telah saya lakukan dan saya tidak ingin menyelamatkan apa pun, saya hanya ingin keluar sekarang!" akan menjadi

viEnterEscEscEsc:qa!Memasukkan

Heikki Naski
sumber
6
@cavalcade Ini adalah metode yang sangat umum untuk memastikan editor dalam mode normal lalu berhenti dengan aman. Dalam penggunaan normal yang Anda butuhkan adalah :qatau:wq
Dan Passaro
6
Tidak cukup umum! Bagaimana kalau saya (pemula) mengetik i<Ctrl-O>gQ<Ctrl-R>=<Ctrl-K>?
porges
@porges terima kasih untuk test case! Ada juga beberapa kasus uji lain yang membuktikan bahwa metode asli itu menyedihkan. Saya mengedit jawaban untuk menjadi lebih umum sekarang.
Heikki Naski
@HeikkiNaski setidaknya untuk saya, saya perlu Enter setelah Ctrl-C juga (untuk menghindari register ekspresi)
porges
40

Jika Anda perlu keluar dari Vim dalam mode mudah (saat menggunakan -yopsi), Anda dapat masuk ke mode Vim normal dengan menekan Ctrl+ Ldan kemudian salah satu opsi keluar yang normal akan berfungsi.

wsams
sumber
7
Namun pilihan lain: Anda dapat menggunakan Ctrl+Ountuk meninggalkan mode INSERT sementara kemudian masuk :q. Trik dengan kombinasi ini berguna dalam vim normal juga untuk mengeksekusi perintah tunggal dan kembali ke mode INSERT.
Andrey Starodubtsev
28

Vim memiliki tiga mode operasi: Mode input, mode Perintah & Mode Ex.

Mode input - semua yang Anda ketikkan, semua penekanan tombol akan ditampilkan di layar.

Mode perintah atau mode Escape - semua yang Anda ketikkan dalam mode ini ditafsirkan sebagai perintah.

Mode Ex - ini adalah editor lain, mis. Itu adalah editor baris. Ini bekerja per baris atau berdasarkan berbagai garis. Dalam mode ini, a :muncul di bagian bawah layar. Ini adalah mantan editor.

Untuk keluar dari Vim, Anda dapat keluar saat berada dalam mode ex atau dalam mode perintah. Anda tidak dapat keluar dari Vim saat berada dalam mode input.

Keluar dari mode ex

  1. Anda harus yakin bahwa Anda berada dalam mode Perintah. Untuk melakukannya, cukup tekan Esctombol.

  2. Buka mode ex dengan menekan :tombol

  3. Gunakan salah satu dari kombinasi berikut dalam mode ex untuk keluar:

    :q- berhenti :q!- berhenti tanpa menyimpan :wq- simpan & keluar atau tulis & berhenti :wq!- sama seperti wq, tetapi paksa menulis jika izin file dibaca hanya :x- menulis & berhenti :qa- berhenti semua. berguna ketika beberapa file dibuka seperti:vim abc.txt xyz.txt

Keluar dari mode perintah

  1. Tekan tombol keluar. Anda mungkin sudah melakukan ini jika Anda berada dalam mode perintah.

  2. Tekan modal ZZ ( shift zz) - simpan & keluar

  3. Tekan modal ZQ ( shift zq) - keluar tanpa menyimpan.

tovishalck
sumber
3
Apa yang Anda panggil "mode ex" sebenarnya disebut mode baris perintah . Ini memungkinkan Anda untuk memasukkan perintah ex, tetapi dengan beberapa perbedaan penting .
jpaugh
1
Hmm tidak. Anda lupa mode visual.
Pryftan
26

Setelah menekan ESC(atau cmd+ Cdi komputer saya), Anda harus menekan :agar prompt perintah muncul. Lalu, Anda bisa masuk quit.

Anda mungkin menemukan bahwa mesin tidak akan memungkinkan Anda untuk berhenti karena informasi Anda belum disimpan. Jika Anda tetap ingin berhenti, masukkan !langsung setelah berhenti (yaitu :quit!).

Hapus Aku
sumber
19

Saya mendapatkan Vim dengan menginstal klien Git di Windows. :qtidak akan keluar dari Vim untukku. :exitNamun apakah ...

Bjørn van Dommelen
sumber
1
Demikian pula untuk vim melakukan git pada macintosh ini berfungsi.
Joel
1
@ Joel baru saja memeriksa ini di mac saya, kedua perintah itu sah ( vim -version7.3).
Nick Volynkin
2
Untuk Git Bashdi windows, Vimterkadang ESCtidak bekerja. gunakan CTRL+ [sebagai gantinya.
Val
@ Val Itu tampak aneh akrab. Iirc itu karena keduanya melakukan hal yang sama. Seperti dalam ^[sama dengan ESC. Sangat menarik bahwa Windows membuatnya lebih rumit. Dan lucu.
Pryftan
10

Pertanyaannya telah ditanyakan di sini .

The qperintah dengan nomor menutup perpecahan diberikan dalam posisi itu.

:q<split position>atau :<split position>qakan menutup pemisahan di posisi itu.

Katakanlah tata letak jendela Vim Anda adalah sebagai berikut:

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

Jika Anda menjalankan q1perintah, itu akan menutup pemisahan pertama. q2akan menutup split kedua dan sebaliknya.

Urutan posisi split dalam perintah berhenti tidak masalah. :2qatau :q2akan menutup pemisahan kedua.

Jika posisi split yang Anda berikan ke perintah lebih besar dari jumlah split saat ini, itu hanya akan menutup split terakhir.

Misalnya, jika Anda menjalankan q100pengaturan jendela di atas di mana hanya ada tiga pemisahan, itu akan menutup pemisahan terakhir (Split 3).

Subash
sumber