Vim di chuyển con trỏ một ký tự trong chế độ chèn mà không có phím mũi tên


8

Điều này có vẻ hơi quá mức, nhưng tôi đã chuyển sang vim và tôi rất hài lòng về quy trình làm việc bây giờ. Tôi cố gắng kỷ luật bản thân không sử dụng các phím mũi tên, vì việc giữ tay trên các phím alfa mọi lúc là một điều lớn lao khi viết. Vì vậy, khi tôi cần điều hướng, tôi thoát khỏi chế độ chèn, di chuyển ở chế độ bình thường và quay lại chế độ chèn.

Có một ngoại lệ khi điều này thực sự gây rối hơn: tôi sử dụng clang completevới đoạn trích và super tabđiều này thật tuyệt. Ngoại trừ mỗi lần tôi nhận được một chức năng tự động hoàn thành sau khi tôi điền các tham số tôi còn lại với con trỏ trước )đó để tiếp tục, tôi phải di chuyển con trỏ một ký tự sang phải. Như bạn có thể tưởng tượng điều này xảy ra rất thường xuyên .

Các lựa chọn duy nhất tôi có (theo như tôi biết) là: Esclahoặc , và tôi không hài lòng về cả hai. Phím đầu tiên khiến tôi nhấn 3 phím chỉ bằng một lần di chuyển con trỏ 1 ký tự đơn giản, phím thứ hai khiến tôi di chuyển tay đến các phím mũi tên. Một lựa chọn thứ ba sẽ là ánh xạ CTRL-Lhoặc smth đến .

Vì vậy, cách tốt nhất để làm điều này là gì?


//snippets (clang complete + supertab):
foo($`param1`, $`param2`)

//after completion:
foo(var1, var2|)
              ^ ^
              | |
     I am here  |
                 Need to be here

| biểu thị vị trí con trỏ


Với vấn đề tương tự, tôi đã kết thúc việc hack kịch bản hoàn thành để làm cho nó không bị đóng lại )nếu có ít nhất một đối số trong hàm. Vì vậy, tôi gõ nó bằng tay. Hữu ích hơn nhiều bây giờ.
Dmitry Frank

Điều gì xảy ra khi bạn gõ )Tôi đặt cược nó bỏ qua mà không thực sự chèn. (Tôi không sử dụng plugin này)
FDinoff

@FDinoff không, nó chỉ chèn một cái khác)
bolov

1
@bolov thật đáng thất vọng. Bạn có thể trích xuất mã thực hiện điều đó từ các cặp tự động . Tôi không biết nếu các plugin sẽ xung đột với chúng. Tùy chọn khác là sử dụng <C-O>lđể thoát sang chế độ bình thường cho 1 lệnh chế độ bình thường.
FDinoff

Câu trả lời:


5

Bản đồ )để bỏ qua hiện tại )nếu đó là dấu ngoặc đơn đóng

inoremap <expr> )  strpart(getline('.'), col('.')-1, 1) == ")" ? "\<Right>" : ")"

Lấy từ: http://vim.wikia.com/wiki/Automatically_append_closes_char character


Câu trả lời cũ

:h i_CTRL-O thực hiện một lệnh, trở về chế độ Chèn.

Ctrl-ol sẽ di chuyển bạn một ký tự sang phải sau đó đưa bạn trở lại chế độ chèn.

Ngoài ra, một số plugin khung cho phép bạn chỉ cần nhập khung đóng )và chúng sẽ ghi đè lên khung hiện có.


1
điều này không hoạt động nếu )là ký tự cuối cùng trên dòng (và điều này xảy ra thường xuyên khi bạn viết mã). CTRL-O atuy nhiên không hoạt động. Vì vậy, tôi đoán chúng tôi đã lưu một khóa. :)
bolov

True del )chỉ có hai ký tự và sẽ luôn đặt bạn sau dấu ngoặc đơn đóng.
Brett Y

bỏ qua ')' hoạt động như một cơ duyên, cảm ơn bạn
bolov

0

Nhập thông tin sau để tìm các phím điều khiển được sử dụng trong chế độ chèn.

:help insert-index

ctrl-b không được sử dụng, nhưng bạn có thể muốn hy sinh một số khóa khác.

imap <c-b> <right>

Điều này hoạt động để di chuyển con trỏ phải một char. Hoặc bản đồ một số char đôi.

imap jj <right>
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.