Điều hướng trong chế độ chèn


19

Cuối cùng tôi đã quyết định bỏ các phím mũi tên để điều hướng có lợi cho hjkl. Tôi đã sử dụng Vim hardmodeplugin để vô hiệu hóa các phím mũi tên.

Tôi đã quen với việc điều hướng khá nhanh, nhưng hóa ra điều hướng trong chế độ chèn đột ngột là không thể.

Có giải pháp nào cho điều này ? (chế độ chèn hiện tại không phải là một giải pháp).


8
Có: sử dụng các phím mũi tên :-) Đó là những gì họ đang ở đó ;-)
Martin Tournoij

@Carpetsmoker nếu có sẵn các phím mũi tên, tôi sẽ sử dụng chúng thay vì hjkl ....
stdcall

5
Nhưng ý tưởng là thoát khỏi chế độ chèn (cụ thể là, sử dụng nó chỉ cho những gì nó có nghĩa là cho, tức là chèn nhỏ xen kẽ với các lệnh khác) chính xác là giải pháp. Nếu tôi không nhầm tôi đã thấy nó trong trợ giúp, nếu tôi tìm thấy một liên kết tôi sẽ đăng nó. Có vẻ như bạn đã quen với điều đó quá nhiều, không phải với các phím mũi tên.
Vee

Bạn có thể liên kết bàn phím của mình để sử dụng các mũi tên làm phím tắt như <kbd> super </ kbd> + <kbd> j </ kbd> để di chuyển xuống. <kbd> super </ kbd> có thể là bất kỳ nút nào, ví dụ <kbd> Caps Lock </ kbd> khá phổ biến
ivanjermakov

Câu trả lời:


25

Có rất nhiều lựa chọn bạn có. Một tùy chọn và IMO đơn giản nhất và dễ nhất là ngừng vô hiệu hóa các phím mũi tên. Tôi hiểu tại sao nhiều vimmer khó tính nói những điều như

Bạn không bao giờ nên sử dụng các phím mũi tên một lần nữa! Mỗi khi bạn sử dụng các phím mũi tên, bạn lãng phí 3 phút thời gian, một con chó con chết và ai đó chuyển sang Emacs!

(Rõ ràng là tôi đang đùa) Tuy nhiên, có một mục đích cho các phím mũi tên. Chúng cực kỳ hữu ích cho việc điều hướng:

  • Ở chế độ chèn

  • Trong dòng lệnh

Nói chung khi mọi người bảo bạn không sử dụng các phím mũi tên, đó là vì họ muốn bạn học lại điều hướng theo cách giống như vim hơn. Nếu bạn cảm thấy thoải mái hjklvà bạn chủ yếu sử dụng các phím mũi tên ở chế độ chèn, không có lý do chính đáng nào để buộc bạn không sử dụng chúng.

Tùy chọn # 2 là ánh xạ lại ctrl-hjklđể hoạt động như các phím con trỏ. Điều này là tốt bởi vì bạn có thể ở trên homerow, và nó phù hợp với bộ nhớ cơ bạn đã học sử dụng hjkltrong chế độ bình thường. Trong thực tế, đây là những gì tôi làm . Nhược điểm chính của phương pháp này là có thể gây khó khăn cho việc thiết lập trong terminal vim vì <C-j>tạo ra một NULbyte. Tôi khắc phục điều này bằng cách sử dụng Gvim. Tôi không biết có một sửa chữa dễ dàng cho console vim hay không.

Tùy chọn # 3 là sử dụng <C-o>để thực hiện các chuyển động chế độ nhỏ thông thường. Ví dụ: nếu bạn đang gõ

Hello world!
     cursor^

và bạn nhận ra rằng bạn đã quên một dấu phẩy, thay vì thực hiện leftleftleftleftleftleft, bạn chỉ có thể thực hiện <C-o>b<C-o>hhoặc <C-o>2Fo, hoặc bất kỳ sự kết hợp nào khác của các chuyển động chế độ bình thường mà bạn thích.

Tất nhiên, một lựa chọn khác, và một điều tôi rất thích là chỉ sử dụng Esc, thực hiện một vài chuyển động nhỏ trước khi quay trở lại chế độ bình thường. Bạn đã đề cập rằng bạn không muốn làm điều đó, nhưng đôi khi đây thực sự là cách hiệu quả nhất.

Có lẽ có một số cách tiếp cận khác nữa, nhưng đây là những cách tôi thích đã làm việc cho tôi.


2
Thú vị - Tôi lưu ý bạn sử dụng <c-o>gk<c-o>gjthay vì <Up><Down>. Tại sao vậy?
Kyle Strand

4
@kylestrand gkgjtrực quan đi lên và xuống một dòng ngay cả khi dòng được bọc.
DJMcMayhem

4
Tôi không nghĩ rằng điều này là đủ để tự mình đảm bảo một câu trả lời, nhưng tôi thích tắt các phím mũi tên ở chế độ bình thường (điều này buộc tôi phải học HJKL) và bật trong tất cả các chế độ khác ( noremap <Up> <NOP>...) . Bạn dành đủ thời gian ở chế độ bình thường để học HJKL, nhưng họ sẽ ở đó khi bạn cần. Hoặc ít nhất, tôi thấy đây là một trung gian thoải mái giữa việc để chúng luôn tắt hoặc luôn bật và nó không yêu cầu ánh xạ lại các phím khác (rất nhiều người như Ctrl-HJKL để di chuyển giữa các pan).
Itai Ferber

Btw, BASH et al hỗ trợ các ràng buộc chính vi. Với các ánh xạ này, bạn có thể <ESC> và sử dụng hjkl để đi qua lịch sử cmd (lên / xuống) hoặc sửa đổi lệnh hiện tại (trái / phải)
Rolf

9

Tôi thích sử dụng phím Control để biến các hjklphím di chuyển thành các phím di chuyển "phổ quát". Đây là một chút có liên quan của tôi .vimrc:

" In insert or command mode, move normally by using Ctrl
inoremap <C-h> <Left>
inoremap <C-j> <Down>
inoremap <C-k> <Up>
inoremap <C-l> <Right>
cnoremap <C-h> <Left>
cnoremap <C-j> <Down>
cnoremap <C-k> <Up>
cnoremap <C-l> <Right>

Các inoremapcâu lệnh áp dụng cho chế độ chèn, trong khi các cnoremapcâu lệnh áp dụng cho chế độ lệnh. (Tôi đã sử dụng ánh xạ này quá lâu đến nỗi tôi đã quên liệu có cách nào điều hướng lịch sử chế độ lệnh mà không có nó hay không.)

(Chỉnh sửa: Tôi thấy câu trả lời khác đã đề cập đến khả năng này. Tuy nhiên, có thể hữu ích khi xem các lệnh ánh xạ thực tế.)


3

Nhấn escsau đó sử dụng hjklwWbBbất kỳ điều hướng nào bạn muốn thực hiện. Toàn bộ quan điểm của chế độ cứng là giúp bạn học cách điều hướng với các chuyển động vim phức tạp hơn. Thực hiện các chỉnh sửa nhỏ sau đó di chuyển đến một vị trí mới, sử dụng chế độ bình thường.

Nếu bạn không học cách điều hướng nhanh hơn khi bật hardmode, hãy xem câu trả lời của tôi từ một câu hỏi khác trong cùng chủ đề.


3

Nếu bạn muốn di chuyển nhiều hơn MỘT hoặc HAI vị trí ...

... lựa chọn tốt nhất là đánh ESC, di chuyển xung quanh và quay lại chế độ chèn một lần nữa.

Không có điểm nào trong việc tạo ánh xạ muốn <C-h>di chuyển sang trái và sau đó bắt đầu nhấn nó quá nhiều lần ... vì là người dùng vim, bạn không cần phải nhấn cùng một phím nhiều lần để đạt được chuyển động thông minh.

(Nếu ESCphím không gần với ngón tay của bạn, thì đó sẽ là một lựa chọn tốt để tạo ánh xạ cho nó.)

Nếu bạn muốn di chuyển MỘT hoặc HAI vị trí trên chế độ chèn ...

... một lựa chọn tốt sẽ là xác định một số chuyển động bằng <Leader>khóa của bạn :

(Tôi sử dụng ,làm <Leader>chìa khóa vì nó cảm thấy gần gũi và dễ vỡ với ngón tay của tôi)

noremap! <Leader>h <left>   "move cursor left
noremap! <Leader>j <down>   "move cursor down
noremap! <Leader>k <up>     "move cursor up   
noremap! <Leader>l <right>  "move cursor right
noremap! <Leader>w <esc>wi  "move one word forward
noremap! <Leader>e <esc>ei  "move forward to the end of word
noremap! <Leader>b <esc>bi  "move one word backward

1

Nếu bạn chỉ cần sửa đổi một lượng nhỏ văn bản hoặc một từ, bạn có thể sử dụng <Ctrl-O>h/j/k/l.

<Ctrl-O> đưa bạn trở lại chế độ Bình thường chỉ với lệnh đó và sau đó đưa bạn trở lại chế độ chèn, do đó, nó sẽ giúp bạn tiết kiệm một số lần nhấn phím, nếu bạn cần chuyển sang chế độ bình thường cho một chuyển động nhỏ.

Tham chiếu: 1. http://vim.wikia.com/wiki/Use_Ctrl-O_instead_of_Esc_in_insert_mode_mappings

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.