Di chuyển đến đầu dòng khi ở chế độ Chèn


83

Tôi biết rằng tôi có thể sử dụng:

  1. Home trong chế độ chèn
  2. Esc+ iđể thoát khỏi chế độ chèn và nhập lại, đi đến đầu dòng một cách hiệu quả.

Nhưng cả hai đều không làm tôi hài lòng. Trong trường hợp đầu tiên tôi phải nghiêng đầu để đánh Home, vì tôi không thể đánh nó một cách mù quáng. Trong trường hợp thứ hai, cánh tay trái của tôi phải rời khỏi hàng nhà để đánh Esc, điều này cũng gây khó chịu.

Có suy nghĩ gì không?


5
Bạn có thể sử dụng số 0 để di chuyển đến đầu dòng, nhưng đó không phải là ở chế độ chèn.
manku

3
Và nếu bạn tìm thấy Esc để được đến nay là tốt, bạn có thể sử dụng Ctrl-[thay :)

3
Hoặc tốt hơn, Ctrl-C hoạt động giống như Esc. Hoặc thậm chí tốt hơn, ánh xạ Caps Lock thành Esc.
Eric Wilson

4
@manku bạn không quá nhiều trả lời câu hỏi của mình như là bạn không trả lời câu hỏi của anh = P
PUK

esc remap để jj bạn cần phải thay đổi giữa các chế độ rất nhiều trong vim
Kapil

Câu trả lời:


149

Ctrl+ Otrong khi ở chế độ chèn sẽ đưa bạn vào chế độ lệnh chỉ với một lần nhấn phím. Do đó, Ctrl+ Othì Shift+ Isẽ hoàn thành những gì bạn đang tìm kiếm.


Bạn có thể thực hiện điều tương tự bằng cách nhấn Ctrl + c, I hoặc Ctrl + [, I. Ctrl + c về chức năng tương tự như ESC và Ctrl + [tương đương với ESC.
sml

42
Hoặc Ctrl-otheo sau 0(hiệu quả hơn một chút so với Ctrl-otheo sau Shift-I), vì bạn sẽ tự động quay lại chế độ chèn. Trong một số trường hợp, Ctrl-otheo sau ^có thể tốt hơn (để di chuyển đến ký tự không có khoảng trắng đầu tiên của dòng).
Jeet

2
bạn có thể sử dụng Alt-A hoặc Alt-I trong khi ở chế độ chèn nếu phím thay thế của bạn gửi thoát (có thể được định cấu hình trong iTerm2)
Rivenfall

2
<C-O>không giống <C-[>hoặc <Esc>mặc dù chúng có thể trông giống nhau. Sự khác biệt là một chỉnh sửa với một lối thoát thông thường + <cái gì đó để đưa bạn vào chế độ chèn một lần nữa> để lại cho bạn hai chỉnh sửa, trong khi <CO> để lại cho bạn một. Điều này có thể giúp bạn duy trì lịch sử hoàn tác rõ ràng hơn và có thể sử dụng lại phụ trang đó để dán. Một số người sẽ lập luận rằng bạn nên chú ý đến những thứ như thế.
Nicolai S,

Tôi không hiểu. Cả trên Linux và Mac OSX, ctrl + O không hoạt động. Nhưng nếu tôi nhấn phím ESCAPE, nó sẽ chuyển sang chế độ lệnh và sau đó shift + I hoạt động.
Donato

51

Bạn có thể vào chế độ chèn bằng I(viết hoa i).

Nó sẽ đặt con trỏ ở đầu dòng.

Tương tự, bạn có thể sử dụng Ađể thêm một cái gì đó vào cuối dòng.

Mặc dù vậy, nó không thực sự giải quyết được vấn đề di chuyển khi đang ở chế độ Chèn.

Tôi vừa kiểm tra trợ giúp về chế độ Chèn, không có tổ hợp phím nào trong chế độ chèn để di chuyển ở đầu dòng.

Ý tưởng khác: Chỉ sửa lại một lệnh mới trong chế độ chèn

inoremap <C-i> <Home>


1
T. <kbd> Tôi </kbd> hoạt động tốt, nhưng tôi đang tìm giải pháp để di chuyển về đầu dòng khi đang ở chế độ chèn.
Valentin Vasilyev

Điều này không trả lời câu hỏi trực tiếp, nhưng cung cấp chức năng có thể đặt trước câu hỏi cho hầu hết mọi người.
Joe Coder

24

Tôi đã ánh xạ Ctrl + a và Ctrl + e đến đầu và cuối dòng, tương ứng. Điều này phù hợp với hành vi của hầu hết các dòng lệnh bash. Hoạt động tốt cho tôi.

inoremap <C-e> <Esc>A
inoremap <C-a> <Esc>I

Nếu tôi không nhầm thì đây cũng là những mấu chốt của hầu hết các biên tập viên khác. Tôi sẽ thêm chúng vào tệp vimrc của mình.
Aaron

2
Đây là những hành vi Emacs thông thường. Hầu hết các trình duyệt cũng hỗ trợ những điều này trong các loại trường văn bản khác nhau. Tôi không nghĩ đây là một ý tưởng tồi, nhưng đây là những gì bạn đang bỏ lỡ: <C-e>sao chép / viết ký tự dưới con trỏ ( <C-y>đối với con trỏ chuột), <C-a>chèn bất cứ thứ gì vào.-Register (dot-register) của bạn. Thanh ghi đó chứa đầy bất cứ thứ gì bạn vừa nhập vào, khi bạn rời khỏi chế độ chèn (ngay cả khi sử dụng Ctrl-c (vì nhiều lý do bạn không nên quen)).
Nicolai S,

@Jonathan Cutrell Làm thế nào để bạn đi đến đầu dòng mới.
sayth

3

Nếu bạn đang sử dụng MacOS Terminal, hãy đi tới Tùy chọn ...> Cài đặt> Bàn phím và ánh xạ phím kết thúc thành Ctrl-O $ (nó được hiển thị là \ 017 $), sau đó sử dụng fn + trái để mô phỏng phím kết thúc. Làm tương tự đối với phím home. Trình tự thoát \ 033 [H cũng hoạt động ở nhà.


1
fn-Left và fn-Phải làm việc theo mặc định đối với tôi trong vim trên mac terminal
Jeff



0

Một phím tắt đã hoạt động đối với tôi (cả trí nhớ cơ bắp và tính trực quan) là lập bản đồ __(kép _) để "chèn vào đầu dòng hiện tại".

Cơ sở lý luận:

  • _ đã đi đến đầu dòng
  • trong vim, nhân đôi bất cứ điều gì là một cách rất phổ biến để làm điều đó "đến dòng này"
  • double _không xung đột với bất kỳ chuyển động nào (bạn đã ở đầu dòng)
  • bàn tay của bạn đã ở đúng vị trí nếu bạn đi đến đầu dòng và bây giờ muốn chèn.

vimscript:

"insert at start of current line by typing in __ (two underscores)
function DoubleUnderscore()
    if v:count == 0 && getcurpos()[2] == 1
        :silent call feedkeys('I', 'n')
    else
        :silent call feedkeys('^', v:count + 'n')
    endif
endfunction
nnoremap <silent> _ :call DoubleUnderscore()<CR>

Điều này phức tạp vì sự thay thế dễ dàng nnoremap __ _Ikhiến vim trì hoãn việc nhấn _để phân biệt giữa ___.



0

tôi sử dụng lệnh này để đi đến cuối dòng mà không thoát khỏi chế độ chèn

inoremap jl <esc><S-a>

Tương tự để chuyển đến đầu dòng sẽ là:

inoremap jl <esc><S-i>
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.