tmux - เลื่อนขึ้น / ลงพร้อม shift + page up / down ในบานหน้าต่าง


14

ฉันต้องการที่จะเลื่อนขึ้น / ลงในบานหน้าต่างที่กำหนดด้วยปุ่มลัดเดียวกับที่ xterm ทำเช่น SHIFT + Page Up / Down

ตัวอย่างเช่นหากหน้าต่าง tmux แบ่งออกเป็นบานหน้าต่างแนวตั้ง 2 บานฉันสามารถเลื่อนหนึ่งในสองด้วยแป้นพิมพ์ในขณะที่อีกหน้าต่างหนึ่งไม่เลื่อน

เป็นไปได้ไหม ?

นี่คือ tmux.conf ของฉัน:

set -g status off
set -g prefix C-o
unbind C-b
bind C-o send-prefix

# settings -------------------------------------------------------------

setw -g utf8 on
setw -g xterm-keys on
set -g default-terminal "screen-256color"

set-option -g set-titles on
set-option -g set-titles-string '[#S:#I #H] #W'

# auto-set window title
setw -g automatic-rename
setw -g aggressive-resize on

# vim keybinds
set-option -g status-keys vi
set-window-option -g mode-keys vi

# scroll inside the current pane
#bind-key k page-up
#bind-key l page-down

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

# scrollback buffer n lines
set -g history-limit 100000

# fixes shift-pageup/shift-pagedown
set -g terminal-overrides 'xterm*:smcup@:rmcup@'
set -g visual-activity on

# faster key repetition
set -s escape-time 0

# activity alert
setw -g monitor-activity on
set -g visual-activity on

# alt+directions navigates through panes
bind-key -n M-left select-pane -L
bind-key -n M-right select-pane -R
bind-key -n M-up select-pane -U
bind-key -n M-down select-pane -D

คำตอบ:


8

ในการเลื่อนขึ้นคุณสามารถทำได้:

bind -n S-Pageup copy-mode -u

ด้านบนไม่ทำงานบน Mac ดังนั้นฉันจึงทดสอบด้วย:

bind -n S-Up copy-mode -u

เท่าที่ฉันสามารถบอกได้หลังจากกด S-Up คุณสามารถใช้ S-Up ต่อไปหรือเพียงเลื่อนหน้าขึ้นเพื่อเลื่อนขึ้น คุณสามารถใช้การเลื่อนหน้าลงเพื่อเลื่อนลง สิ่งเหล่านี้ไม่ใช่สิ่งสำคัญที่คุณต้องการดังนั้นฉันต้องขออภัย สิ่งนี้จะช่วยให้คุณใกล้ชิดกับเป้าหมายของคุณมากขึ้น

แก้ไข:

ฉันเพิ่งทดสอบกับ:

bind -n Pageup copy-mode -u

และสิ่งนี้ช่วยให้คุณใช้เพียงแค่เลื่อนหน้าขึ้นและเลื่อนลง


ในขณะที่bind -n Pageup copy-mode -uให้ฉันกด PgUp เพื่อเข้าสู่โหมดคัดลอกและเลื่อนขึ้นฉันไม่สามารถใช้ PgUp เพื่อเลื่อนขึ้นต่อไปได้
apocryphalauthor

6

ใช่ฉันรู้ว่าคำถามนี้เก่า แต่ก็ไม่ได้ไกลขนาดนั้นในผลลัพธ์ของ google และฉันใช้เวลามากในการหาวิธีการทำเพียงเพราะไม่มีผลลัพธ์ของ google ที่มีคำตอบคำถามเท่านั้น

AFAIK บานหน้าต่างเดียวเท่านั้นเลื่อนเมื่ออยู่ในโหมดคัดลอก ในการเข้าสู่โหมดการคัดลอกคุณสามารถใช้prefix-[แล้วเลื่อนการใช้C-upและC-downหรือคุณสามารถตั้งค่าการโยงคีย์ของคุณเอง (ในไฟล์กำหนดค่า) ซึ่งในโหมด emacs มีลักษณะดังนี้:

bind-key -t emacs-copy -n S-PPage halfpage-up
bind-key -t emacs-copy -n S-NPage halfpage-down

นี้จะกำหนดคีย์ผสมShift+ PageUpและShift+ PageDownเพื่อเลื่อนครึ่งหน้าขึ้นตามลําดับลงเมื่ออยู่ในโหมดการคัดลอก เมื่อคุณใช้โหมด vi คุณจะต้องเปลี่ยนเป็นโหมดนี้:

bind-key -t vi-copy -n S-PPage halfpage-up
bind-key -t vi-copy -n S-NPage halfpage-down

ตอนนี้ถ้าคุณต้องการเข้าสู่โหมดการคัดลอก "อัตโนมัติ" และไม่ต้องการใช้prefix-[คุณสามารถเพิ่มบรรทัดต่อไปนี้ในไฟล์ปรับแต่งของคุณ:

bind-key -t root -n S-PPage copy-mode -u

สิ่งนี้จะเปิดโหมดการคัดลอกและเลื่อนหน้า (เต็ม) ขึ้นเมื่อกดShift+ PageUpในโหมดแก้ไข (โหมดเริ่มต้น) -uไปที่โหมดสำเนาเท่านั้นโดยไม่ต้องเปิดแล้วเลื่อนขึ้นหน้าเพียงละเว้น และถ้าคุณต้องการเพื่อเลื่อนหน้าเต็มขึ้น / ลงหรือเพียงแค่บรรทัดคุณสามารถใช้คำหลักpage-up, scroll-upหรือหนึ่งในการใช้คำสั่ง

tmux list-keys -t vi-copy
tmux list-keys -t emacs-copy

เพื่อดูรายการทั้งหมดของตัวเลือกที่จะใช้และการผูกคีย์เริ่มต้น


1
ฉันไม่แน่ใจว่าเป็นรุ่นที่tmuxฉันใช้อยู่หรือไม่ แต่-tไม่รู้จักพารามิเตอร์ (แต่ -T ใช้งานได้) พิมพ์ผิดที่เป็นไปได้หรือไม่
mdip

ส่วนใหญ่อาจเป็นตัวพิมพ์ผิด แต่ยังไม่เข้าใจด้วย-nเนื่องจากนี่เป็นทางลัดสำหรับ-T root
smido

4

นี่คือวิธีการแก้ปัญหาที่ควรจะทำงานร่วมกับหน่วยความจำกล้ามเนื้อของคุณช่วยให้คุณใช้Shift+ PageUpและShift+ PageDownตามที่คุณต้องการในสถานีปกติ

bind -n Pageup copy-mode -u
bind -n S-Pageup copy-mode -u
bind -n S-Pagedown send-keys Pagedown

หากคุณใช้ Vim คุณจะต้องเปิดใช้งานการผูกนี้แบบมีเงื่อนไขหรือจะทำสิ่งต่าง ๆ เกิดขึ้นเมื่อคุณใช้PageUpฯลฯ ใน vim ด้านใน tmux

is_vim="ps -o state= -o comm= -t '#{pane_tty}' \
    | grep -iqE '^[^TXZ ]+ +(\\S+\\/)?g?(view|n?vim?x?)(diff)?$'"
bind -n Pageup if-shell "$is_vim" "send-keys Pageup" "copy-mode -u"
bind -n S-Pageup if-shell "$is_vim" "send-keys Pageup" "copy-mode -u"
bind -n S-Pagedown send-keys Pagedown

(ต้องขอบคุณโซลูชั่นของ @ mjwhitta ซึ่งการปรับแต่งนี้)


+1 แต่bind -n Pageup if-shell "$is_vim" "send-keys Pageup" "copy-mode -u; send-keys Pageup"ต้องได้รับ Pageup เพื่อเลื่อนขึ้นอย่างต่อเนื่องในการกดหลายครั้ง
79E09796
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.