저는 Windows 10에서 PuTTY를 사용하여 SSH를 통해 다양한 Linux 시스템에 액세스합니다. 이러한 시스템에서는 Linux 환경에서의 생활을 단순화하기 위해 Tmux를 자주 사용합니다. Tmux 세션에서는 일반적으로 하나 이상의 창을 여러 창으로 세분화합니다.
저는 종종 마우스를 사용하여 PuTTY에서 텍스트를 선택/복사한 다음 마우스 오른쪽 버튼을 클릭하여 붙여넣습니다. 일반적으로 이는 줄 바꿈 시 Tmux 외부에서 잘 작동하지만 tmux 세션 내에서는 특정 창 내에서 여러 줄 선택을 수행할 수 없습니다.
어떻게 해야 하나요?
답변1
무언가를 복사하여 tmux에 붙여넣고 싶다면 내장된 복사/붙여넣기 기능을 사용할 수 있습니다. vi 키 바인딩을 활성화하고 기본 설정을 사용하는 경우 <prefix> [
복사 모드로 들어가서 텍스트로 이동하고 space
강조 표시를 시작한 후 enter
완료됩니다. 그런 다음 prefix ]
tmux에 붙여 넣을 수 있습니다 . 복사된 텍스트는 tmux 자체 버퍼에 남고 로컬 시스템의 클립보드에는 들어가지 않습니다.
PuTTY 외부에 붙여넣어야 하는 경우 Alt 키를 누른 채 마우스로 선택하여 창에서 블록을 선택할 수 있습니다.
답변2
몇 가지 트릭을 사용하면 tmux 버퍼를 검색하고 PuTTY를 통해 클라이언트에 반환할 수 있습니다. "AUX" 포트(직렬 프린터)에 대한 ANSI 이스케이프 코드를 사용하여 이를 수행합니다.
다음은 이 전송 방법의 구현 중 하나일 뿐입니다.
1) tmux.conf
서버 측에 추가합니다.
# Send the tmux copy buffer to a file. The file is read for ANSI printing by "t" alias in .bashrc
bind -t vi-copy y copy-pipe 'cat > ~/.tmux-buffer'
2) 서버 측에 추가하십시오 .bashrc
.
t() {
# Configure a PuTTY profile to send "t" as the "Remote command". This
# function will automatically reattach to an existing tmux session if one
# exists, or start a new one. This function also repeatedly sends our
# homemade tmux clipboard back to the PuTTY client in the form of an ANSI
# printer escape sequence. The contents of the homemade clipboard are
# populated by `bind -t vi-copy y copy-pipe 'cat > ~/.tmux-buffer'` in
# tmux.conf. It is expected that the PuTTY client will be configured to
# print to a "Microsoft XPS Document Writer" which saves the printer output
# to a file. The file is subsequently read by an AutoHotkey macro, and the
# contents are made available for paste.
[[ "$TERM" == "xterm" ]] || return 0 # This prevents recursive runs, in case t() is called after tmux is started.
{ while :; do tput mc5; cat ~/.tmux-buffer; tput mc4; sleep 5; done } &
tmux attach || tmux
}
3) 클라이언트(Microsoft Windows)에서 새 프린터를 만듭니다.
- 프린터 추가
- 새 포트 생성 > 로컬 포트
- 포트 이름 입력 > "
PuTTY_Printer_File
" - 드라이버 > Microsoft XPS Document Writer
- 프린터 이름 > "
PuTTY Printer
" %USERPROFILE%\Documents\PuTTY_Printer_File
선택 사항: 테스트 페이지를 인쇄하여 file@" "의 내용 에 나타나는지 확인하세요.
4) 클라이언트 PuTTY 구성에서:
- 터미널 > 프린터 ANSI 프린터 출력 보내기를 다음으로 설정합니다.
PuTTY Printer
이름이 " "인 새로 생성된 프린터 로 - "연결" > "SSH" > "원격 명령:"을 "
t
"로 설정합니다(위의 .bashrc 기능 참조).
이 시점에서 일부 텍스트를 강조 표시하고 tmux 복사 모드를 눌러 tmux 버퍼의 내용을 PuTTY 클라이언트로 보낼 수 있습니다 y
. 선택한 텍스트가 %USERPROFILE%\Documents\PuTTY_Printer_File
클라이언트에 반환됩니다 . 한 단계 더 나아가 이 파일에서 "붙여넣기"를 시뮬레이션하려면 단축키 시퀀스를 사용하여 파일 내용을 읽고 삽입할 수 있습니다. 다음은 AutoHotKey를 활용하는 예이지만 원하는 경우 PowerShell에서 동일한 결과를 얻을 수 있습니다.
5) 클라이언트 AutoHotKey 매크로:
;### Get contents of PuTTY ANSI printer device output and paste it
#v:: ;Winkey + v
FileRead, PuTTYPrinter, %USERPROFILE%\Documents\PuTTY_Printer_File
SendInput %PuTTYPrinter%
PuTTYPrinter = ; Free up memory
return
6) 전체 사용 프로세스:
- PuTTY를 사용하여 서버에 연결하고 t() 함수를 통해 tmux에 넣습니다.
- 복사할 텍스트를 선택할 준비가 되면 tmux 단축키를 사용하여 복사 모드(
Ctrl + b
,[
) 로 들어갑니다. - 화살표 키를 사용하여 커서를 이동하세요.
- 선택 시작
spacebar
- 선택을 종료하고 복사합니다.
y
- 클라이언트로 돌아가서 PuTTY를 실행하면
WindowsKey + v
선택 항목이 붙여넣어집니다.
한 장의 사진이 1,000 단어의 가치가 있으므로 발생한 일을 요약하면 다음과 같습니다.
링크:
스택 오버플로에 대한 내 답변 -https://stackoverflow.com/a/41560941/3163993
영상 시연/설명 -https://www.youtube.com/watch?v=kEIpE2XpDdY
답변3
이 문제에 대한 해결책은 먼저 창을 최대화한 다음 마우스를 사용하여 텍스트를 복사하는 것입니다. 현재 창을 최대화하려면 접두사 -Z를 사용하세요.
답변4
세로 창이 여러 개 있는 경우 한 창에서 텍스트를 복사하려면 키를 누른 <Alt>
다음 마우스를 드래그하여 텍스트 블록을 복사하면 됩니다. 원격 CentOS 서버에 연결하는 Windows 10에 적용됩니다.