답변:
이 같은 질문이 꽤 오랫동안 나를 괴롭 혔습니다. 내가 생각해 낸 최고의 것이 있습니다. 이것을 .tmux.conf 파일에 넣으십시오.
bind -n C-k clear-history
이것은 ctrl-k를 tmux clear-history 명령에 바인드합니다. 바인드 후 -n을 사용하면 tmux 명령 접두어 (기본적으로 ctrl-b)를 실행할 필요가 없습니다. bash를 사용하므로 ctrl-l은 이미 명령 줄에 "clear"를 입력하는 것과 같습니다. 이 두 키를 사용하면 멋진 ctrl-l, ctrl-k 콤보가 생겨 모든 스크롤 버퍼를 화면 밖으로 옮기고 ( "clear") 모든 기록을 삭제합니다 (tmux "clear-history"명령).
터미널, iTerm 또는 Konsole의 1 키 콤보만큼 좋은 것은 아니지만 항상 명확한 역사를 입력하는 것보다 낫습니다.
bind k send-keys "clear"\; send-keys "Enter"
지우기 부분을 수행하고 있지만 내장 기능을 사용하는 ctrl+l
것이 더 간단 clear-history
하며 스크롤 백 기록을 제거하는 것이 좋습니다.
@juanpaco가 올바르게 언급했듯이 clear-history
스크롤 백 버퍼를 지우는 명령입니다.
또한 같은 명령으로 화면의 내용을 지우고 싶다고 덧붙입니다. 발행 send-keys -R
난에 다음을 사용할 수 있도록, 리셋 (클리어) 화면을 내.tmux.conf
bind-key b send-keys -R \; clear-history
화면과 스크롤 백 버퍼가 지워집니다.
send-keys
: "-R 플래그는 터미널 상태를 재설정합니다." 업데이트 만하면됩니다.
bind -n C-l send-keys C-l \; clear-history
clear-history
명령 을 입력 할 상태에 도달하려면을 Ctrl+B
누른 다음 콜론 ( :
)으로 명령을 시작하십시오 .
send-keys -R C-l \; clear-history
.
여기에 대한 모든 대답은 새로운 키 바인딩 추가에 대해 이야기합니다.
가끔하고 싶을 때 매핑이 전혀 필요하지 않습니다 ...
접두사 기본값은 <Ctrl-b>
그냥 입력 <prefix>:
관련 창에서 다음을 입력 clear-history
하고 Enter 키를 누릅니다.
tmux의 멋진 점 중 하나는 이와 같은 명령을 실행하거나 쉘 / 스크립트에서 실행 tmux command
하거나 키보드 단축키를 만들 수 있다는 것입니다.
cle
자동 완성한 <tab>
다음 두 번째에 사용 <up arrow>
하여 이전 항목에 액세스 할 수 있습니다. 이 방법은 매우 빠릅니다.
<Ctrl-b> the
c` 키를 누른 후 입력을 시작할 때 새 창을 만들도록 설정되어 있기 때문에 이것은 작동하지 않습니다 .
:
그것은 당신에게 대화 형 프롬프트를 제공합니다 - 당신이 'C'를 입력 할 위치 그건
CTRL-L
명확한 역사 를 결합 하려면 다음에 추가하십시오 ~/.tmux.conf
.
bind u send-keys C-l \; run-shell "sleep .3s" \; clear-history
예를 들어 MySQL 쉘에있는 경우에도 작동합니다.
tail -f some.log
. ctrl-Z
이것과 결합하는 방법 이 있습니까? 제대로 된 것 같습니다.
나는 send-keys -R
조금 느리게 사용 하는 것을 발견했다 -여기 하나의 명령으로 화면과 기록을 지우는 다른 방법이있다
bind-key C send-keys "clear && tmux clear-history" \; send-keys "Enter"
중첩 된 tmux 호출이보다 명백한 것으로 사용됩니다.
bind-key C send-keys "clear" \; send-keys "Enter" \; clear-history
히스토리에서 화면의 현재 텍스트를 지우지 못함 -clear-history 명령은 키를 보내기 위해 별도의 스레드에서 실행되는 것으로 나타납니다.
bind-key E send-keys "C-k" \; send-keys "C-u" \; send-keys "clear" \; send-keys "Enter" \; run-shell "sleep .3s; tmux clear-history"
가장 간단한 방법으로 방금이라는 쉘 스크립트를 만들고 cls
화면과 스크롤 백 버퍼를 지우고 싶을 때마다 실행합니다.
이게 전부입니다 :
cls
clear;
tmux clear-history;
이것은 TMUX 2.6에서 가장 잘 작동하여 화면을 지우고 스크롤을 수행하지만 프롬프트는 계속 표시합니다.
Ctrl-L 사용
bind-key -n C-l send-keys C-l \; send-keys -R \; clear-history
Ctrl-L은 콘솔 응용 프로그램에서 화면을 다시 그리는 데 사용됩니다. 에 바인딩 할 때 나는 발견send-keys -R
일부 응용 프로그램 (예 : vim, mc)에서 화살표 키가 더 이상 올바르게 작동하지 않을 수 있습니다.
콘솔 응용 프로그램에서 다시 그리기 기능을 유지하기 위해 다음을 사용했습니다.
bind-key -n C-l if-shell -F '#{alternate_on}' 'send-keys C-l' 'send-keys -R C-l; clear-history'
tmux 옵션이 켜져 있어야합니다 alternate-screen
(기본적으로 설정되어 있음).
위의 내용과 다른 출처 중 일부를 사용했습니다.
bind k send-keys C-u \; send-keys C-k \; send-keys " clear && tmux clear-history" \; send-keys "Enter" \; run-shell "sleep .3s" \; send-keys "Up" \; send-keys C-u
"clear && tmux clear-history"의 선행 공간은 명령이 히스토리 파일에 기록되는 것을 방지합니다 (이러한 방식으로 선행 공간을 처리하도록 쉘 설정을 제공합니다. Google "공백 무시 공간"+ 쉘 이름) 정보). 나는 터미널에서 ctrl-k와 더 인라인이기 때문에 내 명령 에이 명령을 표시하지 않기를 원합니다.
첫 번째 전송 키 Cu 및 전송 키 Ck는 "clear && tmux clear-history"가 성공적인지 확인하기 위해 프롬프트에 현재 입력 된 모든 것을 지 웁니다 (예 : 프롬프트에 "ABCDEFG"를 입력하고 D와 E 사이에 커서를 놓으면 "ABCD clear && tmux clear-historyEFG"가 쉘로 전송되지 않아 실패 할 수 있습니다.
전송 키 "위로"및 마지막 전송 키 Cu는 쉘 내부 히스토리에서 마지막 항목을 지 웁니다. 위에서 언급 한 후행 공간에도 쉘의 내부 히스토리에는 "clear ..."행이 포함됩니다. 보내기와 Ctrl-u는 이것을 제거합니다.
마지막으로, iTerm에서 나는 ctrl-k를 ctrl-a k에 매핑하도록 설정했습니다 (나는 tmux 접두사가 ctrl-a로 설정되어 있음). 수년 동안 손이하고 싶은 ctrl-k를 입력 할 수 있습니다 그래서. iTerm> 환경 설정> 프로파일> 키로 이동하고 16 진 코드 "0x01 0x6B"를 전송하는 바로 가기를 추가하여이를 수행합니다. tmux 및 iTerm에서 16 진 코드를 사용하는 방법에 대한 자세한 정보를 제공하는 훌륭한 기사가 있습니다. http://tangledhelix.com/blog/2012/04/28/iterm2-keymaps-for-tmux/
그것은 tmux와 함께 ctrl-k를 제공합니다. tmux가없는 실제 ctrl-k에는 현재 프롬프트에 입력 한 것이 있으면 화면을 지우는 동안 입력 한 내용이 보존됩니다. 언급했듯이이 접근 방식은 입력 한 내용을 지워야하며 "clear ..."명령이 실패하지 않습니다. 그러나 그것은 꽤 가깝습니다!
왜 안돼? bind -n C-l send-keys C-l
-n C-l
기본적으로 '이것을 잡아라'라고 말하면 즉시 같은 것을 통과합니다. (즉, 이것은 no-op입니다.) ... 둘째, 당신의 의도 는 꺼져 있습니다 . 스크롤 뒤로 돌아 가지 않고 화면을⌃L
지 웁니다 . 이 질문의 목적은 보이는 터미널이 아닌 (tmux의) 스크롤 백 을 지우는 것 입니다 . ⌃B [
많은 연구와 시간을 보낸 후. zsh 및 terminal.app에서 나를 위해 가장 좋은 방법을 찾았습니다.
prefix-c
화면을 지우는 데 사용 하고prefix-C
기록을 지우하고는 버퍼 스크롤 나는 그것이 짜증나는 찾을 수 있기 때문에 위의 어떤 라인을 떠나지 않습니다.
# clear screen
bind c send-keys 'C-l'
# clear screen and history
bind C send-keys -R \; send-keys C-l \; clear-history \; send-keys
# check if the pane is running vim
is_vim="ps -o state= -o comm= -t '#{pane_tty}' \ | grep -iqE '^[^TXZ ]+ +(\\S+\\/)?g?(view|n?vim?x?)(diff)?$'"
# clear screen
bind c if-shell "$is_vim" "send-keys c" "send-keys 'C-l'"
# clear screen and history
bind C send-keys -R \; send-keys C-l \; clear-history \; send-keys
그래서, 나는 위에서 오랫동안 plu 의 접근 방식 을 사용 했지만 그 한계에 동의했습니다 (기본적으로 ⌃L
통과하는 것은 그것을 이해하는 프로그램에 파이프되지 않는 한 의미가 없습니다).
그래서 나는이 스레드에 대한 다른 답변으로 다양한 접근 방식을 개선했습니다. 복잡하지만이 방법은 쉘 과 다른 명령 모두에서 작동 합니다 .
# ⌃K: Clears the current pane (from <https://stackoverflow.com/a/34162098>)
bind-key -n C-k \
if-shell "test \"$(printf '#{pane_current_command}' | tail -c 2)\" = sh" \
"send-keys C-l ; run-shell 'sleep .3s' ; clear-history" \
"split-window -vp 100 ; clear-history -t ! ; kill-pane"
함께 사용해보십시오 tail -f /private/var/log/system.log
!
여기에 중요한 참고 사항이 있습니다. 셸이 아닌 경우 지워지는 창 크기를 보이지 않게 조정 하는 것입니다. 이로 인해 SIGWINCH
es를 수신 대기하는 일부 명령 줄 응용 프로그램에서 크기 조정 동작이 트리거 될 수 있습니다 . 그러나 내 추론은 이것이 큰 문제가 아니라는 것입니다. 왜냐하면 그것들은 어쨌든 '지우려고'하지 않을 프로그램이기 때문 입니다 .
또한 쉘 인용 상황은 이미 엉망이며 삽입 할 때 쉽게 하나 이상 이 될 #{pane_current_command}
수 있으므로 조심해야합니다.default-command
설정 .
명령 일치 종료에 대한 테스트에도 동일하게 적용됩니다 "sh"
. 만약 당신이 default-command
비슷한 /bin/bash --login
또는 복잡한 것을 가지고 있다면 exec
, 실제 명령 은 끝나지 않을 수도 있습니다 "sh"
; 테스트 대상을 확인 ⌃B :
하려면 실행에 사용 display-message '#{pane_current_command}'
하십시오.