Hành vi lạ VIM F1-10


3

Gần đây tôi bắt đầu gặp phải một hành vi thực sự khó chịu trong VIM:

Bất kể tôi đang ở chế độ chèn hay chế độ bình thường, nếu tôi nhấn một trong các phím F, vim không hoạt động như bình thường:

F1 - inserts a "P"
F2 - inserts a "Q"
F3 - inserts a "R"
F4 - inserts a "S"
F5-10 - inverts case

Khi sử dụng GVim mọi thứ hoạt động như mong đợi. Bất kỳ đề xuất? Tôi đang sử dụng phiên bản 7.3 trên Ubuntu Maverick 10.10. Sử dụng terminator nhưng thay đổi sang terminal mặc định không giúp được gì.


Âm thanh như một thiết lập thiết bị đầu cuối. Bạn có lẽ nên hỏi điều này trên Askubfox.com .
Michael Todd

Câu trả lời:


8

Điều này là do thiết bị đầu cuối chuyển các sự kiện X thành các chuỗi thoát như sau:

<F1> -> ^[OP
<F2> -> ^[OQ
<F3> -> ^[OR
<F4> -> ^[OS
<F5> -> ^[[15~
<F6> -> ^[[17~

và như vậy ( ^[là một nhân vật thoát). Trong một số thiết bị đầu cuối, vim có thể nhận được các chuỗi này từ cơ sở dữ liệu terminfo, nhưng đôi khi cơ sở dữ liệu terminfo không khớp với các ký tự thực sự gửi hoặc không chứa key_f*các mục. Trong trường hợp này, nhấn <F1>sẽ dẫn đến thoát (thoát khỏi chế độ hiện tại trừ khi ở chế độ bình thường), O(ở chế độ bình thường: tạo một dòng mới trước dòng con trỏ và vào chế độ chèn) và một số ký tự được chèn trên dòng mới (và cho <F5>-...Phím ~là lệnh đảo ngược trường hợp). Bạn có thể sửa nó bằng cách đưa vào vimrc một cái gì đó như thế

" Condition should identify terminal in question so "
" that it won't change anything for terminals without this problem "
if !has("gui_running") && $TERM is "xterm"
    for [key, code] in [["<F1>", "\eOP"],
                        \["<F2>", "\eOQ"],
                        \["<F5>", "\e[15~"],
                        \]
        execute "set" key."=".code
    endfor
endif

Nếu mã của bạn khác với mã mà tôi đã sử dụng làm ví dụ, hãy sử dụng <C-v><F1>(trong chế độ chèn hoặc dòng lệnh) để lấy nội dung mà thiết bị đầu cuối của bạn đang gửi (thêm thông tin :h i_CTRL-V).


ồ vâng, đây là giải pháp, bạn đã thực hiện một ngày của tô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.