Tại sao cài đặt lại văn bản được chèn trước đó sau khi sử dụng phím mũi tên?


7

Từ trợ giúp :help i_ctrl-a:

CTRL-A      Insert previously inserted text.  {not in Vi}

Giả sử tôi có một bộ đệm trống và tôi đang ở chế độ bình thường.
Tôi gõ iđể đi trong chế độ chèn.
Tôi gõ (), sau đó di chuyển con trỏ một ký tự sang trái bằng cách nhấn <C-h>(mà tôi đã ánh xạ tới <left>trong chế độ chèn), nhập foovà quay lại trong chế độ bình thường bằng cách nhấn thoát.

Bộ đệm chứa: (foo)
Tôi nghĩ, sai, rằng văn bản được chèn trước đó sẽ được (foo)nhưng nó không phải.
Văn bản được chèn trước đó chỉ foocó thể được kiểm tra bằng cách gõ :registers .hoặc nhấn lại <C-a>trong chế độ chèn.

Tại sao nhấn phím mũi tên đặt lại văn bản đã chèn trước đó?
Có cách nào để làm cho thanh ghi dấu chấm lưu trữ tất cả văn bản được chèn vào lần cuối cùng tôi đi trong chế độ chèn ngay cả khi tôi nhấn phím mũi tên không?

Câu trả lời:


6

Trong chế độ chèn, phím mũi tên bên trái thực sự thoát khỏi chế độ chèn, di chuyển con trỏ, sau đó vào lại chế độ chèn. Điều đó phá vỡ sự thay đổi của bạn thành hai thay đổi: chèn ()và chèn foo. Hành vi này được thảo luận dưới

:help ins-special-special

Giải pháp là ánh xạ lại phím mũi tên trái để đưa vào CTRL-G U. Ví dụ trong Hướng dẫn tham khảo Vim rất khó tìm vì nó không được gắn thẻ trực tiếp. Đầu tiên đi đến

:help i_CTRL-G_U

sau đó cuộn xuống 42 dòng để "Một ví dụ cho việc sử dụng CTRL-G U:" Đối với phím mũi tên bên trái, hãy sử dụng ánh xạ này:

inoremap <Left> <C-G>U<Left>

Nó có vẻ hoạt động, nhưng việc hiển thị .thanh ghi bằng :registerslệnh trông có vẻ lạ sau khi thực hiện (foo)ví dụ của bạn . Trên máy Windows của tôi, nó trông như thế này:

".  ()^GU<80>klfoo

1
Cảm ơn rât nhiều ! Điều đó đã làm phiền tôi trong một thời gian dài, và không bao giờ tìm thấy giải pháp. Tôi đã sửa đổi vimrc của tôi với inoremap <C-h> <C-g>U<Left>inoremap <C-l> <C-g>U<Right>giải pháp của bạn hoạt động hoàn hảo! Nhân tiện, trên máy linux của tôi, tôi đã nhận được đầu ra kỳ lạ giống như bạn cho :registerslệnh, vì vậy nó không đến từ windows.
saginaw

2
<c-g>Uđi kèm với một bản vá gần đây. Điều đó có thể giải thích tại sao bạn bỏ lỡ nó cho đến nay.
Luc Hermitte

Bạn có nghĩ rằng có một cách để làm cho nó hoạt động với Ctrl + Phải / Trái không? Tôi đã thử ánh xạ tương tự nhưng dường như chúng không hoạt động.
Patryk Czachurski
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.