Vim에서 TMUX를 올바르게 사용하는 방법은 무엇입니까?


19

나는 함께 놀고 노는 방법을 알아 내려고 노력 vim하고 tmux있습니다.

내 문제는 : 내가 사용하는 경우 xterm-256color내가 얻을 vim잘 작동하지만, 배경 제대로 렌더링되지 않습니다.

나는 이것을 사용하여 이것을 고쳤다 screen-256color. 이것은 멋지게 보이지만 Ctrl + arrow keys(삽입 모드로 가서 4 줄을 삭제하십시오). 에서이 탭을 대신 전환하기 위해이 매핑을 사용하고 싶습니다 vim.

어떻게 작동합니까?

답변:


8

cat내부에서 실행 tmux하고 해당 키를 눌러 생성 된 이스케이프 코드를 찾으십시오. 나를 위해이 제공 ^[[D하고 ^[[C. 그런 다음 해당 이스케이프 코드를 직접 매핑하십시오.

nnoremap ^[[D gT
nnoremap ^[[C gt

여기서 ^[이스케이프 문자 인 경우 <CTRL-v><ESC>vim 을 눌러 삽입 할 수 있습니다 .


그것은 내 vim의 행동을 바꾸지 않았습니다.
outsmartin

tmux에서 cat을 시작하고 키를 누르면 인쇄되는 내용은 무엇입니까?
Mika Fischer

^ [[1; 5C 및 ^ [[1; 5D. 좋은 생각입니다, 나는 그것을 얻는 방법을 몰랐습니다. 그냥 해봐 효과가있다! 감사합니다.
outsmartin

큰. 올바른 탈출 코드를 얻는 방법을 통합하기 위해 답변을 편집했습니다.
Mika Fischer

22

최상의 기능을 위해 올바르게 설정해야하는 몇 가지 구성 수준이 있습니다.

  1. 시퀀스를 인식하도록 tmux 를 구성 하십시오. tmux를 시작하기 전에 터미널 에뮬레이터에 적합한 TERM 값을 설정하십시오 (예 :)xterm-256color . 용어 환경 변수에 의해 식별 terminfo 데이터베이스 엔트리가 지시 TMUX 키 화살표 변형에 대한 서열을 인식하는 방법 (사용자 정의 기능 { kUP, kDN, kRIT, kLFT} { 3... 7}).
  2. 시퀀스를 생성하도록 tmux 를 구성 하십시오. tmux 가 TERM이 식별하는 시퀀스를 수신 할 때 자체 xterm 스타일 시퀀스를 생성 하도록 xterm-keyssession 옵션을 설정하십시오 . 당신의 :on~/.tmux.conf

    set-option -g xterm-keys on
    
  3. tmux 내에서 실행중인 프로그램 이 대부분의 시퀀스를 사용 / 예상하도록 구성하십시오 . tmuxscreen 내 에서 기반 TERM을 사용 중인지 확인하십시오 (예 :)screen-256color . 이것은 tmux 내부에서 실행되는 프로그램에게 tmux 의 터미널 (재) 에뮬레이션 을 제어하는 ​​방법 과 tmux 에서 기대할 수있는 응답을 알려줍니다 .
  4. 불행히도, screen기반의 terminfo 데이터베이스 항목은 종종 수정 된 화살표 키에 대한 시퀀스를 정의하지 않으므로 (즉 kUP, 가지고 있지 않을 수도 있음 ), tmux 내에서 실행되는 프로그램 은 이러한 시퀀스를 기대할 수 없습니다. 이 키를 인식하려는 프로그램을 수동으로 구성해야합니다. Vim 에서는 이것을 다음에 넣을 수 있습니다 ~/.vimrc.

    if &term =~ '^screen'
        " tmux will send xterm-style keys when xterm-keys is on
        execute "set <xUp>=\e[1;*A"
        execute "set <xDown>=\e[1;*B"
        execute "set <xRight>=\e[1;*C"
        execute "set <xLeft>=\e[1;*D"
    endif
    

    -variant 를 사용하면 일반 화살표 키가 작동 하지 않는 경우 변형없이 x(예 : 등 <Up>대신) 변형을 사용할 수 있습니다 .<xUp>x

    이와 같이 키를 정의하면 각 수정 자 조합 (Shift, Control, Contol + Shift, Meta, Meta + Shift, Meta + Control, Meta + Control + Shift)을 개별적으로 매핑 할 필요가 없습니다. 는 *모든 관련 시퀀스 (참조 처리 할 수있는 특별한 해석을 얻는다 :help xterm-modifier-keys).

  5. 그런 다음 하드 코딩 된 시퀀스 대신 키를 매핑 할 수 있습니다.

    nnoremap <C-Right> gt
    nnoremap <C-Left> gT
    

1
이봐, 이것은 완벽하게 작동했다!
Pablo Olmos de Aguilera C.

2

여기설명 된대로 tmux 및 GNU 화면에서 Vim을 사용할 때 색상 구성표가 제대로 작동하도록 터미널 옵션 을 지우고 ( Bim 에서 실행 한 다음 + 를 눌러 터미널 표시를 새로 고침 ) BCE ( Background Color Erase )를 비활성화 하십시오 .t_ut:set t_ut=ControlL

이런 식으로 적절한 키 감지에 대한 TERM가치를 유지 xterm-256color하면서 적절한 Vim 색상 구성표 렌더링을 얻을 수 있습니다! :-)


1

set t_Co=256~ / .vimrc의 설정 이 전혀 도움이됩니까? 이것은 색상 설정일 뿐이지 만 일부 문제를 해결하는 데 도움이 될 수 있습니다.

ctrl+Arrow~ / .vimrc 의 키를 다시 매핑 할 수도 있습니다 ...

편집 : ctrl+ArrowGNU 화면 세션에서 시도 했 습니까? 나는 이것이 당신의 문제라고 생각합니다.


그것은 xterm-256color와 함께 화면에서 잘 보이고 작동합니다
outsmartin

세트 t_Co은 = 256 aswell 완료
outsmartin

도움이 되셨습니까?
Sardathrion-복직 모니카

불행하게도. 다시 매핑 Ctrl + 화살표로 정확히 무엇을 의미합니까? 이미 탭을 사용하여 vim에서 탭을 전환했습니다.
outsmartin

map <C-Right> gt
outsmartin
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.