tmux: 다른 창에서 강조 표시된 코드를 보내고 실행합니다.

tmux: 다른 창에서 강조 표시된 코드를 보내고 실행합니다.

두 개의 tmux 창을 갖고 싶습니다. 첫 번째 창에는 여러 프로그램 중 하나(보통 vim은 아니지만)가 포함될 수 있고, 두 번째 창에는 R, Python 또는 bc에서 대화형 세션이 있습니다.

두 창에 항상 동일한 시스템이 표시되는 것은 아닙니다. 일반적으로 시스템 A에서 tmux를 실행하고 창 중 하나에서 작업을 수행한 다음 두 번째 창을 시스템 B로 ssh하고 대화형 대화형 R/Python/bc를 실행합니다. .

내 목표는 첫 번째 창에서 무언가를 강조 표시하고 이를 다른 창으로 보내 실행하는 것입니다.

tmux가 창 간에 복사/붙여넣기를 할 수 있다는 것을 알고 있습니다. 나는 tmux가 특정 명령을 다른 창으로 보내고 이를 실행하기 위해 Enter 키로 종료할 수 있다는 것을 알고 있습니다. 하지만 "첫 번째 창에서 강조한 내용"을 두 번째 창으로 보낸 다음 실행할 입력 문자로 끝나도록 할 수 있나요?

(즉, 코드 부분을 강조 표시하고 "실행"을 클릭하는 IDE의 동작을 에뮬레이션하려고 합니다. 특별한 vim 플러그인이 아닌 tmux를 사용하여 이 작업을 수행하고 싶습니다. 한 창에서는 vim이 아닌 다른 것을 사용할 것입니다).

답변1

나는 다음과 같은 방법으로 당신이 원하는 것을 성취할 수 있다고 믿습니다:

1) 복사 모드로 들어갑니다. (접두사 [)

2) 일부 텍스트를 선택합니다(가능성이 가장 높음 v(isual select)/y(ank))

3) 다른 창으로 보내서tmux paste-buffer -t [left/right]

방금 설명한 개념 증명은 다음과 같습니다.

현재 디렉터리에 foo.rb라는 Ruby 스크립트가 있는 경우:

# foo.rb
x = "hello there"
puts x

...그리고 세로로 분할된 두 개의 창(왼쪽은 bash, 오른쪽은 irb 세션)을 실행하고 cat foo.rb복사 모드로 들어가서 파일 내용을 추출한 다음 tmux paste-buffer -t right왼쪽 창에서 실행하면 right 다음과 같은 출력 창이 표시됩니다.

λ irb
2.5.1 :001 > x = "hello there"
 => "hello there"
2.5.1 :002 > puts x
hello there
 => nil

여기에서 out/recall 을 입력하지 않아도 되도록 쉘 스크립트를 작성하거나 키 바인딩을 연결할 수 있습니다 tmux paste-buffer -t [left/right].

paste-buffer ~해야 한다"Enter로 끝내기"도 처리됩니다. tmux 매뉴얼 페이지의 항목 paste-buffer:

출력 시 붙여넣기 버퍼의 줄 바꿈(LF) 문자는 기본적으로 캐리지 리턴(CR)인 구분 기호로 대체됩니다.

어떤 이유로 기본 구분 기호가 작동하지 않는 경우 지정된 구분 기호를 사용할 수도 있습니다 paste-buffer -s ....

답변2

(파티에는 늦었지만 여전히) 필요한 작업을 정확하게 수행하는 vim 플러그인은 다음과 같습니다.jpalardy/vim-slime

답변3

나중에 Google을 검색하는 사람을 위해 내 .tmux.conf의 완전히 조정된 최종 줄이 있습니다(내 질문에 대한 pdoherty926의 답변에서 영감을 얻었습니다).

이 키 바인딩 조합을 사용하면 키 입력을 두 번으로 줄일 수 있습니다. F5는 F5를 눌렀을 때 커서가 있던 위치에서 복사를 시작하고 F6은 복사를 마치고 다른 창에서 코드를 실행합니다.

# These are lines that anybody using vim-like copy/paste will have
set-window-option -g mode-keys vi
bind P paste-buffer
bind-key -t vi-copy 'v' begin-selection
bind-key -t vi-copy 'y' copy-selection
# These are the lines that make F5/F6 do their thing
bind-key -n F5 copy-mode \; send-keys v
bind-key -n F6 send-keys y \; paste-buffer -t %1 \; send-keys -t %1 C-m

내가 이렇게 한 이유는 시작 선택 및 복사 선택 명령을 직접 바인딩할 수 없기 때문입니다. 예를 들어 "bind-key -n F5 copy-mode \begin-selection"은 작동하지 않지만 "v"를 바인딩하면 in copy 모드(표준 vim과 같은 바인딩)에서 선택을 시작한 다음 복사 모드로 들어간 후 F5에서 "send-keys v"를 수행하면 작동합니다.

릴레이된 마우스 클릭을 처리하도록 구성된 SSH 세션을 사용하는 경우 다음을 추가할 수도 있습니다.

setw -g mode-mouse on
set -g mouse-select-window on

위의 줄에 추가로 이 줄을 배치한 상태에서 이제 마우스로 코드를 강조 표시하고 F6 키를 눌러 실행하기만 하면 됩니다. (tmux의 마우스 클릭 잡기를 우회해야 하고 이 줄이 .tmux.conf에 있는 경우 클릭하는 동안 Shift 키를 누르십시오.)

관련 정보