Các cách khác để thoát chế độ Chèn ngoài Escape


74

Lý do chính tôi thích vim hơn emacs là khoảng cách di chuyển tay của tôi ra khỏi hàng nhà rất thấp (ngay cả khi là một lập trình viên). Tuy nhiên, một lần chính mà tôi làm điều này là rời khỏi chế độ chèn, bằng cách nhấn Escape.

Gần đây tôi đã biết rằng tôi cũng có thể sử dụng Ctrl + C để thoát khỏi chế độ chèn. Tuy nhiên, đây không thực sự là một cải tiến.

Làm cách nào tôi có thể thoát khỏi chế độ chèn mà không cần rời tay khỏi hàng nhà và không ảnh hưởng lớn đến những gì tôi có khả năng nhập? Lưu ý: Tôi sử dụng vim vani chủ yếu với bố cục bàn phím dvorak, mặc dù tôi cũng rất thích nghe giải pháp cho bố cục qwerty.


1
Bạn có thể ánh xạ bất kỳ tổ hợp phím nào ở bất cứ đâu và bạn không thể làm gì khác. Đó có phải là ý bạn không?
yo '

3
Đã học phím tắt Ctrl + c THX!
Philippe Gachoud

Làm thế nào về ánh xạ Caps Lock là Esc?
Hẻm núi Kolob

@PhillippeGachaud: Không sử dụng Ctrl-C để thay thế cho Esc. Ctrl-C không giống như Escape, nó là Escape bắt buộc và có thể hoạt động khác đi trong một số trường hợp.
Lie Ryan

Câu trả lời:


60

Một ràng buộc phổ biến bạn sẽ thấy là jj , vì nó hoạt động tốt cho bố cục QWERTY nếu bạn sử dụng định vị hàng nhà.

inoremap jj <ESC>

Trong trường hợp đó, để nhập một chữ jj- bạn nên đợi trong 1 giây (theo mặc định) giữa việc nhập ký tự thứ hai. (xem :help 'timeout'để biết chi tiết)

Ngoài ra còn c-ocó nó sẽ đưa bạn ra khỏi insert, cho phép bạn thực hiện một lệnh bình thường, và sau đó đưa bạn trở lại chèn.

http://vim.wikia.com/wiki/Avoid_the_escape_key


1
Trong dvorak, jcchìa khóa. Vì vậy, điều này sẽ không quá tệ (để gõ cc). Tôi cũng có thể liên kết hh(qwerty jkey = dvorak h), nó sẽ chỉ khởi động tôi nếu tôi đang gõ shhhhhhhhoặc một cái gì đó.
durron597

7
cc là một tổ hợp phím hai chữ cái phổ biến hơn nhiều, bằng tiếng Anh ít nhất. Vì vậy, đó có thể không phải là sự lựa chọn tốt nhất
Nick J Adams

4
Làm thế nào về bắt chước jk? Tìm hai khóa liền kề trong Dvorak nhưng không phải là kết hợp phổ biến trong ngôn ngữ ưa thích của bạn. tn, ví dụ, là tương đương vị trí của jk.
David Lord

1
Tôi giống như có jk/ kjthoát chế độ bình thường ngay cả trong Dvorak; chúng là các phím "c" và "v" trên bàn phím QWERTY, vì vậy chúng dễ dàng cho con trỏ trái và ngón giữa của tôi.
alxndr

2
Tôi nghĩ rằng chúng ta có thể làm tốt hơn nữa - sử dụng iithay thế. Có bạn phải di chuyển ngón tay của bạn ra khỏi nhà nhưng vẫn thoải mái. Và thậm chí quan trọng hơn, bạn có thể chuyển đổi qua lại giữa các chế độ mà không cần di chuyển ngón tay.
Sridhar Sarnobat

38

Bên cạnh các lựa chọn thay thế built-in <C-[><C-c>để <Esc>chìa khóa được trích dẫn bởi những người khác, một giải pháp phổ biến là để remap <CapsLock>như một Thoát bổ sung. Điều này cả trên bàn phím Qwerty và Dvorak.

Bằng cách này, bạn có thể nhấn Esc rất dễ dàng bằng ngón tay trái, mà không cần rời tay khỏi HomeRow (tình cờ, CapsLock là nơi Escape từng nằm trên bàn phím khi vi được phát minh).

Ánh xạ lại có thể được thực hiện:

  • trên Windows sử dụng tiện ích AutoHotKey ;
  • trên Mac sử dụng tiện ích KeyRemap4MacBook và các tiện ích khác;
  • trên Linux, thay đổi tùy theo Môi trường máy tính để bàn. Ví dụ: trên Linux Mint / Cinnamon chỉ là vấn đề chọn tùy chọn phù hợp trong Menu-> Bàn phím-> Bố cục bàn phím-> Hành vi của Caps Lock. Ngoài ra, nhưng ít dễ dàng hơn, nó có thể được ánh xạ lại ở cấp Xorg bằng chương trình xmodmap và để nó chạy .Xmodmaptệp sau :

    clear Lock
    keycode 0x42 = Escape
    

    Hệ thống có thể được thiết lập để tự động chạy nó mỗi lần đăng nhập bằng cách đặt chiến lược các dòng script shell sau (giả sử .Xmodmaplà trên thư mục nhà của bạn ~) trong chuỗi các tệp tự động đăng nhập:

    if [ -s ~/.Xmodmap ]; then
      xmodmap ~/.Xmodmap
    fi
    

    Tuy nhiên, đó là khó khăn, bởi vì các tệp thực sự có nguồn gốc khác nhau tùy theo môi trường (máy tính để bàn) được sử dụng. Ví dụ, tôi có xmodmap được gọi là một mục trong "Ứng dụng khởi động" của Cinnamon (cho phép tôi thực hiện nhiều hơn tùy chỉnh ánh xạ lại khóa GUI tiêu chuẩn).

Một số người thậm chí còn đi xa hơn và lập trình phím CapsLock để hành xử:

  • làm Ctrlchìa khóa bằng cách nhấn và giữ nó,
  • như một Escchìa khóa bằng cách nhấn và nhanh chóng phát hành nó.

Điều này có thể được thực hiện trên Windows và Mac bằng cách cài đặt / lập trình đúng tiện ích remap tương ứng (cụ thể cho các gợi ý AutoHotkey có thể tìm thấy ở đây và để kiểm tra KeyRemap4MacBook tại đây ). Trên Linux sử dụng chương trình xcape .


2
Hoàn toàn đồng ý. Có khóa ctrl trên hàng chủ giúp cải thiện rất nhiều khả năng sử dụng (cuộn qua các lần hoàn thành với ctrl + n, cuộn qua tệp với ctrl + f / ctrl + b, thoát bằng ctrl +], v.v. Tất cả các combo chính này đều dễ thực hiện hơn theo cách này.
John O'M.

1
Về cách bấm Ctrlphím (ở vị trí thông thường) mà không vặn ngón tay út: bạn có thể nhấn nó bằng lòng bàn tay bên ngoài, vì nó được mô tả kỹ ở đây (Tôi đã tìm thấy mẹo thông minh tuyệt vời này trên 'Net, đã đến lúc đưa nó trở lại :) và danh tiếng cho người đã phát minh ra nó)
Giovanni Maggiorani

FWIW KeyRemap4MacBook đã được đổi tên thành Karabiner: pqrs.org/osx/karabiner/index.html.en
alxndr

Tôi đã thử giải pháp này, nhưng thấy rằng tôi đã vô tình nhấn Caps Lock khi nhấn Shift một vài lần, điều này thật khó chịu. Vì vậy, số dặm của bạn có thể thay đổi tùy thuộc vào mức độ nhanh nhẹn bên trái của bạn. :)
Godsmith

2
Nếu bạn remap Ctrlđể Alt( Cmd) và ngược lại, sau đó <C-[> thực sự tỏa sáng. Pinky là yếu, ngón tay cái là mạnh mẽ. Trên QWERTY, bạn thậm chí không cần rời khỏi nhà vì điều đó, trên Dvorak, điều đó không tốt lắm, nhưng có thể chấp nhận được.
Cầu Nash

28

Các ánh xạ mà tôi sử dụng là:

inoremap jk <esc>
inoremap kj <esc>

Bằng cách này, bạn có thể chỉ cần nhấn jkđồng thời, mà không phải lo lắng về việc bạn nhấn cái nào trước.


70
Nhưng tôi đang viết một cuốn sách về việc chơi Edsgar Dijkstra chơi blackjack ở Reykjavik! ;)
durron597

Cả hai đều kinh khủng nếu bạn muốn viết bất kỳ tiếng Hà Lan.
Hielke Walinga

12

<C-[><C-c>là hai lựa chọn thay thế bản địa <Esc>.

Xem :help i_<esc>:help i_ctrl-cgiải thích sự khác biệt giữa <C-c><Esc>.


Một lần nữa, đây không phải là những cải tiến, vì Ctrl chỉ cách hàng chủ như Escape.
durron597 4/2/2015

4
@ durron597 Trên bàn phím QWERTY, Ctrl có thể cách xa hàng chủ, nhưng nó có một điểm khác biệt quan trọng: nó nằm dưới hàng chủ. Bạn chỉ phải di chuyển ngón tay để ấn nó, trong khi với Esc, bạn phải xoay toàn bộ bàn tay của mình. Ngoài ra, <C-[>có một đối xứng đẹp với nó (cả hai ngón tay nhỏ di chuyển ngược chiều nhau).
wchargein 4/2/2015

6
Lưu ý rằng <C-c> không chính xác như<Esc> .
wchargein

2
Đã đồng ý. Việc sử dụng thường xuyên <C-c>có thể phá vỡ các plugin và autocmds một cách tinh tế.
David Lord

Trên máy của tôi, nó hoạt động <C - [>, nhưng phải mất một nửa giây để đăng ký so với <Cc>
Alexander Mills

4

Bạn có thể ánh xạ Caps Locktới Control mà không cần sử dụng bất kỳ chương trình bên ngoài nào :

  • Trong Mac OS X, truy cập Tùy chọn hệ thống> Bàn phím -> Phím sửa đổi
  • Trong Linux thực thi:setxkbmap -option caps:ctrl_modifier
  • Trong Windows chỉnh sửa sổ đăng ký của bạn.

Điều này mang đến Controlhàng chủ, giúp dễ dàng hơn để nhấn tất cả các nét được điều chỉnh, bao gồm cả Ctrl-[Ctrl-Cthoát cả chế độ Chèn trong Vim.

Ngoài ra, ở cuối câu trả lời của mình, Giovanni đề nghị lập bản đồ Caps Lockđể thực hiện cả hai Control Escape tùy thuộc vào độ dài của báo chí, nhưng điều này đòi hỏi phải cài đặt phần mềm bổ sung.

Ctrl-[lựa chọn thay thế ưa thích , vì nó luôn hoạt động như thế nào Escape.

Một khác biệt đáng kể với Ctrl-Clà khi rời khỏi một chỉnh sửa trong chế độ trực quan blockwise , Ctrl-Csẽ giữ những thay đổi bạn đã thực hiện trên dòng hiện tại, nhưng sẽ không lặp lại những thay đổi so với các dòng khác trong khối, đó là quan điểm của chế độ đó.

Nó cũng sẽ không kiểm tra các chữ viết tắt hoặc kích hoạt sự kiện ChènLeave. Xem:help i_CTRL-C


4

Tôi sẽ đề nghị sử dụng plugin vim-easyescape của tôi .

Plug "zhou13/vim-easyescape"
let g:easyescape_chars = { "j": 1, "k": 1 }
let g:easyescape_timeout = 100
cnoremap jk <ESC>
cnoremap kj <ESC>

Vấn đề với trình tự bản đồ đơn giản inoremap jj <ESC>là Vim sẽ tạm dừng bất cứ khi nào bạn nhập jhoặc kở chế độ chèn (nó đang chờ khóa tiếp theo để xác định xem có nên áp dụng ánh xạ không). Việc tạm dừng gây mất tập trung thị giác mà bạn có thể hoặc không thể nhận thấy. vim-easyescape không có vấn đề như vậy và hỗ trợ thời gian chờ tùy chỉnh.


3

Trong thiết bị đầu cuối vi và Vim, alt+ single-normal-mode-keysẽ hoạt động để chỉnh sửa nhanh trong hầu hết các thiết bị đầu cuối.

Điều này hoạt động bởi vì hầu hết các thiết bị đầu cuối gửi công cụ sửa đổi alt là ký tự thoát. Ví dụ, khi bạn gõ alt+kcác mô phỏng thiết bị gửi hai nhân vật cho chương trình chạy: esc, k. Vi và Vim diễn giải điều này như bạn mong đợi; nó rời khỏi chế độ chèn (vì thoát) và thực thi lệnh chế độ bình thường (trong ví dụ này, di chuyển con trỏ lên một dòng).

Đây có thể là một cách thuận tiện để thoát khỏi chế độ chèn nếu bàn phím của bạn có phím alt bên cạnh thanh không gian (để có thể nhấn bằng ngón tay cái, để ngón tay trên hàng nhà), miễn là bạn đang sử dụng trình giả lập thiết bị đầu cuối với hành vi này và đừng bận tâm khi chạy lệnh chế độ bình thường.


2
Bạn có thể giải thích về những gì single-normal-mode-key? Ý bạn là thoát?
kenorb

Một phím bấm duy nhất mà bạn sẽ sử dụng ở chế độ bình thường có thể được sử dụng ở chế độ chèn với phím alt. ví dụ Alt + x để xóa một ký tự.
ewatt

2
Tôi cũng không hiểu câu trả lời này; Alt + x thực sự có vẻ làm gì đó khác với Alt ở chế độ bình thường? Và một số phím khác dường như không hoạt động? Nhưng có lẽ tôi đang sử dụng sai ..? Có lẽ bạn có thể mở rộng câu trả lời của mình một chút để giải thích cách thức hoạt động và liên kết đến một số tài liệu Vim cũng sẽ tốt :-) Cảm ơn! :-)
Martin Tournoij

điều đó thực sự phụ thuộc vào cấu hình thiết bị đầu cuối của bạn và thường không được đặt như bạn dường như đề xuất.
Christian Brabandt

1
Tôi đã ủng hộ điều này, sau đó kiểm tra lịch sử và nhận ra rằng vì một lý do nào đó, người điều hành đã chỉnh sửa nó để thêm 99% văn bản từ không khí mỏng, thay vì chỉ để lại một bình luận như phần còn lại của chúng tôi dự kiến ​​sẽ làm. Vì vậy, tôi đã phải đảo ngược phiếu bầu của tôi. Chắc chắn những gì đã xảy ra ở đây vượt ra ngoài phạm vi của các chỉnh sửa hợp lý? Tôi đã có các chỉnh sửa ít gây rối hơn bị từ chối. Nội dung mới là tuyệt vời, chắc chắn, nhưng không thuộc về câu trả lời này. Nó nên là của riêng nó.
gạch dưới

3

Tôi sử dụng:

:map! ;l ^[
:vmap ;l ^[

Nó cảm thấy tương tự như nhấn Return. Tôi cũng sử dụng ;làm người lãnh đạo cho các ánh xạ chế độ Chèn khác.

Lần duy nhất tôi cần gõ ';' + chữ cái là khi chơi golf mã; Tôi đã không có bất kỳ xung đột nào khác.


có lẽ tốt hơn để ánh xạ nó để thoát hơn là ánh xạ nó tới ^ [phải không? :)
Alexander Mills

2

Tôi đã sử dụng Ctrl+ 3từ khá lâu, tôi thấy việc nhập dễ dàng hơn hầu hết các lựa chọn thay thế và dường như hoạt động tốt (ít nhất là trên Linux). My Caps Lockđược ánh xạ tới Ctrl, vì vậy rất thoải mái khi gõ nó.

Tôi đã thử sử dụng Ctrl+ ctrong một thời gian, nhưng tôi đã gặp một số vấn đề với nó mà hiện tại tôi không nhớ chính xác, nhưng tôi đã không nhận được chính xác hành vi Escgiống như bây giờ với Ctrl+ 3.


2
Chính xác thì Ctrl-3 phải làm gì?
Christian Brabandt

Tôi không biết nó hoạt động như thế nào, nhưng nó hoạt động như Esctrong vanilla Vim. Tôi đã tìm thấy nó theo kinh nghiệm bằng cách thử nghiệm các kết hợp, không biết chi tiết về cách thức hoạt động của các bộ phận bên trong.
elias

1
Đây không phải là một điều vi, hoạt động cũng trên vỏ. Rất hữu ích trong trường hợp bạn bật chế độ vi trên vỏ của mình bằng bindkey -v
golfadas

1

Nếu bạn có bàn phím tiếng Anh Mỹ, nhấn Ctrl- [tương đương với cách nhấn Esc. Điều này cung cấp một cách dễ dàng để thoát khỏi chế độ chèn. Hoặc sử dụng Ctrl- c.

Nếu bạn đã vim ở chế độ dễ ( -y), thì bạn nhấn Ctrl- l(Control-L) để thoát chế độ chèn.

Ngoài ra còn có Ctrl+ osẽ chỉ thoát chế độ chèn tạm thời chỉ để thực thi một lệnh và quay lại chế độ chèn (xem :help i_CTRL-O:)

Hoặc Ctrl+ r, nhưng nó chỉ cho chèn nội dung của đăng ký hoặc biểu hiện, ví dụ như Ctrl+ r, =5*5(xem: :help i_CTRL-R, :help c_CTRL-Rstackoverflow bài ).

Đọc thêm tại: Tránh phím thoát ở vim wikia


3
FYI: Ctrl+rlà để chèn đăng ký (bao gồm biểu thức =reg). Nếu bạn muốn tạm thời thực hiện một lệnh tắt sử dụng Ctrl+o.
Sukima

1

Tôi đã giải quyết <A-e>cho việc trốn thoát:

noremap  <A-e> <Esc>
snoremap <A-e> <Esc>
inoremap <A-e> <Esc>
tnoremap <A-e> <Esc>

" For some reason in command line mode '\e' is interpreted as Enter.
cnoremap <A-e> <C-c>

Chỉnh sửa: Chỉ tìm thấy về việc <C-\><C\n>sẽ đưa bạn đến chế độ bình thường từ bất kỳ chế độ nào khác. Nó cũng có hành vi tổng thể tốt hơn. Các ánh xạ trở thành:

noremap <A-e> <C-\><C-n>
noremap! <A-e> <C-\><C-n>

0
nnoremap <C-I> <C-I>
vnoremap <Tab> <Esc>gV
onoremap <Tab> <Esc>
inoremap <Tab> <Esc>`^

Tôi sắp xếp lại tab để thoát. Tôi nghĩ rằng trong lịch sử đó là nơi khóa esc được sử dụng, vì vậy tôi đã sử dụng nó và không bao giờ nhìn lại. Tôi hầu như không cần phải đặt một tab trong tài liệu và khi tôi làm, tôi chỉ cần nhấn shift + tab. Tôi chưa bao giờ bỏ lỡ ràng buộc tab ban đầu.


Đoạn văn về vim và emacs là hoàn toàn không cần thiết ...
D. Ben Knoble
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.