Chèn lạ từ Vim khi nhấp chuột


5

Tôi đang sử dụng putty (trên windows 7) để kết nối với shell và Vim làm trình chỉnh sửa. Tôi cũng có chuột = một tùy chọn được bật trong Vim, nhưng tôi nhận được một số hành vi lạ (chẳng hạn như chèn ngẫu nhiên các ký tự và / hoặc ngắt dòng) khi tôi nhấp vào bên phải của cửa sổ Vim (giả sử nó giống như 70% + diện tích màn hình nơi nó trở nên kỳ lạ). Tôi đang dần quen với những hành vi như vậy, nhưng tôi thực sự muốn biết liệu tôi có thể khắc phục điều này bằng cách nào đó không.


Cửa sổ của bạn lớn như thế nào, về các ô nhân vật? Giao thức chuột xterm ban đầu do PuTTY triển khai chỉ hỗ trợ tọa độ chuột tối đa là 223.
ak2

Cảm ơn bạn, tôi đã không nhận thức được những hạn chế như vậy. Kích thước cửa sổ được đo theo hàng và cột trong PuTTY, vì vậy sau vài lần thử, tôi đã tìm ra 95 cột là kết hợp hoàn hảo cho giao thức chuột xterm. Bạn có nhớ để lại giải pháp của bạn là câu trả lời để tôi có thể đánh dấu nó là giải pháp tốt nhất không? :)
kK-Storm

Câu trả lời:


7

PuTTY gửi các sự kiện chuột bằng giao thức xterm xuất hiện từ X10 vào giữa những năm tám mươi. Điều này mã hóa tọa độ chuột với một byte cho mỗi hàng và cột, theo đó 32 (mã ASCII cho một ký tự khoảng trắng) được thêm vào. Điều này cho phép tọa độ lên tới 223 (là 255 - 32).

Thật không may, mã hóa không tuân thủ các tiêu chuẩn áp dụng cho các chuỗi điều khiển đầu cuối và phạm vi có thể bị giới hạn hơn nữa đến 95 (tức là 127 - 32) nếu các ứng dụng không thực hiện các khoản phụ cấp đặc biệt cho nó. Cụ thể, nếu một ứng dụng thực hiện giải mã UTF-8 trước khi phân tích trình tự điều khiển, tọa độ chuột ngoài 95 cuối cùng sẽ bị coi là UTF-8 không hợp lệ.

Trong năm qua, một số nỗ lực đã được thực hiện để giải quyết vấn đề này trong xterm. Cách tốt nhất trong số đó là chế độ được gọi là chế độ SGR 1006 được thêm vào trong bản vá # 277 , sử dụng trình tự điều khiển tuân thủ tiêu chuẩn với tọa độ không giới hạn. Hỗ trợ cho việc này sẽ từ từ thấm vào các ứng dụng và trình giả lập thiết bị đầu cuối khác.


1

Điều này đã được sửa trong Vim 7.3.632 . Xem :h sgr-mouse. Hoặc chỉ cần đặt cái này trong ~/.vimrc:

set ttymouse=sgr

Nếu bạn muốn tương thích với các phiên bản chưa mouse_sgrđược biên dịch, hãy sử dụng:

if has("mouse_sgr")
    set ttymouse=sgr
else
    set ttymouse=xterm2
end

Để xem phiên bản Vim của bạn có mouse_sgr, hãy chạy vim --versiontừ dòng lệnh hoặc trong Vim, nhập :versionvà tìm kiếm +mouse_sgr.

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.