Tmux는 삽입과 교대 삽입을 구별할 수 없습니다.

Tmux는 삽입과 교대 삽입을 구별할 수 없습니다.

Insertxterm에 있을 때, 주어진 ^[[2~and,

Shift+ Insert주어진^[[2;1~

tmux를 시작할 때까지는 괜찮습니다.

$TERM변수는 변경되지 않은 상태 로 유지되므로 이 문제는 terminfo와 관련되어서는 안 됩니다.

xterm에 있을 때 Tmux는 InsertShift+를 구별할 수 없으며 Insert둘 다 로 읽혀집니다 ^[[2~. xterm뿐만 아니라 가상 콘솔에서 시작된 tmux도 동일한 동작을 나타냅니다.

나는 성공하지 못한 채 tmux conf 파일을 사용하거나 사용하지 않고 시도했습니다 set -g xterm-keys on. FWIW 저는 XTerm(296)에서 tmux 1.8을 실행하고 있으며 이것이 제가 재정의한 것입니다..Xresources

XTerm*VT100.Translations: #override \
Shift<Key>Insert: string("\033[2;1~") \n\
<Key>Insert: string("\033[2~")

vim에서 Shift+를 매핑하고 싶지만 Inserttmux에서는 할 수 없기 때문에 이것은 정말 고통스럽습니다.

흥미롭게도 동일한 xterm에서 GNU 화면을 실행하면 +를 쉽게 구별할 InsertShift있습니다 Insert. 나는 이것이 내 설정이 아니라 tmux의 일부 악이라고 믿기 시작했습니다.

xterm이 키를 중간에 손상시키지 않고 키를 가져오는 것처럼 tmux가 키를 투명하게 가져오는 방법을 아는 사람이 있습니까? 아니면 제가 뭔가 잘못하고 있는 걸까요?

답변1

의 가치는 TERM중요하지 않습니다. 제가 에서 지적했듯이tmux가 ctrl-shift-화살표 시퀀스를 올바르게 전달하지 않습니다.에는 tmux알고 있는 특별한 xterm 스타일 키 테이블이 있습니다. 이 경우 xterm_keys_table테이블에 삽입할 항목이 있습니다.

    { KEYC_IC,      "\033[2;_~" },

이는 일반적으로 밑줄이 있는 인수의 변형을 "_"동일한 값으로 변환한다는 것을 의미합니다.

\033[2;2~
\033[2;3~
\033[2;4~
\033[2;5~
\033[2;6~
\033[2;7~
\033[2;8~

이 설정을 변경하는 방법은 다음과 같습니다 xterm-keys.

xterm-keys [위|나가기]
이 옵션이 설정되면 tmuxxterm(1) 스타일의 기능 키 시퀀스가 ​​생성됩니다. 여기에는 수정자를 나타내는 숫자가 포함됩니다.옮기다,대리자또는제어 키. 기본값은떠나다.

옵션을 켜면존재하다, tmux해당 패턴과 일치하는 특수 키는 변경되지 않고 전달됩니다.

set-option -gw xterm-keys on

1그러나 tmux의 소스 코드에는 이 내용이 언급되어 있지 않다는 것을 알 수 있습니다 . 키를 읽을 때 tmux(무엇을 할지 결정하기 전에) 수정자를 저장합니다. 1수정자가 있는 것과 수정자가 없는 것을 전혀 구별할 수 없습니다 . xterm둘 사이의 차이점을 알 수 있는 방법이 없기 때문에 이는 의미가 있습니다 .

어쨌든 xterm은 일반적으로 전송하지 않습니다아무것Shift 삽입 키용. 이 작업을 수행하기 위해 리소스를 사용하도록 강제할 수 있지만 translations상황에 따라xterm 매뉴얼, Shift 삽입을 사용하면 선택한 텍스트가 삽입됩니다(예:반죽):

Shift <KeyPress> Insert:insert-selection(SELECT, CUT_BUFFER0) \n\

관련 정보