Hoàn thành Vim - luôn chặn dòng mới sau khi tôi chọn đề xuất bằng phím Enter


11

Đôi khi, sau khi tôi chọn một đề xuất (từ cửa sổ bật lên hoàn thành xuất hiện khi nhấn Ctrl-N) bằng phím Enter, Vim sẽ chèn một dòng mới và con trỏ sẽ được chuyển sang dòng sau. Điều này không phải lúc nào cũng xảy ra - có vẻ như Vim cố gắng thông minh về nó và sẽ chỉ đưa tôi đến dòng tiếp theo nếu nó nghĩ rằng đây là điều tôi muốn.

Tuy nhiên, tôi muốn vô hiệu hóa hành vi này (vì nó không phải lúc nào cũng thông minh) để tôi luôn phải tự mình chuyển sang dòng tiếp theo bằng cách nhấn thủ công phím Enter. Điều này có thể không?

Câu trả lời:


14

Những gì Vim làm để đáp lại việc bạn gõ phím <Enter> trong khi sử dụng hoàn thành chèn tùy thuộc vào trạng thái của menu hoàn thành. Hành vi của menu được mô tả ở đây:

:help ins-completion-menu

và hành vi của các khóa khác nhau khi sử dụng hoàn thành chèn được mô tả trong phần tiếp theo,

:help popupmenu-keys

trong đó nó giải thích rằng hành vi của phím <Enter> phụ thuộc vào trạng thái menu. Theo tôi hiểu, nhập <Enter> sẽ chèn một dòng mới ngoại trừ trong trường hợp bạn đã chọn một kết quả khớp từ menu bằng các phím con trỏ.

Cách tốt nhất để tránh chèn một dòng mới khi bạn không muốn là chấm dứt hoặc thực hiện lựa chọn bằng một số phím khác như Ctrl-Y hoặc Ctrl-E.

Xem thêm

:help complete_CTRL-Y

và cho toàn bộ mô tả nếu hoàn thành chế độ chèn,

:help ins-completion

4

Bạn có thể thêm ánh xạ này vào tệp .vimrc của mình:

inoremap <expr> <CR> pumvisible() ? "\<C-Y>" : "\<CR>"

Nó sẽ ánh xạ phím quay lại trong chế độ chèn vào đầu vào CTRL-Y khi menu bật lên hiển thị. CTRL-Y chọn mục hiện được chọn trong menu mà không cần nhập dòng mới. Nếu không, nó sẽ làm cho phím trở lại hoạt động như bình thường.


1
Bạn có thể giải thích mã này làm gì và cách giải quyết vấn đề do OP đưa ra không? Mã không giải thích được có thể xuất hiện không đáng tin cậy và nguy hiểm cho người dùng.
bwDraco 16/07/2015

0

Tôi đã thêm nó vào .vimrc và bây giờ nó hoạt động như tôi muốn:

noremap pumvisible ()? "\": ""

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.