ออกเป็นกลุ่มเร็วขึ้น


124

ฉันใช้ Vim เป็นหลักในการแก้ไขอย่างรวดเร็วมากกว่าการทำงานที่ยาวนาน ในความรู้สึกที่ผมพบว่าลำดับแป้นพิมพ์สำหรับการเลิกสูบบุหรี่โดยเฉพาะอย่างยิ่งลำบาก: Esc, Shift+ ;, w, ,qEnter

วิธีออกจาก Vim (อาจบันทึกเอกสาร) ด้วยการกดแป้นน้อยที่สุด? โดยเฉพาะจากโหมดแทรก


50
ปุ่มเปิดปิดอยู่แค่คลิกเดียวคุณก็รู้
Renan

2
@ jasonwryan ถูกต้อง - ZZ ค่อนข้างรวดเร็วหากคุณอยู่ในโหมดคำสั่ง แต่การเปรียบเทียบไม่ถูกต้องนัก ลำดับคีย์ของคุณจะถือว่าคุณอยู่ในส่วนแทรกดัดแปลง เพื่อออกจากโหมดแทรก Ctrl- [เร็วกว่า Esc Shift-: เป็นหนึ่งการกดแป้น - คุณไม่สามารถพิมพ์: เร็วกว่าด้วยตัวมันเอง ดังนั้นคุณประหยัดบางส่วน แต่ไม่มาก
โดมินิกโครนิน

2
คุณไม่ควรใช้Escเพื่อออกจากโหมดแทรกเนื่องจากEscกุญแจอยู่ไกลจากคนอื่น ๆ บนคีย์บอร์ดสมัยใหม่ ใช้Ctrl+ ]หรือสร้างแผนที่ของคุณเอง
void-pointer

3
รับแป้นพิมพ์ภาษาฝรั่งเศส - คุณสามารถกำจัดการเปลี่ยนแปลงได้
Rich

1
โมฆะ - ตัวชี้, Ctrl + C ไม่ทำงานแทน Ctrl + [แทน Esc?
zumalifeguard

คำตอบ:


154

Shiftzz ในโหมดคำสั่งจะบันทึกไฟล์และออก


4
สิ่งนี้จำเป็นต้องใช้Shiftหรือเป็นเพียงตัวพิมพ์ใหญ่Z Z(ตัวพิมพ์ใหญ่) หรือไม่? นอกจากนี้คุณไม่จำเป็นต้องอยู่ในโหมดคำสั่งเพื่อให้การทำงานซึ่งจะทำให้มันEsc Z Z?
CVn

35
นอกจากนี้ESC Z Qเพื่อออกโดยไม่บันทึก
Carlos Campderrós

Strg + zz ผิดพลาด มันจะส่งกระบวนการเสียงเรียกเข้าเป็นพื้นหลัง
hek2mgl

2
@ MichaelKjörling: ZZ จะต้องเป็นตัวพิมพ์ใหญ่
LarsH

2
วิธีนี้จะปิดเพียงหนึ่งไฟล์เท่านั้น ฉันมีแท็บจำนวนมากที่เปิดอยู่ดังนั้นจึงต้องใช้ Zs เป็นตัน
ฟิลิป

41

ZZในโหมดปกติจะบันทึกไฟล์ปัจจุบันหากมีการแก้ไขและออกหรือปิดหน้าต่าง / แท็บปัจจุบัน (เหมือน:xแต่ไม่ใช่:wqซึ่งจะเขียนไฟล์แม้ว่ามันจะไม่ได้ถูกแก้ไข)

ในการออกโดยไม่มีเงื่อนไขหลังจากเขียนไฟล์ที่แก้ไขทั้งหมดในหน้าต่างแท็บและบัฟเฟอร์ที่ซ่อนไว้ทั้งหมดคุณต้อง:xa(มันจะไม่ออกหากไฟล์บางไฟล์ไม่สามารถเขียนได้ด้วยเหตุผลหรืออย่างอื่น)

หากต้องการออกโดยไม่มีเงื่อนไขโดยไม่เปลี่ยนแปลงสิ่งใด: ZQ(เหมือน:q!)


1
ฉันคิดว่าคุณหมายถึงโหมดปกติ "โหมดคำสั่ง" อาจสับสนได้ง่ายกับโหมดบรรทัดคำสั่ง
David Brown

@ DavidBrown command modeเป็นชื่อดั้งเดิม แต่ฉันยอมรับว่าnormal modeไม่ชัดเจน ฉันแก้ไขคำตอบแล้ว
Stéphane Chazelas

33

:x เป็นหนึ่งคีย์น้อยกว่า :wq


11
ไม่ดีเหมือนShift + Z Z!
CodeMedic

@CodeMedic มันไกลและเร็วที่สุดหากคุณมีnno : ;และnno ; :ถึงแม้ว่า (บวก vno เดียวกัน) ฉันสงสัยเกี่ยวกับการแลกเปลี่ยน แต่คุณจะไม่กลับไป :nno ,: :silent! unmap :<CR>:silent! unmap ;<CR>และ:nno ,; :nno ; :<CR>:nno : ;<CR>:vno ; :<CR>:vno : ;<CR>สนับสนุนคี่yap@"และเช่นนั้น
jthill

20

สร้างการแมปที่กำหนดเองสำหรับงานที่ใช้เป็นประจำ หากคุณออกจากกลุ่มบ่อยๆให้สร้างการแมปที่มีการกดปุ่มน้อยเช่น

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

หากการ<leader>ตั้งค่าเป็นเครื่องหมายจุลภาคโดยใช้การlet mapleader = ","กดปุ่มเครื่องหมายจุลภาคสองครั้งเป็นวิธีที่รวดเร็วในการออกเป็นกลุ่มและบันทึกการเปลี่ยนแปลงของคุณ หากคุณต้องการบันทึกการกดปุ่มอีกหนึ่งครั้งเมื่อคุณอยู่ในโหมดแทรกให้สร้างการแมปโหมดแทรกที่สอดคล้องกัน:

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

แต่ระวังนี่อาจเป็นกลุ่มโดยบังเอิญเมื่อคุณกด<leaderสองครั้ง


1
ขอบคุณสำหรับคำตอบอย่างละเอียดมันกระตุ้นให้ฉันเรียนรู้เพิ่มเติมเกี่ยวกับเสียงเรียกเข้า (ซึ่งฉันมักจะหลีกเลี่ยง)!
vemv

4
@vemv คุณควรทำงานอีกด้านหนึ่ง - ทุกครั้งที่คุณต้องทำสิ่งเดียวกันมากกว่าหนึ่งครั้งดูว่ามีวิธีหยุดแบบนั้นหรือไม่!
Wayne Werner

17

ใช้สิ่งนี้เพื่อทำเวทมนตร์ การกดแป้นพิมพ์สองครั้งเท่านั้น!

Ctrl+ sเพื่อประหยัด

ctrl+ dเพื่อบันทึกและออก

ctrl+ qเพื่อออกจากการเปลี่ยนแปลงที่ถูกละทิ้ง

1 นำสิ่งนี้ไปที่ ~ / .bashrc ของคุณ

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

ครั้งที่ 2 วางสิ่งนี้ลงใน ~ / .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 รีสตาร์ทเสียงเรียกเข้าและรับวันทำงานเพิ่มขึ้น!


2
เหตุใดจึงใช้ CTRL + D / CTRL + Q เพื่อบันทึก + exit ไม่ใช่แค่ ZZ และ ZQ
Evan Carroll

สวัสดี Evan, ctrl + d / ctrl + q ต้องการการกดแป้นพิมพ์สองครั้งในขณะที่ ZZ และ ZQ ต้องการการกดแป้นสามครั้ง shift + z + z / shift + q + q ปุ่มบันทึกหนึ่งปุ่มมีความสำคัญหากเราทำเช่นนี้บ่อยครั้ง ยิ่งกว่านั้นเราเพิ่มด้วย ctrl + s เป็นทางลัดในการบันทึกฉันคิดว่ามันใช้งานง่ายมากกว่า ZZ หรือ ZQ
Brain90

3
ฉันถือว่า ZQ เป็นอันตรายเสมอ คุณสามารถกด ZQ เพื่อไม่ให้บันทึกได้ แต่ถ้าคุณกด Z สองครั้งโดยไม่ได้ตั้งใจคุณจะไปและบันทึกไฟล์โดยไม่มีความหมาย
Keith Devens

1
หากคุณใช้ mac ให้ใช้ ~ / .bash_profile และอย่าลืมแหล่งที่มา
Snowcrash

16

วิธีการเพียงแค่Q'เลิก'?

นั่นจะต้องใช้การกดแป้น Shift หนึ่งครั้งเท่านั้น (เช่นShiftและQ) มันเป็นชุดค่าผสมที่สำคัญที่ฉันไม่ค่อยได้รับอุบัติเหตุ

โดยค่าเริ่มต้นเป็นกลุ่มแผนที่ Q switch to "Ex" modeเพื่อ หากคุณพบว่าโหมด "Ex" ไร้ประโยชน์ (หรือน่ารำคาญ) อย่างที่ฉันทำคุณจะไม่พลาดฟังก์ชั่นเริ่มต้นเลย

นี่คือสิ่งที่ฉันมีใน.vimrcไฟล์ของฉัน:

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

หากคุณมีบัฟเฟอร์ที่ไม่ได้บันทึกไว้ระบบจะแจ้งให้คุณทราบก่อนออก


อย่างใดใน VIM Q ของฉันถูกแมปไปแล้ว:qโดยค่าเริ่มต้น ขอบคุณสำหรับทิป.
user13107

7

นี่คือสูตรโกงสำหรับ 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.

บางอย่างเพิ่มเติม ::

การปิดและการบันทึกไฟล์

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 ครั้งสุดท้ายควรเพิ่ม "ตั้งแต่ครั้งสุดท้ายที่ไฟล์ถูกบันทึก" ... เป็น "ชัดเจน" แต่ผู้เริ่มต้นสามารถเข้าใจ "ดีมากมันเป็นตั้งแต่ฉันเปิด vi" และค้นพบว่าไม่มีหากพวกเขาบันทึกในระหว่างเซสชัน ": Q!" จะไม่กู้คืนไฟล์ต้นฉบับเลยและจะไม่ ": e!" มันจะยกเลิกการแก้ไขที่เกิดขึ้นตั้งแต่ครั้งล่าสุดที่ไฟล์ถูกเปิดหรือบันทึก (แล้วแต่ว่าจะเป็นเวอร์ชันล่าสุด)
Olivier Dulac

3

ทางออกที่ง่ายและสะดวกของฉันสำหรับการออกและบันทึกจากเสียงเรียกเข้า - คือ:

Ctrl+ Xทางลัด

Jut เพิ่มรหัสนี้ไปยัง.vimrcไฟล์:

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

1
ดี แต่ทำไม<C-Q>ไม่แม็พ
friederbluemle

2

ลอง

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

หากคุณใช้ fFtT สิ่งนี้จะทำให้เกิดความคุ้นเคย แต่ตอนนี้เลิกเพียง;xเพื่อบันทึกถ้าจำเป็น;qไม่ใช่บันทึก นอกจากนี้ทุกอย่างก็เร็วขึ้นเช่นกัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.