Sửa các phím mũi tên hiển thị A, B, C, D trong vi (không phải trong vim)


16

Tôi biết rằng trong vim tôi có thể thêm

set nocompatible

trong .vimrcđể tránh rằng phím mũi tên hiển thị A, B, C, D trong chế độ chèn.

Nhưng tôi đang sử dụng vi Phiên bản 4.0 (gritter) 25/12/2016 .

Làm thế nào tôi có thể có được hành vi tương tự?

== CHỈNH SỬA == (1)

Tôi đang sử dụng phiên bản vi từ Arch Linux , được xây dựng từ kho CVS này (lần cam kết cuối cùng vào ngày 24 tháng 2 năm 2007) với lệnh sau:

make PREFIX=/usr LIBEXECDIR=/usr/lib/ex PRESERVEDIR=/var/lib/ex \
TERMLIB=ncurses FEATURES="-DCHDIR -DFASTTAG -DUCVISUAL -DMB -DBIT8"

và với ba bản vá: fix-ốngize-short-overflow.patch , navkeys.patchreserved-dir.patch .

== CHỈNH SỬA (2) ==

Các sự cố xảy ra trong LXTerminal 0.2.0 , Termite 10-1 , Tilda 1.2.4-1 , Terminator 0.98-1xterm 320-2 nhưng không có trong urxvt v9.21 cũng như trong các máy chơi game ảo Linux.

== CHỈNH SỬA (3) ==

Theo đơn Unix Specification trái mũi tên, mũi tên xuống, phải mũi tên, mũi tên lên tương ứng với lần lượt các capname sau: kcub1, kcud1, kcuf1kcuu1. So sánh các mục terminfo từ xtermrxvt-unicode-256colorcho các capterms này cho:

$ infocmp xterm rxvt-unicode-256color | grep -E 'kcuf1|kcub1|kcud1|kcuu1'

kcub1: '\EOD', '\E[D'.
kcud1: '\EOB', '\E[B'.
kcuf1: '\EOC', '\E[C'.
kcuu1: '\EOA', '\E[A'.

Sửa đổi xterm terminfo nhập bằng substituing '\EOD', '\EOB', '\EOC', '\EOA' bởi '\E[D', '\E[B', '\E[C', '\E[A'nên giải quyết vấn đề nhưng nó là một ý tưởng tốt? Có lẽ nó sẽ phá vỡ các chương trình sử dụng phím mũi tên khác?


2
Tôi nghĩ điều này là do vi (m) <-> tương tác đầu cuối, do đó bạn cũng có thể thử một số cách giải quyết / cấu hình liên quan đến thiết bị đầu cuối.
VanLaser

1
Dịch những gì @VanLaser đã nói ở trên: mục nhập của bạn cho hiện tại TERMtrong cơ sở dữ liệu termcaphoặc terminfokhông đồng bộ với các mã được tạo bởi bàn phím. Giải pháp không phải là thay đổi TERM, mà là tìm hiểu xem liệu bạn vicó được liên kết với termcaphoặc terminfotìm mã khóa được phát ra từ bàn phím không và sửa cơ sở dữ liệu tương ứng. Khiếu nại với sysadmin cũng có thể làm việc.
Sato Katsura

1
Tôi đã nói tất cả những điều đó? Đôi khi tôi ngạc nhiên :) (tất nhiên, tất cả những gì tôi biết là nó liên quan đến thiết bị đầu cuối).
VanLaser

1
Phiên bản vi này được xây dựng với ncurses, sau đó nên sử dụng terminfo.
Ortomala Lokni

2
Bạn đã thấy những lời khuyên này ? Có lẽ một cái gì đó trong số họ có thể hữu ích.
Boris Serebrov

Câu trả lời:


2

Bạn có thể tạo một bí danh đặt $TERMbiến của bạn

alias vi='TERM=rxvt-unicode-256color vi'

Thêm nó vào tập tin RC của shell của bạn và nó sẽ được xác định cho mọi thiết bị đầu cuối bạn khởi chạy.


Trên hệ thống của tôi, điều này sẽ làm cho Vi rời khỏi chế độ chèn (có lẽ tốt hơn là để nó in rác, nhưng vẫn không khắc phục được vấn đề).
Martin Tournoij

1

Đôi khi hành vi như vậy có thể xảy ra do thiết lập ánh xạ khóa bất thường trong bạn .vimrc- vì vậy, ví dụ nếu bạn có thứ gì đó ánh xạ hai lần ESCnhấn phím:

nmap <Esc><Esc> some_command_sequence

Sau đó, nó có thể dẫn đến trục trặc vim với các phím mũi tên.


Cấu hình được mô tả bởi OP khá cụ thể và nó hiển thị hành vi mà không có ánh xạ như vậy. (Tôi đã kiểm tra nó.)
Giàu
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.