Câu hỏi Làm thế nào để thoát khỏi trình soạn thảo Vim?


Tôi bị mắc kẹt và không thể trốn thoát. Nó nói rằng:

"type :quit<Enter> to quit VIM"

Nhưng khi tôi gõ nó đơn giản xuất hiện trong thân đối tượng.


2719
2017-08-06 12:25


gốc


Bạn đang cố gắng bỏ VIM? Nếu trường hợp này xảy ra, hãy nhấn "thoát" và sau đó nhập ': q' - Pop
Đừng quên đại tràng! Bạn nên nhập :quit và sau đó nhấn [ENTER] Chìa khóa. - Farahmand
Nó thực sự dễ dàng để tìm hiểu những điều cơ bản của vim, và nó được xây dựng ngay vào hệ thống của bạn. Trong loại thiết bị đầu cuối "vimtutor". 25 phút sau, bạn sẽ nhanh hơn trình soạn thảo văn bản thông thường! - Mark Robson
Để ngăn chặn git commit gửi bạn đến vim trong tương lai: git config --global core.editor="nano" - Tom Kelly
liên kết tới bài viết trên blog SO cho hậu thế - Hong Ooi


Các câu trả lời:


Nhấn Esc để nhập "Chế độ thông thường". Sau đó, bạn có thể nhập : để vào "Chế độ dòng lệnh". Một dấu hai chấm (:) sẽ xuất hiện ở cuối màn hình và bạn có thể nhập một trong các lệnh sau. Để thực hiện một lệnh, nhấn Đi vào Chìa khóa.

  • :q  bỏ thuốc lá (viết tắt của :quit)
  • :q! để thoát mà không lưu (viết tắt của :quit!)
  • :wq viết và bỏ
  • :wq! để viết và thoát ngay cả khi tệp chỉ đọc quyền (nếu tệp không có quyền ghi: viết lực)
  • :x  để viết và bỏ (tương tự như :wq, nhưng chỉ viết nếu có thay đổi)
  • :exit để viết và thoát (giống như :x)
  • :qa bỏ tất cả (viết tắt :quitall)
  • :cq để thoát mà không lưu và làm cho Vim trả về lỗi khác 0 (tức là thoát với lỗi)

Bạn cũng có thể thoát Vim trực tiếp từ "Chế độ lệnh" bằng cách nhập ZZ để lưu và thoát (giống như :x) hoặc là ZQ để bỏ thuốc lá (giống như :q!). (Lưu ý rằng trường hợp là quan trọng ở đây. ZZ và zz không có ý nghĩa tương tự.)

Vim có nhiều trợ giúp - bạn có thể truy cập bằng :help lệnh - nơi bạn có thể tìm thấy câu trả lời cho tất cả câu hỏi của mình và hướng dẫn cho người mới bắt đầu.


3762
2017-08-06 12:46



Trừ khi bạn có esc escapped hoặc có một bản đồ lạ trong .vimrc của bạn sau đó nó chắc chắn nên. Nếu trên linux loại xev và chắc chắn rằng thoát là keytype bạn nhận được khi bạn nhấn thoát. - dirvine
Hãy nhớ rằng bạn có thể sử dụng ctrl + c nếu bạn không thể sử dụng Esc (như tôi vì shell của tôi là TotalTerminal). vim.wikia.com/wiki/Avoid_the_escape_key - dotnetCarpenter
:x == ZZ nhưng :x ! = :wq. :x ghi tập tin iff đã thay đổi, :wq luôn ghi tập tin (nghĩa là khi sử dụng inotify). - Hauleth
Thành thật mà nói, tôi có một thời gian khó khăn hơn bằng cách sử dụng hệ thống trợ giúp của vim hơn là sử dụng chính vim, và chủ yếu dựa vào các thẻ ref và tài liệu trực tuyến nhanh chóng. - bgvaughan
nếu bạn không có quyền trên tệp nhưng có quyền sudo :w ! sudo tee % - tvlooy


Trước khi bạn nhập lệnh, nhấn Esc Chìa khóa. Sau khi bạn nhập nó, nhấn Trở về xác nhận.

Esc kết thúc lệnh hiện tại và chuyển Vim sang chế độ bình thường. Bây giờ nếu bạn nhấn :, các : sẽ xuất hiện ở đáy của màn hình. Điều này xác nhận rằng bạn đang thực sự nhập lệnh và không chỉnh sửa tệp.

Hầu hết các lệnh có chữ viết tắt, với phần tùy chọn được đính kèm trong dấu ngoặc vuông: c[ommand].

Các lệnh được đánh dấu bằng '*' là chỉ Vim (không được triển khai trong Vi).

Thoát an toàn (không thành công nếu có thay đổi chưa được lưu):

  • :q[uit]  Thoát khỏi hiện tại cửa sổ. Bỏ Vim nếu đây là cửa sổ cuối cùng. Điều này không thành công khi các thay đổi đã được thực hiện trong hiện tại đệm.
  • :qa[ll]* Thoát tất cả các cửa sổ và Vim, trừ khi có một số bộ đệm đã được thay đổi.

Lời nhắc thoát (nhắc nhở nếu có thay đổi chưa được lưu)

  • :conf[irm] q[uit]* Thoát, nhưng đưa ra lời nhắc khi có một số bộ đệm đã bị thay đổi.
  • :conf[irm] xa[ll]* Viết tất cả các bộ đệm đã thay đổi và thoát Vim. Hiển thị lời nhắc khi không thể ghi một số bộ đệm.

Viết (lưu) thay đổi và thoát:

  • :wq Viết tệp hiện tại (ngay cả khi nó không bị thay đổi) và thoát. Viết không thành công khi tệp chỉ đọc hoặc bộ đệm không có tên. :wqa[ll]* cho tất cả các cửa sổ.
  • :wq! Tương tự, nhưng viết ngay cả các tệp chỉ đọc. :wqa[ll]!* cho tất cả các cửa sổ.
  • :x[it], ZZ(với chi tiết). Chỉ ghi tệp nếu nó đã được thay đổi và bỏ cuộc, :xa[ll]* cho tất cả các cửa sổ.

Hủy thay đổi và thoát:

  • :q[uit]!  ZQ* Thoát mà không cần viết, cũng khi bộ đệm nhìn thấy có thay đổi. Không thoát khi có thay đổi bộ đệm ẩn.
  • :qa[ll]!*, :quita[ll][!]* Bỏ Vim, mọi thay đổi đối với bộ đệm (bao gồm cả ẩn) sẽ bị mất.

nhấn Trở về để xác nhận lệnh.

Câu trả lời này không tham chiếu tất cả các lệnh và các đối số của Vim write và quit. Thật vậy, chúng được tham chiếu trong Tài liệu Vim.

Vim có trợ giúp tích hợp sẵn, loại Esc:helpTrở về mở nó ra.

Câu trả lời này được lấy cảm hứng từ người khác, ban đầu được tác giả bởi @dirvine và được biên tập bởi những người dùng SO khác. Tôi đã đưa thêm thông tin từ tham chiếu Vim, SO ý kiến ​​và một số nguồn khác. Sự khác biệt cho Vi và Vim cũng được phản ánh.


140
2018-06-08 13:34





Hình ảnh đáng giá hàng nghìn lệnh và tùy chọn Unix:

Enter image description here

Tôi vẽ nó cho học sinh của tôi mỗi học kỳ và họ dường như nắm bắt vi sau đó.

vi là một máy trạng thái hữu hạn chỉ có ba tiểu bang.

Khi bắt đầu, vi chuyển sang chế độ COMMAND, nơi bạn có thể nhập các lệnh ngắn, ít ký tự, mù quáng. Bạn biết những gì bạn đang làm; đây không phải dành cho những người nghiệp dư.

Khi bạn muốn thực sự chỉnh sửa văn bản, bạn nên vào chế độ INSERT với một số lệnh một ký tự:

  • i: đi đến INSERT ở vị trí của con trỏ
  • Tôi: chuyển sang chế độ INSERT ở đầu dòng
  • a: nối thêm sau con trỏ
  • A: nối thêm vào cuối dòng
  • o: mở một dòng mới bên dưới dòng hiện tại
  • O: mở một dòng mới ở vị trí của dòng hiện tại

Bây giờ, trả lời câu hỏi: thoát.

Bạn có thể thoát vi từ chế độ EX:

  • q: nếu bạn chưa thực hiện bất kỳ sửa đổi nào hoặc đã lưu chúng trước
  • q !: bỏ qua mọi sửa đổi và bỏ
  • wq: lưu và thoát
  • x: bằng wq

w và x chấp nhận tham số tên tệp. Nếu bạn bắt đầu vi với một tên tập tin, bạn không cần phải cho nó ở đây một lần nữa.

Cuối cùng, điều quan trọng nhất: làm thế nào bạn có thể đạt được chế độ EX?

Chế độ EX dành cho các lệnh dài mà bạn có thể thấy gõ ở dòng dưới cùng của màn hình. Từ chế độ COMMAND, bạn đẩy dấu hai chấm, :và dấu hai chấm sẽ xuất hiện ở dòng dưới cùng, nơi bạn có thể nhập các lệnh trên.

Từ chế độ INSERT, bạn cần nhấn ESC, tức là nút Escape, chuyển sang chế độ COMMAND, sau đó: để chuyển sang chế độ EX.

Nếu bạn không chắc chắn, hãy nhấn ESC và điều đó sẽ đưa bạn đến chế độ lệnh.

Vì vậy, phương pháp mạnh mẽ là ESC -: - x-Enter để lưu tệp của bạn và thoát.


71
2018-05-26 12:24



Cảm ơn bạn, hình ảnh rất hữu ích. Tuy nhiên, đối với tôi w không thay đổi từ chế độ Ex thành Command, nhưng Esc làm. Tôi đang làm gì sai? - Nick Volynkin
Nếu bạn viết w-Enter để lưu tệp của bạn và quay lại chế độ COMMAND. Tôi đã viết nó để có một bức tranh đầy đủ về các lệnh lưu và thoát. - Gergely
oh, ý bạn là :w. Sau đó, nó làm cho cảm giác hoàn hảo. Nhân đây, có một lệnh để tải lại từ đĩa (có nghĩa là, để hoàn nguyên thay đổi nhưng không đóng tập tin)? Nếu vậy, nó có thể là bên cạnh w trong biểu đồ. - Nick Volynkin
@Gergely tôi chỉ tìm ra sự nhầm lẫn! Từ tài liệu, chế độ thông thường cũng được gọi chế độ lệnh! Vì vậy, chế độ lệnh! = Chế độ dòng lệnh. Wow! - jpaugh
@NickVolynkin lệnh để tải lại từ đĩa là :e (hoặc nhiều khả năng :e! vì nó sẽ cảnh báo bạn về những thay đổi chưa lưu mà không có !) - JDS


Nếu bạn muốn thoát mà không lưu trong Vim  có Vim trả về mã thoát khác không, bạn có thể sử dụng :cq.

Tôi sử dụng tất cả các thời gian bởi vì tôi không thể bị làm phiền để thay đổi hồng hào cho !. Tôi thường ống những thứ để Vim mà không cần phải được lưu trong một tập tin. Chúng tôi cũng có một trình bao bọc SVN lẻ tại nơi làm việc phải được thoát với giá trị khác 0 để hủy đăng ký.


65
2018-01-28 10:59



Tôi cũng sử dụng điều này để hủy bỏ một cam kết git, hoặc visudo, hoặc crontab,… - Josh Lee


Đây là trường hợp xấu nhất khi thoát Vim nếu bạn chỉ muốn ra ngoài, không biết bạn đã làm gì và bạn không quan tâm điều gì sẽ xảy ra với các tệp bạn đã mở.

Ctrl-cĐi vàoĐi vàoviĐi vàoCtrl- \Ctrl-n:qa!Đi vào

Điều này sẽ giúp bạn có được hầu hết thời gian.

Một số trường hợp thú vị mà bạn cần một cái gì đó như thế này:

  • iCtrl-ovg (bạn nhập chế độ chèn, sau đó chế độ trực quan và sau đó chế độ chờ xử lý)

  • QappendĐi vào

  • iCtrl-ogQCtrl-r=Ctrl-k (nhờ porges cho trường hợp này)

  • :set insertmode (đây là một trường hợp khi Ctrl- \Ctrl-n đưa bạn trở lại chế độ bình thường)


Chỉnh sửa: Câu trả lời này đã được sửa chữa do các trường hợp trên. Nó từng là:

EscEscEsc:qa!Đi vào

Tuy nhiên, điều đó không hoạt động nếu bạn đã nhập chế độ Ex. Trong trường hợp đó bạn sẽ cần phải làm:

viĐi vào:qa!Đi vào

Vì vậy, một lệnh hoàn chỉnh cho "Tôi không muốn biết những gì tôi đã làm và tôi không muốn lưu bất cứ điều gì, tôi chỉ muốn ra ngay bây giờ!" sẽ là

viĐi vàoEscEscEsc:qa!Đi vào


38
2018-06-24 13:38



Ahh hiệu quả tuyệt vời. Ý tôi là, chỉ có 7 tổ hợp phím để thực hiện một hành động thường xuyên cần thiết - cavalcade
@cavalcade Đây là một phương pháp cực kỳ chung chung để đảm bảo trình chỉnh sửa ở chế độ bình thường sau đó thoát an toàn. Sử dụng bình thường tất cả những gì bạn cần là :q hoặc là :wq - Dan Passaro
Không đủ chung! Còn nếu tôi (người mới bắt đầu) đã nhập i<Ctrl-O>gQ<Ctrl-R>=<Ctrl-K>? - porges
Nó dễ dàng hơn để tìm hiểu cách chế độ vim hoạt động hơn để ghi nhớ chuỗi này. - jwg
@jwg Đợi đến khi bạn học cách viết chuỗi khóa này vào bộ đệm, a la ^Vvà yvòng nó thành một macro! ;-) - jpaugh


Trong trường hợp bạn cần thoát khỏi Vim chế độ dễ (Trong khi sử dụng -y tùy chọn), bạn có thể vào chế độ Vim bình thường bằng cách nhấn Ctrl + L và sau đó bất kỳ tùy chọn thoát nào bình thường sẽ hoạt động.


32
2017-07-18 13:48



Tuy nhiên, một tùy chọn khác: bạn có thể sử dụng Ctrl+O để thoát chế độ INSERT tạm thời, sau đó nhập :q. Thủ thuật với sự kết hợp này là hữu ích trong vim bình thường cũng như thực thi lệnh đơn và quay lại chế độ INSERT. - Andrey Starodubtsev


Sau khi đánh ESC (hoặc là cmd + C trên máy tính của tôi) bạn phải nhấn : cho dấu nhắc lệnh xuất hiện. Sau đó, bạn có thể nhập quit.

Bạn có thể thấy rằng máy sẽ không cho phép bạn thoát vì thông tin của bạn chưa được lưu. Nếu bạn vẫn muốn thoát, hãy nhập ! ngay sau khi bỏ thuốc lá (tức là :quit!).


23
2017-11-28 15:25





Vim có ba chế độ hoạt động: Chế độ đầu vào, chế độ Lệnh và chế độ Ex.

Chế độ đầu vào - mọi thứ bạn nhập, tất cả các lần nhấn phím được lặp lại trên màn hình.

Chế độ lệnh hoặc chế độ Escape - mọi thứ bạn nhập vào chế độ này được hiểu là lệnh.

Chế độ Ex - đây là một trình soạn thảo khác, ví dụ. Nó là một trình soạn thảo dòng. Nó hoạt động trên mỗi dòng hoặc dựa trên một loạt các dòng. Trong chế độ này, một : xuất hiện ở cuối màn hình. Đây là trình soạn thảo cũ.

Để thoát khỏi Vim, bạn có thể thoát ra khi đang ở chế độ cũ hoặc ở chế độ lệnh. Bạn không thể thoát khỏi Vim khi bạn đang ở chế độ đầu vào.

Thoát khỏi chế độ cũ

  1. Bạn cần phải chắc chắn rằng bạn đang ở chế độ Command. Để làm điều đó, chỉ cần nhấn Esc Chìa khóa.

  2. Chuyển sang chế độ cũ bằng cách nhấn : Chìa khóa

  3. Sử dụng bất kỳ kết hợp nào sau đây trong chế độ cũ để thoát:

    :q - bỏ :q! - Thoát ra mà không lưu lại :wq - lưu và thoát hoặc viết & thoát :wq! - giống như wq, nhưng lực viết trong trường hợp quyền truy cập tệp chỉ đọc :x - viết và bỏ :qa - bỏ tất cả. hữu ích khi nhiều tệp được mở như: vim abc.txt xyz.txt

Thoát khỏi chế độ lệnh

  1. Bấm phím thoát. Bạn có thể đã làm điều này nếu bạn đang ở chế độ lệnh.

  2. Nhấn ZZ vốn (shift zz) - cứu thoát

  3. Nhấn ZQ vốn (shift zq) - thoát mà không lưu.


22
2018-05-24 02:46



Những gì bạn đang gọi là "chế độ cũ" thực sự được gọi là chế độ dòng lệnh. Nó cho phép bạn nhập các lệnh cũ, nhưng với một số sự khác biệt quan trọng. - jpaugh
Cảm ơn @jpaugh. Các liên kết này hiện đang giảm xuống. Nhưng tôi nhận được quan điểm của bạn. - tovishalck


Tôi đã nhận Vim bằng cách cài đặt một khách hàng Git trên Windows. :q sẽ không thoát khỏi Vim cho tôi. :exit tuy nhiên ...


14
2018-02-05 11:30



Tương tự như vậy cho vim làm git trên một macintosh này làm việc. - Joel
@ Joel chỉ cần kiểm tra này trên mac của tôi, cả hai lệnh là legit (vim -version 7.3). - Nick Volynkin
Dành cho Git Bash trên cửa sổ, trong Vim đôi khi ESC không làm việc. sử dụng CTRL + [ thay thế. - Val