Thoát vim nhanh hơn


124

Tôi sử dụng Vim chủ yếu để chỉnh sửa nhanh hơn là các phiên làm việc dài. Trong ý nghĩa đó, tôi thấy trình tự bàn phím để bỏ đặc biệt khó nhọc: Esc, Shift+ ;, w, q, Enter.

Làm cách nào để thoát Vim (có thể lưu tài liệu) với ít lần nhấn phím nhất? Đặc biệt là từ chế độ Chèn.


50
Nút nguồn chỉ là một cú nhấn chuột, bạn biết đấy.
Renan

2
@jasonwryan đúng - ZZ khá nhanh nếu bạn ở chế độ lệnh, nhưng so sánh không hoàn toàn đúng. Chuỗi khóa của bạn giả định rằng bạn đang ở chế độ chèn. Để thoát khỏi chế độ chèn Ctrl- [nhanh hơn Esc. Shift-: là một tổ hợp phím - bạn không thể gõ: bất kỳ thao tác nào nhanh hơn. Vì vậy, bạn tiết kiệm một số, nhưng không nhiều.
Đaminh Cronin

2
Bạn không nên sử dụng Escđể thoát chế độ chèn, vì Escphím này cách xa các phím khác trên bàn phím hiện đại. Sử dụng Ctrl+ ]hoặc tạo bản đồ của riêng bạn.
void-con trỏ

3
Nhận một bàn phím tiếng Pháp - bạn có thể loại bỏ sự thay đổi.
Giàu

1
void-con trỏ, không Ctrl + C hoạt động thay vì Ctrl + [thay thế cho Esc?
bảo vệ zumalififard 6/03/2015

Câu trả lời:


154

Shiftzz trong chế độ lệnh lưu tập tin và thoát.


4
Điều này hoàn toàn cần Shift hay chỉ đơn giản Z Z(chữ hoa)? Ngoài ra, bạn không cần phải ở chế độ lệnh để nó hoạt động, điều này sẽ làm cho nó Esc Z Z?
CVn

35
Ngoài ra, ESC Z Qđể thoát mà không lưu
Carlos Campderrós

Strg + zz là sai. Nó sẽ gửi quá trình vim đến nền
hek2mgl

2
@ MichaelKjorling: ZZ chỉ cần viết hoa.
LarsH

2
Điều này chỉ đóng một tập tin mặc dù. Tôi có rất nhiều tab đang mở nên sẽ mất hàng tấn Zs.
Philip

41

ZZở chế độ bình thường sẽ lưu tệp hiện tại nếu được sửa đổi và thoát hoặc đóng cửa sổ / tab hiện tại (giống như :xnhưng không :wqghi tệp ngay cả khi nó chưa được sửa đổi).

Để thoát vô điều kiện sau khi đã ghi tất cả các tệp đã sửa đổi trong tất cả các cửa sổ, tab và bộ đệm ẩn, bạn cần :xa(nó vẫn không thoát nếu một số tệp không thể được ghi vì lý do này hay lý do khác)

Để thoát vô điều kiện mà không thay đổi bất cứ điều gì: ZQ(giống như :q!).


1
Tôi nghĩ bạn có nghĩa là chế độ bình thường. "Chế độ lệnh" có thể dễ dàng bị nhầm lẫn với chế độ dòng lệnh
David Brown

@DavidBrown, command modelà tên truyền thống, nhưng tôi đồng ý rằng normal modenó ít mơ hồ hơn. Tôi đã sửa đổi câu trả lời.
Stéphane Chazelas

33

:x là một khóa nhỏ hơn :wq


11
Không tốt như Shift + Z Zthể!
CodeMote

@CodeMedic Nó nhanh và xa nhanh nhất nếu bạn có nno : ;nno ; :mặc dù vậy. (cộng vno giống nhau). Tôi đã nghi ngờ về việc trao đổi, nhưng bạn sẽ không bao giờ quay trở lại. :nno ,: :silent! unmap :<CR>:silent! unmap ;<CR>:nno ,; :nno ; :<CR>:nno : ;<CR>:vno ; :<CR>:vno : ;<CR>hỗ trợ lẻ yap@"và như vậy.
năm15

20

Tạo một ánh xạ tùy chỉnh cho các tác vụ thường xuyên được sử dụng. Nếu bạn thoát vim thường xuyên, hãy tạo một ánh xạ với một vài nét chính, vd

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

Nếu <leader>được đặt thành dấu phẩy bằng cách sử dụng let mapleader = ","nhấn dấu phẩy hai lần là cách nhanh chóng thoát khỏi vim và lưu các thay đổi của bạn. Nếu bạn muốn lưu thêm một hành trình phím khi bạn ở chế độ chèn, hãy tạo ánh xạ chế độ chèn tương ứng:

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

Nhưng hãy cẩn thận, điều này có thể vô tình khá vim khi bạn nhấn <leaderhai lần.


1
Cảm ơn câu trả lời thấu đáo, nó khuyến khích tôi tìm hiểu thêm về vim (điều mà tôi có xu hướng tránh)!
vemv

4
@vemv, bạn nên làm việc theo cách khác - bất cứ lúc nào bạn phải làm điều tương tự hơn một lần, hãy xem liệu có cách nào để ngăn chặn điều đó!
Wayne Werner

17

Sử dụng điều này để làm phép thuật. Hai tổ hợp phím chỉ!

Ctrl+ sđể lưu,

ctrl+ dđể lưu và thoát,

ctrl+ qđể thoát các thay đổi loại bỏ.

1 Đặt cái này vào ~ / .bashrc của bạn

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

lần 2. Đặt cái này vào ~ / .vimrc của bạn

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>

lần thứ 3. Khởi động lại vim và có được ngày làm việc hiệu quả hơn!


2
Tại sao nên sử dụng CTRL + D / CTRL + Q để lưu + thoát, và không chỉ ZZ và ZQ?
Evan Carroll

Xin chào Evan, ctrl + d / ctrl + q chỉ cần hai tổ hợp phím, trong khi ZZ và ZQ cần ba tổ hợp phím. ca + z + z / ca + q + q. Một khóa tiết kiệm rất có ý nghĩa nếu chúng ta làm điều này thường xuyên. Ngoài ra, chúng tôi đã nêu ra với ctrl + là phím tắt lưu, tôi nghĩ nó trực quan hơn là ZZ hoặc ZQ.
Brain90

4
Tôi luôn coi ZQ là nguy hiểm. Bạn có thể có ý định nhấn ZQ để không lưu, nhưng nếu bạn vô tình nhấn Z hai lần bạn đã đi và lưu tệp của bạn mà không có ý nghĩa.
Keith Devens

1
nếu bạn đang dùng mac thì hãy sử dụng ~ / .bash_profile. Và nhớ nguồn nó.
Snowcrash

16

Còn về Q'Thoát' thì sao?

Điều đó sẽ chỉ yêu cầu một lần nhấn phím (nghĩa là ShiftQ). Đó cũng là một sự kết hợp quan trọng mà tôi hiếm khi gặp tai nạn.

Theo mặc định, vim ánh xạ Q đến switch to "Ex" mode. Nếu bạn thấy chế độ "Ex" là vô dụng (hoặc gây phiền nhiễu) như tôi, thì bạn sẽ không bỏ lỡ chức năng mặc định nào cả.

Đây là những gì tôi có trong .vimrctập tin của mình :

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

Nếu bạn có bộ đệm chưa được lưu, nó sẽ nhắc bạn trước khi thoát.


bằng cách nào đó trong VIM Q của tôi đã được ánh xạ tới :qtheo mặc định. Cảm ơn vì tiền hỗ trợ.
dùng13107

7

Đây là một bảng cheat cho VIM

Cheat-sheet-for-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.

Một số khác ::

Đóng và lưu tệp

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 người cuối cùng nên thêm "kể từ lần cuối tệp được lưu" ... đó là "hiển nhiên" nhưng người mới bắt đầu có thể hiểu "tuyệt vời, kể từ khi tôi mở vi" và phát hiện ra rằng không, nếu họ lưu trong phiên, ": q! " sẽ không khôi phục tập tin gốc, và cũng sẽ không ": e!". Nó sẽ chỉ loại bỏ các sửa đổi xảy ra kể từ lần cuối cùng tệp được mở hoặc lưu (tùy theo cái nào là mới nhất).
Olivier Dulac

3

Giải pháp đơn giản và tiện lợi của tôi để thoát và lưu từ vim - là:

Ctrl+ Xphím tắt.

Jut thêm mã này vào .vimrctập tin:

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

1
Đẹp, nhưng tại sao <C-Q>không thể lập bản đồ?
Friederbluemle

2

Thử

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

Nếu bạn sử dụng fFtT, việc này sẽ mất một số thời gian để làm quen, nhưng bây giờ bỏ việc chỉ ;xđể tiết kiệm nếu cần, ;qkhông lưu. Thêm vào đó, mọi thứ khác cũng nhanh hơn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.