그놈 터미널 + Vim 및 Ctrl-Shift 매핑 키를 인식하지

그놈 터미널에서 CtrlShift로 시퀀스를 매핑 할 수 있습니까?

매핑을 추가하려고합니다.

  • map <C-S-[> gT
  • map <C-S-]> gt

작동하지 않습니다. 그렇게하는 방법?

어떻게 든 내가 매핑 <C-S-]>하지만, 그렇지 않은 밝혀졌다 <C-S-]>, 그러나 <C-]>그것은이 순서의 Shift 키를 인식하지 못하는 것 같습니다, 그래서. 잘못 구성되었거나 그놈 터미널의 결함입니까?

게다가. <C-[>을 누르면 매핑이 vim이 기다리는 것처럼 보입니다. 매핑 시간 초과라고 가정하지만 정확하게 눌렀을 때이 시간 초과를 제거하는 방법은 <C-[>무엇입니까?

방금 vim을 배우기 시작했기 때문에 매핑에 분명히 잘못된 것이 있으면 죄송합니다.



답변

여기서 문제는 터미널에서 실행될 것으로 예상되는 CTRL-SHIFT 시퀀스를 인식하기 위해 vim을 얻으려고한다는 것입니다. X는 이러한 조합을 인식 할 수 있지만 터미널 (또는 요즘 터미널 에뮬레이터)에서 실행되는 응용 프로그램은 인식 할 수 없습니다. 역사적으로 터미널은 직렬 연결을 통해 ASCII 데이터의 7 비트 또는 8 비트 시퀀스 만 보내고받을 수 있기 때문입니다 (단, 커서를 배치하거나 줄을 스크롤 또는 삭제하고 색상을 변경하는 등의 “이스케이프 시퀀스”가 포함될 수 있음) 효과).

ASCII 문자 집합에는 친숙한 CTRL-A부터 CTRL-Z까지 32 개의 “제어 코드”가 있습니다. 그러나 “CTRL-SHIFT”A부터 Z까지의 해당 ASCII 코드는 없습니다. 이제 그놈 터미널 자체가 이러한 코드를 인식 할 수 있지만 (예 : CTRL-SHIFT-V는 클립 보드의 텍스트를 붙여 넣습니다) vim은 그렇지 않습니다. 직접 액세스 할 수 있습니다.

물론 터미널 에뮬레이터가 CTRL-SHIFT 키 누름을 이스케이프 시퀀스로 변환하여 vim 매핑으로 인식 할 수 있도록 설정할 수 있습니다.

=======

최신 정보

터미널 프로그램이 아닌 X 프로그램으로 실행되는 vim의 그래픽 버전 인 gvim에 관심이있을 수 있습니다. 아마도 gvim이 CTRL-SHIFT 코드를 이해할 수 있을까요?


답변

그놈 터미널에서 Ctrl키 와의 특정 조합을 허용하지 않는 문제인 것 같습니다 . 온라인 검색은 많은 경우를 보여줍니다.

모르는 경우를 대비하여 Ctrl+ page up/ page down탭을 순환합니다.


답변

Bartleby가 지적했듯이 이것은 vi가 키 코드가 동일한 것으로 간주하기 때문에 터미널 제한입니다.

같은 터미널의 경우 xterm변경할 수 있습니다. 들어 gnome-terminal 이는 X 자원 설정을 무시 나는 다음을 수행하는 방법을 모르는를 :

SO 질문 은 같은 주제를 다루며, 이 예.Xresources파일 에서 여러 키를 매핑하는 데 사용되는 것을 보여줍니다 . 예 :

XTerm*vt100.translations: #override \
  Ctrl ~Meta Shift <Key>a: string(0x1b) string("[65;5u") \n\
  Ctrl ~Meta Shift <Key>b: string(0x1b) string("[66;5u") \n\
  Ctrl ~Meta Shift <Key>f: string(0x1b) string("[70;5u")

이제 우리는 다른 키 시퀀스에 대한 VI에 들어오는이 CtrlaCtrlShifta, CtrlbCtrlShiftb, CtrlfCtrlShiftf.

이제 다음과 같이 다르게 매핑 할 수 있습니다 ~/.vimrc.

map <ESC>[66;5u   :echo "ctrl-shift-b received"<CR>
map <ESC>[70;5u   :echo "ctrl-shift-f received"<CR>
map <C-b>         :echo "ctrl-b received"<CR>
map <C-f>         :echo "ctrl-f received"<CR>


답변

gnome-terminal에서 모든 키보드 단축키를 비활성화해야합니다.


답변

gnome-terminal키로 생성 된 이스케이프 시퀀스 에서는 구성 할 수 없습니다. 많은 키에서 Ctrl+ keyShift+ Ctrl+ key는 다른 시퀀스를 생성합니다. 불행히도에 대한 [그리고 ]당신이 그들을 구별 할 수 있도록 그들은하지 않습니다.


답변