문맥
저는 약 1년 동안 Linux(파워) 사용자였습니다. 나는 대부분의 문제를 스스로 해결하는 방법을 배웠고 작업 흐름에 도움이 되는 많은 스크립트를 작성했습니다. 특히 자주 수행하는 작업을 완료하기 위해 많은 단축키를 사용하는 방법을 배웠습니다. 여기서 문제가 시작됩니다.
질문
"ctrl+Tab"을 사용하여 Tmux 세션에서 다음 창으로 전환하고 "ctrl+shift+Tab"을 사용하여 이전 창으로 다시 전환할 수 있기를 원합니다.아니요접두사(ctrl+b)를 사용하세요. ~/.tmux.conf에 설정한 바인딩은 다음과 같습니다.
bind-key -n C-Tab next-window
bind-key -n C-S-Tab previous-window
그것이 허용되는 답변이기 때문에 작동해야합니다https://stackoverflow.com/a/15471269/5273299. (차이점은 "-n"이 다음 바인딩에서 작동하는 것으로 입증되었다는 것입니다.
# Remap window navigation to vim-like keys
bind -n C-h select-pane -L
bind -n C-j select-pane -D
bind -n C-k select-pane -U
bind -n C-l select-pane -R
어디를 봐야할지 모르겠습니다. 내 관찰에 따르면 tmux는 "ctrl+shift"를 매핑된 단축키로 인식하지 못합니다. 대신 "tab"이 vim(해당 터미널 인스턴스에서 VIM을 열 때)으로 전달되거나 기본 명령 셸인 Fish에서 "full"로 전달됩니다.
체계
나는 뛰고있어https://solus-project.com/내 Linux 배포판 - 데스크탑 환경 GNOME과 함께 설치되었지만 i3-wm을 내 창 관리자로 설치하고 사용했습니다. 내 터미널 에뮬레이터는 xrvt-unicode(urxvt)입니다. 이전에 설명한 대로 Shell FISH를 사용합니다.
분명한 질문은 tmux가 ctrl+shift를 해석하지 못하는 이유를 아는 사람이 있습니까? 보다 일반적인 해결책으로, 이러한 모든 단축 해석기 간의 해석 수준에 대한 일반적인 개요를 얻을 수 있는 방법을 아는 사람이 있습니까?
예를 들어:
- 첫 번째 - 키가 하드웨어 키보드에서 X11 서버로 전송됩니다.
- 그런 다음 X11부터 CTRL+Tab이 아무 것도 매핑되지 않으면 i3으로 전송됩니다.
- 그런 다음 i3부터 CTRL+Tab이 아무 것도 매핑되지 않으면 urxvt로 전송됩니다.
- 그럼 기다리세요.
단축키가 해석되지 않는 부분과 이를 해결하는 방법을 알고 싶습니다.
미리 감사드립니다!
답변1
터미널에서 실행 중인 프로그램으로 키를 보내기 위한 알려진 표현/이스케이프가 없기 때문에 터미널 에뮬레이터가 키를 "먹고" 있습니다.
Shift-Tab은 일반적으로 "\e[Z"(kcbt/kB/back-tab 키, terminfo(5) 참조)에 매핑됩니다. 이는 tmux가 Shift-Tab 및 Control-Shift-Tab에 대해 보는 것입니다. 문제는 tmux가 (분명히) 임의의 키 시퀀스를 명령에 바인딩할 수 없기 때문에 "표준" 키만 알고 있다는 것입니다.
이를 염두에 두고 Control-Tab 및 Control-Shift-Tab을 "Control-b n" 및 "Control-b p"(tmux의 다음/이전 창에 대한 기본 키)로 다시 매핑하도록 urxvt를 구성할 수 있습니다.
$ cat | xrdb -override
URxvt.keysym.ISO_Left_Tab: string:\002n
URxvt.keysym.Control-ISO_Left_Tab: string:\002p
! disable the built-in control-shift
URxvt.iso14755:false
^D
"\002"는 ^B 또는 Control-b입니다. tmux에서 다른 키 접두사를 사용하는 경우 이를 변경해야 합니다(예: ^A의 경우 "\001").
또한 X 서버에서는 Shift-Tab이아니요ISO_Left_Tab에 매핑합니다. xev(1)를 사용하여 실제로 보내는 키를 확인합니다.
작동한다면 ~/.Xresources
--에 다음 행을 추가하고 파일이 X 세션 스크립트에서 로드되었는지 확인하세요(최신 데스크탑에는 이것이 없을 수도 있습니다!).