tmux 복사 모드-텍스트 블록 선택


39

vi 키와 함께 tmux를 사용하고 있으며 한 줄의 텍스트를 선택하거나 한 개의 창만있는 경우 복사 / 붙여 넣기가 제대로 작동합니다. 텍스트 블록 (여러 줄이지 만 전체 너비가 아님)을 선택하려고하면 문제가 발생합니다. vim 창이 여러 개 열려 있으면 모든 창에서 텍스트를 선택하게되며 필요한 것은 한 창에서만 텍스트를 선택하는 것입니다. 즉, vim의 시각적 선택과 같습니다.

이것이 가능합니까?


tmux에서 Vi 키 바인딩을 어떻게 활성화합니까?
romainl

~ / .tmux.conf에 "set-window-option -g mode-keys vi"추가
Srećko Toroman

1
시각적 블록 모드를 사용하는 것에 대한 답변이 귀하의 질문에 미치지 못하는 것 같습니다- "여러 줄이지 만 전체 너비는 아닙니다"도 내가 찾고있는 것입니다. 당신은 당신의 자신의 해결책을 찾았습니까?
dmonopoly

아직 해결책이 없습니다.
Srećko Toroman

실제로 해결책이 있습니다.
Srećko Toroman

답변:


46

이 게시물의 하단에서 .tmux.conf 파일로 이동해야하는 바인딩이 있는지 확인하십시오.

접두사 키가 Ca라고 가정합니다.

  • Ca 의미 : Ctrl+를 누르십시오A
  • Ca [의미 : Ctrl+ A를 누른 다음[

tmux에서 (1,1)에서 (2,2)까지 텍스트를 사각형으로 선택 하려면 :

  • 복사 모드로 이동하십시오. Ca [
  • 선의 중간을 이동
  • Cv를 누르십시오
  • 보도 공간
  • jkhl로 선택 영역 이동
  • 선택에 만족하면 Enter 키를 누르십시오 (또는 conf 파일에 바인딩이 있으면 y를 누르십시오).
  • 최신 복사 버퍼를 다음과 같이 붙여 넣을 수 있습니다. Ca]

space사각형을 선택하려면를 눌러야 합니다.

일반적으로 행을 선택하려면 복사 모드로 이동하고 v를 누르고 jkhl 키로 선택한 다음 y를 누르십시오.

내 .tmux.conf에 이러한 바인딩이 있습니다.

버전 2.4 이전 (2017 년 4 월 20 일) :

setw -g mode-keys vi
bind-key -t vi-copy 'v' begin-selection     # Begin selection in copy mode.
bind-key -t vi-copy 'C-v' rectangle-toggle  # Begin selection in copy mode.
bind-key -t vi-copy 'y' copy-selection      # Yank selection in copy mode.

버전 2.4 이후 :

setw -g mode-keys vi
bind-key -T copy-mode-vi 'v' send -X begin-selection     # Begin selection in copy mode.
bind-key -T copy-mode-vi 'C-v' send -X rectangle-toggle  # Begin selection in copy mode.
bind-key -T copy-mode-vi 'y' send -X copy-selection      # Yank selection in copy mode.

기본 사각형 토글 바인딩을 바인드 해제하는 것이 중요합니다.

unbind-key -t vi-copy v  # Prior to version 2.4
unbind-key -T copy-mode-vi v

그렇지 않으면 새로운 'Cv'바인딩이 작동하지 않습니다.

참고 : .tmux.conf여러 버전에서 작동 하는 단일 기능 을 사용하려면 이 질문을 참조하십시오 .


1
정말 고맙습니다. 강조는 tmux.conf에 있습니다. 처음에는 bind-key -t vi-copy 'Cv'직사각형 토글을 포함하도록 답변을 편집 할 수 있습니다.
Srećko Toroman

원래 질문은 "mode-keys vi"로 사각형 선택을 얻는 방법을 묻습니다. 이 질문에 답하기 위해 키를 다시 바인딩 할 필요는 없습니다. 다른 답변을보십시오; 선택 모드에서 "v"와 "space"일뿐입니다.
Lqueryvg

이것은 jkhl이 작동하지 않는다는 사실 외에 작동합니다. 화살표 키를 사용하여 움직여야합니다.이를 바꿀 수있는 방법이 있습니까?
최대

차이 무엇 sendsend-keys. 나는에서 볼 superuser.com/questions/196060/selecting-text-in-tmux-copy-mode send-key 사용된다. 따옴표도 중요합니까?
user2442366

15

선택 v을 시작하기 전에 vi와 같은 시각적 블록을 선택할 수 있습니다 . 맨 페이지에서는이를 "사각형 토글"이라고합니다.


2
정확히 내가 사용하는 것입니다. 그러나 그것은 위에서 설명한 문제가 있습니다. 사각형은 항상 전체 너비입니다. 나는 VIM과 같은 사각형이 필요합니다 (x1, y1)-(x2, y2) :)
Srećko Toroman

1
@ Srećko Toroman 당신은 전체 폭과 정확히 무엇을 의미합니까?
gitaarik

9

Lars가 지적했듯이 v실제로 사각형 모드와 전체 라인 선택 모드 사이를 전환하여 원하는 것을 수행합니다. space그리고 enter그것을 새로운 선택을 시작하고 복사 각각 사용된다. 접두사를 사용하여 복사 모드를 [시작한 다음 복사 한 선택을 사용하여 tmux 창에 붙여 넣습니다.]

선택을 시작하기 위해 tmux에서 v와 같이 vim의 기능 때문에 혼란 스럽습니다 space.

:list-keys -t vi-copytmux에서 발행 하면 전체 명령 테이블이 복사 모드로 표시됩니다.

bind-key -t vi-copy    C-b page-up                                                      
bind-key -t vi-copy    C-c cancel
bind-key -t vi-copy    C-e scroll-down
bind-key -t vi-copy    C-f page-down
bind-key -t vi-copy    C-h cursor-left
bind-key -t vi-copy  Enter copy-selection
bind-key -t vi-copy    C-y scroll-up
bind-key -t vi-copy Escape clear-selection
bind-key -t vi-copy  Space begin-selection
bind-key -t vi-copy      $ end-of-line
bind-key -t vi-copy      , jump-reverse
bind-key -t vi-copy      / search-forward
bind-key -t vi-copy      0 start-of-line
bind-key -t vi-copy      1 start-number-prefix
bind-key -t vi-copy      2 start-number-prefix
bind-key -t vi-copy      3 start-number-prefix
bind-key -t vi-copy      4 start-number-prefix
bind-key -t vi-copy      5 start-number-prefix
bind-key -t vi-copy      6 start-number-prefix
bind-key -t vi-copy      7 start-number-prefix
bind-key -t vi-copy      8 start-number-prefix
bind-key -t vi-copy      9 start-number-prefix
bind-key -t vi-copy      : goto-line
bind-key -t vi-copy      ; jump-again
bind-key -t vi-copy      ? search-backward
bind-key -t vi-copy      B previous-space
bind-key -t vi-copy      D copy-end-of-line
bind-key -t vi-copy      E next-space-end
bind-key -t vi-copy      F jump-backward
bind-key -t vi-copy      G history-bottom
bind-key -t vi-copy      H top-line
bind-key -t vi-copy      J scroll-down
bind-key -t vi-copy      K scroll-up
bind-key -t vi-copy      L bottom-line
bind-key -t vi-copy      M middle-line
bind-key -t vi-copy      N search-reverse
bind-key -t vi-copy      T jump-to-backward
bind-key -t vi-copy      W next-space
bind-key -t vi-copy      ^ back-to-indentation
bind-key -t vi-copy      b previous-word
bind-key -t vi-copy      e next-word-end
bind-key -t vi-copy      f jump-forward
bind-key -t vi-copy      g history-top
bind-key -t vi-copy      h cursor-left
bind-key -t vi-copy      j cursor-down
bind-key -t vi-copy      k cursor-up
bind-key -t vi-copy      l cursor-right
bind-key -t vi-copy      n search-again
bind-key -t vi-copy      q cancel
bind-key -t vi-copy      t jump-to-forward
bind-key -t vi-copy      v rectangle-toggle
bind-key -t vi-copy      w next-word
bind-key -t vi-copy BSpace cursor-left
bind-key -t vi-copy  NPage page-down
bind-key -t vi-copy  PPage page-up
bind-key -t vi-copy     Up cursor-up
bind-key -t vi-copy   Down cursor-down
bind-key -t vi-copy   Left cursor-left
bind-key -t vi-copy  Right cursor-right
bind-key -t vi-copy   C-Up scroll-up
bind-key -t vi-copy C-Down scroll-down

나는 다시는 얻지 못한다. 세로 분할이있는 Vim 창이 주어지면 첫 번째 분할에서만 사각형을 어떻게 선택합니까? 여기서 여러 줄 사각형은 항상 전체 Tmux 창을 래핑합니다. Vim 블록 선택과 다릅니다. tmux 1.5를 사용하고 있습니다. 버전에 따라 다를 수 있습니까?
Srećko Toroman

예, 여기서 v는 시작 선택에 매핑됩니다. 사각형 토글은 정의되어 있지 않습니다. 둘 다 옳은 것 같아 내 고객을 업데이트해야합니까?
Srećko Toroman

단일 tmux 창에서 스플릿 vim 창이 열려 있으면 vim의 k 크 및 붙여 넣기 기능을 사용할 수 없습니까? 반면에 각각 자체 vim 창이있는 두 개의 tmux 창이있는 경우 tmux 선택 / 복사가 창 가장자리를 감쌀 수 있어야합니다. 저는 tmux 1.7을 사용하고 있습니다
여기

6

다른 답변 중 어느 것도 문제에 대한 최적의 해결책을 제시하지 못하기 때문에 나는 괴로움의 위가 아닙니다.

스페이스를 누르지 않고 Vim에서와 같은 방식으로 블록 선택을 수행 할 수있는 방법이 있습니다. 근육 기억에 뿌리를 둔 간단한 Ctrl-V.
.tmux.conf를 편집해야하지만 (vi-mode를 사용하면 이미 그렇게합니다) tmux <2.4에서 작동하는지 확실하지 않습니다.

이것을 .tmux.conf에 추가하여 Vim 선택 및 yank 바인딩을 복제하십시오.

# set vi-mode
set-window-option -g mode-keys vi
# keybindings
bind-key -T copy-mode-vi v send-keys -X begin-selection
bind-key -T copy-mode-vi C-v send-keys -X rectangle-toggle \; send -X begin-selection
bind-key -T copy-mode-vi y send-keys -X copy-selection-and-cancel
# comment the preceding line and uncomment the following to yank to X clipboard
# bind-key -T copy-mode-vi y send-keys -X copy-pipe-and-cancel "xclip -in -selection clipboard"

선택 모드를 시작하고 선택을 시작하려는 위치로 이동하십시오. 이제 v규칙적인 (문자 별, 줄 단위) 선택을 <C-v>시작하고 블록 선택을 시작하고 V(shift-v)는 행 선택을 시작합니다. 선택 유형에 관계없이 ytmux 페이스트 버퍼로 넘어갑니다 (또는 X 클립 보드, 위의 코드 주석 참조).

Vim과 동일합니다.


나를 위해 일하고, 당신의 necoancy쪽으로 공감대를 가지십시오 👏👏👏
mahemoff

2

편집 : 소스 코드를 확인한 후 답변을 완전히 다시 작성했습니다.

나는 이것이 이것이 효과가 없기 때문에 이것이 가능하지 않다고 생각했지만, 다른 대답은 v이것에 대한 올바른 열쇠가되는 것에 대해서는 맞지만, 특히 vim에 익숙한 경우 이것을 사용하는 방법은 분명하지 않습니다.

또한 v구속력이 있었기 때문에 나에게는 효과가 없을 것입니다. 나는 begin-selection이 아이디어를 다른 곳에서 맹목적으로 복사하여 캐릭터 현명한 선택을 시작하는 vim 방법을 모방해야합니다. 블록 선택.

$ tmux -V
tmux 1.9a
$ tmux list-keys -t vi-copy  | grep " v "
bind-key -t vi-copy      v begin-selection     # suppressed my block selection mode

일단이 바인딩을 제거하면 (내 줄을 주석 처리하고 .tmux.conftmux를 다시 시작하여) 작동하기 시작했지만 vim과 동일하지 않기 때문에 여전히 혼란 스럽습니다.

기본 바인딩을 사용하면 다음과 같이 작동합니다.

  1. setw -g mode-keys vi에서 tmux를 실행하고 있는지 확인하십시오 .tmux.conf.
  2. C-a [복사 모드를 시작하려면 입력
  3. 선택을 시작하려는 위치로 커서를 이동
  4. 유형 v
  5. Space선택을 시작하려면 입력
  6. 커서를 움직이면 사각형 선택이 나타납니다
  7. v다시 누르면 선택이 문자 별 선택으로 또는 그 반대로 전환 될 수 있습니다.

v를 누르기 전에 를 입력 할 필요는 없습니다 Space. Space먼저 문자 별 선택을 시작한 다음을 눌러 v사각형 선택 모드로 전환 할 수 있습니다.

그것은 상당히 다르다 정력에 있다는 점에서 TMUX 두 개의 문자를 입력 할 수 있습니다 Spacev직사각형 선택 모드에 들어갈. vim에서는을 입력하기 만하면됩니다 Ctrl-V.

또한 vim에서 v블록이 아닌 문자 별 선택을 시작합니다.

안타깝게도 tmux ( Shift-vvim) 에는 줄 단위 선택 모드가없는 것 같습니다 .
편집 : Tmux 버전 2.0이 라인 단위 선택 모드를 제공하는 것 같습니다 Shift-v(아직 시도하지 않았습니다!)


"v"를 누르면 라인을 선택할 수 있습니다. 공간이 필요 없습니다.
Amir H. Sadoughi

1
@ AmirH.Sadoughi, 그것은 당신의 대답에 따라 기본값을 변경하고 "space"대신에 선택을 시작하기 위해 "v"를 바인딩했기 때문입니다. 빈 .tmux.conf로 시작하면 내가 설명하는 동작이 올바른 것입니다. 선택을 시작하려면 "space"를 눌러야합니다.
Lqueryvg 2009 년

1
수정 해 주셔서 감사합니다. 마지막 문장 (라인 단위 선택에 대해)을 해결하기 위해 구성에서 cv-space로 블록 선택을 수행 할 수 있고 v로 행 선택을 수행 할 수 있다고 말하려고했습니다. "로 줄을 선택할 수 있습니다.
Amir H. Sadoughi

선 선택이 최근 ( Shift-v2015 년 3 월 2.0 릴리스) 최근 Tmux에만 추가 되었기 때문에 믿기 어려울 것입니다. 아마도 당신과 나는 선 선택에 대해 이야기 할 때 두 가지 다른 것에 대해 이야기하고 있습니다. VIM의 3 가지 선택 모드 ( v, Shift-vCtrl-v) 와 비교하십시오 .
Lqueryvg

당신 말이 맞아, 방금 테스트 했어 나의 v선택은 현명하다. 나는 버전 1.9a에 있으며 vim과 같은 선 선택이 없습니다. 따라서 버전 2.0에서는 vim이 가지고있는 정확한 세 가지 모드가 tmux에서도 가능합니다.
Amir H. Sadoughi
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.