ฉันจะเลื่อนใน tmux ได้อย่างไร


1293

ฉันเพิ่งเริ่มใช้ tmux และฉันชอบมาก แต่ฉันต้องสามารถเลื่อนภายในบัฟเฟอร์ / บานหน้าต่าง / หน้าต่างที่ฉันเปิดอยู่ ฉันไม่สนใจว่ามันจะใช้งานกับเมาส์ได้หรือไม่ เมื่อฉันค้นหาหน้าเพจของ tmux ฉันพบคำว่า "scroll" เพียงสองอินสแตนซ์เท่านั้นแม้จะปรากฏขึ้นและทั้งคู่ก็ต้องใช้โหมดการคัดลอก มีวิธีการเลื่อนโดยไม่มีค่าใช้จ่ายในการเข้าสู่โหมดการคัดลอกทั้งหมดหรือไม่?


8
คุณกังวลเรื่องค่าใช้จ่ายอะไร copy-modeเป็นวิธีในการดูประวัติ (และเลือกคัดลอกเนื้อหาจาก)
Chris Johnsen

2
สำหรับฉันคุณสามารถกด f7 สำหรับโหมดเลื่อนและ q เพื่อออก
JohnMerlino

7
set -g mode-mouse onต่อคำตอบของ @ chaiyachaiya เป็นผู้ชนะสำหรับฉัน
Peter Berg

คำตอบ:


1568

Ctrl- bจาก[นั้นคุณสามารถใช้ปุ่มนำทางปกติของคุณเพื่อเลื่อนดู (เช่นUp ArrowหรือPgDn) กดqเพื่อออกจากโหมดเลื่อน

หรือคุณสามารถกดCtrl- b PgUpเพื่อไปที่โหมดคัดลอกโดยตรงและเลื่อนหน้าขึ้นหนึ่งหน้า (ซึ่งเป็นสิ่งที่ดูเหมือนว่าคุณต้องการเวลาส่วนใหญ่)

ในviโหมด (ดูด้านล่าง) คุณยังสามารถเลื่อนหน้าขึ้น / ลงทีละบรรทัดโดยใช้Shift- kและShift- j(หากคุณอยู่ในโหมดเลื่อน) ยกเลิกการเลื่อนเคอร์เซอร์จะย้ายแทนหน้า

ข้อความที่ตัดตอนมาจากหน้าคน :

tmux อาจถูกควบคุมจากไคลเอ็นต์ที่พ่วงต่อโดยใช้คีย์ผสมของคีย์คำนำหน้า 'C-b' (Ctrl-b) โดยค่าเริ่มต้นตามด้วยคีย์คำสั่ง

 The default command key bindings are:

[           Enter copy mode to copy text or view the history.

Function                     vi              emacs
--------                     --              -----
Half page down               C-d             M-Down
Half page up                 C-u             M-Up
Next page                    C-f             Page down
Previous page                C-b             Page up
Scroll down                  C-Down or C-e   C-Down
Scroll up                    C-Up or C-y     C-Up
Search again                 n               n
Search again in reverse      N               N
Search backward              ?               C-r
Search forward               /               C-s

บวกกับพวงมากกว่า โปรดทราบว่าคุณต้องกดC-bสองครั้งหากคุณใช้เพื่อเลื่อนหน้าขึ้นเนื่องจากC-bถูกผูกไว้เป็นคีย์คำสั่ง ดูที่หน้า man สำหรับข้อมูลเกี่ยวกับการคำสั่งโหมดคัดลอกล่วงหน้าด้วยการนับซ้ำ

คุณสามารถตั้งค่าโหมดการเชื่อมโยงคีย์โดยใช้Ctrl- bจากนั้น

:set-window-option mode-keys emacs

viหรือ


14
ฉันคิดว่าC-b =เป็นchoose-bufferค่าเริ่มต้น คุณหมายถึงC-b [(ซึ่งcopy-modeโดยค่าเริ่มต้น)? นอกจากนี้คุณยังสามารถใช้C-b PageUpเพื่อเริ่มโหมดการคัดลอกโดยตรงในหน้าก่อนหน้า (มีประโยชน์มากเมื่อคุณรู้ว่าสิ่งที่คุณต้องการที่จะดู / คัดลอกได้เลื่อนออกไปจากหน้าปัจจุบัน)
Chris Johnsen

4
ถูกต้อง tmux ของฉันไม่มีโหมดเลื่อน คุณต้องC-b [เข้าสู่โหมดการคัดลอกจากนั้นใช้ emacs หรือ vi-key-bindings เพื่อเลื่อนดู ดูเหมือนว่าจะเป็นขั้นตอนมากมายที่จะเลื่อน แต่ประโยชน์ของ tmux ยังคงเกินความน่ารำคาญเหล่านี้ ฉันใช้ macbook และไม่มีคีย์ PageUp: - \ (ฉันจะสร้างกุญแจด้วยการทำ
เครื่องหมาย

44
@chadoh: ลองใช้ Macbook ของคุณ: หน้าแรก: fn-LeftArrow; จบ: fn-RightArrow; เลื่อนหน้าขึ้น: fn-UpArrow; เลื่อนหน้าลง: fn-DownArrow ในการทำปุ่มกด:<kbd>Ctrl</kbd>
Dennis Williamson

5
บน macbook fn + ขึ้นไปตรงไปที่แอป terminal และไม่เคยกระทบ tmux
Tyler

15
สำหรับ macbook หากคุณอยู่ในโหมดเลื่อนคุณสามารถใช้ fn + Shift + LeftArrow เพื่อเลื่อนหน้าขึ้น
Nick Hammond

306

ดีคุณควรพิจารณาวิธีที่เหมาะสมในการตั้งค่าการเลื่อน: เพิ่มในของคุณ tmux.conf

set -g mouse on        #For tmux version 2.1 and up

หรือ

set -g mode-mouse on   #For tmux versions < 2.1

มันทำงานให้ฉันในหน้าต่างและบานหน้าต่าง ตอนนี้ tmux สมบูรณ์แบบแล้ว

ในทางปฏิบัติ tmuxมีข้อมูลเพิ่มเติมเกี่ยวกับไฟล์ tmux.conf


5
เมื่อฉันทำสิ่งนี้การคลิกเมาส์และการเลื่อนทำให้เกิดอักขระซึ่งพูดพล่อยๆที่จะพิมพ์ไปยังพื้นที่แจ้งของเครื่องที่ฉันใช้กับ tmux ความคิดใด ๆ
ely

22
ผู้ใช้เมาส์ tmux ในอนาคต: เพื่อช่วยให้คุณไม่ต้องเลื่อนไปที่ด้านล่างอีกครั้งก่อนพิมพ์คุณสามารถกดqเพื่อออกจากโหมดเลื่อน
Jezen Thomas

15
การเลื่อนเมาส์ทำงานได้ดีกับสิ่งนี้ แต่น่าเสียดายที่ฉันไม่สามารถใช้เมาส์เพื่อเลือกข้อความได้อีกต่อไป ใช้ Tilda และ tmux
friederbluemle

27
โปรดทราบว่าใน tmux 2.1 และสูงกว่านี้จะถูกแทนที่ด้วยset -g mouse onและการเลื่อนไม่ได้เข้าสู่โหมดการคัดลอกโดยอัตโนมัติเหมือนที่เคยทำมาก่อน
thrnio

25
หมายเหตุสำคัญ: การตั้งค่านี้จะเป็นการหยุดการเน้นและการคัดลอกข้อความ ใช้ shift + คลิกเพื่อรักษาการทำงานของฟังก์ชันนี้
Shadoninja

141

จาก. tmux.conf ของฉัน:

# Sane scrolling
set -g terminal-overrides 'xterm*:smcup@:rmcup@'

สิ่งนี้เปิดใช้งานการเลื่อน xterm ดั้งเดิม


28
คุณช่วยอธิบายสิ่งนี้ได้อย่างไร
Ivo

11
ฉันไม่รู้ว่ามันทำอะไร แต่มันเป็นอัจฉริยะที่บริสุทธิ์ ในที่สุดงานเลื่อน tmux, yay!
ตัวเอง

5
สิ่งนี้ใช้ไม่ได้กับฉันใน OS X ...
Nick

17
วิธีแก้ปัญหา: gist.github.com/1297707
นิค

6
ลองดูสิถ้าคุณสับสนเกี่ยวกับคำตอบของ togdon: superuser.com/questions/310251/… IMO ถ้าคุณมีบานหน้าต่างเดียวโซลูชันนี้ทำงานได้ดีกว่าคำตอบที่ยอมรับ
thameera

57

สำหรับ tmux 2.1 ใหม่ล่าสุดเพื่อเลื่อนด้วยเมาส์ของคุณอย่างสันโดษนี่เป็นคำตอบที่ถูกต้อง:

set -g mouse on
" sane scrolling:
bind -n WheelUpPane if-shell -F -t = "#{mouse_any_flag}" "send-keys -M" "if -Ft= '#{pane_in_mode}' 'send-keys -M' 'copy-mode -e; send-keys -M'"

ยังไม่พอเพียงแค่โหลด. tmux.conf ของคุณใหม่คุณต้องรีสตาร์ท tmux ของคุณเช่น tmux kill-server && tmux

นำมาจากhttps://github.com/tmux/tmux/issues/145


1
นี่ไม่ใช่คำตอบที่ยอมรับได้อย่างไร
Marcel

2
หมายเหตุในคำตอบนี้เกี่ยวกับ "ไม่เพียงพอที่จะเพียงแค่โหลด. tmux.conf ที่ช่วยได้" และออกจากเซสชัน tmux ทั้งหมดสำหรับฉัน (อาจจะใช้เซิร์ฟเวอร์ฆ่า) จะช่วยได้!
โคลิน D

1
คุณอธิบายรายละเอียดเกี่ยวกับวิธีการทำงานของมันได้หรือไม่
oligofren

ดูเหมือนว่าจะส่งต่อเหตุการณ์เมาส์เมื่อคลิกเมาส์ / เลื่อน / ฯลฯ หากบานหน้าต่างอยู่ในสถานะอ้อม / บัฟเฟอร์ (เพียงแค่โหมดคัดลอก?) และเมาส์กำลังกดปุ่มเลื่อนหรืออื่น ๆ ส่วนสุดท้ายครอบคลุมการเลื่อนในโหมดโดยตรงโดยสลับไปที่โหมดทางอ้อมก่อน หากไม่ใช่สำหรับการควบคุมเหล่านั้นเทอร์มินัลอาจตีความเหตุการณ์เป็นการเลื่อนประวัติถ้าทั้งหมด จากที่กล่าวมาฉันไม่ทราบว่าฉันสามารถรับเพจเจอร์และ Vim ของฉันเพื่อเลื่อนอย่างถูกต้องในเวลาเดียวกันได้หรือไม่
John P

2
@chefarov - ต่อความคิดเห็นเกี่ยวกับคำตอบอื่นคุณสามารถทำได้ผ่านShift+clickเมื่อคุณเปิดใช้โหมดเมาส์
เบรนแดนมัวร์

14

ในกรณีของฉันเพียงแค่opt+ UpArrowและopt+ DownArrowบน OSX


@ fixer1234 คำถามไม่ได้พูดถึง Linux เลย tmuxสามารถใช้กับ OS X ได้เช่นกัน
slhck

@slhck: ขอบคุณ ตาพร่ามัวเกินไป สายตาเอียงเริ่มเตะฉันอ่านผิดแท็ก tmux เป็นแท็ก linux
fixer1234

11

นี่คือวิธีที่ฉันทำให้มันใช้งานได้และเหตุผลที่ฉันคิดว่ามันดีกว่าวิธีเริ่มต้น

~/.tmux.confจะลองใส่ทุกส่วนรหัสใน

ขั้นตอนที่ 1 เปลี่ยนคีย์คำนำหน้าดังนั้นคุณจะไม่ต้องไปถึงหนึ่งบิต 'B' ดูเหมือนจะเป็นกุญแจสำคัญ แต่อยู่ตรงกลางของนิ้วชี้สองนิ้ว (ที่ 'F' และ 'J' ตามลำดับ) เนื่องจากทางลัดนั้นมีความสำคัญใน tmux, Cj นั้นดีกว่ามากเนื่องจากมันเกี่ยวข้องกับการเคลื่อนที่ด้วยมือเป็นศูนย์ (นอกเหนือจากการกดปุ่ม)

set -g prefix C-j
unbind C-b
bind C-j send-prefix

ขั้นตอนที่ 2 'S' (เพื่อเข้าสู่โหมดคัดลอก) คือ: 1) ปิด (เหตุผลเดียวกับด้านบน), 2) เกี่ยวข้องกับอีกด้านหนึ่ง (เปรียบเทียบ: 1-2 ในการชกมวยหรือlsคำสั่งเพื่อดูไฟล์ในไดเรกทอรี ) และ 3) อาจถือว่าเป็นช่วยในการจำสำหรับ "เลื่อน" (แม้ว่าโหมดคัดลอกไม่ได้เป็นเพียงการเลื่อน)

bind s copy-mode

ขั้นตอนที่ 3 ส่วนสุดท้ายคือการเลื่อนจริง 'P' และ 'N' มีความคุ้นเคยกับวัตถุประสงค์นี้สำหรับผู้ใช้ Emacs พวกเขาอยู่ใกล้ใช้งานง่าย ('P' อยู่เหนือ 'N' บนแป้นพิมพ์) และช่วยในการจำ ("ก่อนหน้า" และ "ถัดไป") หากคุณเพียงแค่ทำการเลื่อนใน Emacs และจากนั้นไปที่ tmux มันเหมาะสมที่จะมีทางลัดเหล่านั้น

อย่างไรก็ตามฉันพบว่า 'ฉัน' และ 'K' ดียิ่งขึ้น - พวกเขาอยู่ใกล้กว่า 'P' และ 'N' และใช้งานง่าย (ด้วยเหตุผลเดียวกัน); สำหรับวิชาความจำ - ขณะที่การเลื่อนเป็นเรื่องปกติที่ต้องทำตัวช่วยจำจะไม่สำคัญเพราะทางลัดจะข้ามสมองของคุณและเข้าสู่หน่วยความจำของกล้ามเนื้อในไม่ช้า

bind -t emacs-copy 'p' scroll-up
bind -t emacs-copy 'n' scroll-down
bind -t emacs-copy 'i' scroll-up
bind -t emacs-copy 'k' scroll-down

7

ฉันค้นหาสิ่งนี้มากและเป็นทางออกที่ดีที่สุดสำหรับฉันตามที่กล่าวไว้ในคู่มือโดยละเอียด: http://tangledhelix.com/blog/2012/07/16/tmux-and-mouse-mode/

เพิ่มการโยงเหล่านี้ใน ~ / .tmux.conf:

set -g mode-mouse on

unbind +
bind + \
  new-window -d -n tmux-zoom 'clear && echo TMUX ZOOM && read' \;\
  swap-pane -s tmux-zoom.0 \;\
  select-window -t tmux-zoom

unbind -
bind - \
  last-window \;\
  swap-pane -s tmux-zoom.0 \;\
  kill-window -t tmux-zoom

ด้วยวิธีการดังกล่าวข้างต้นดำเนินการคุณสามารถคัดลอกจากบานหน้าต่างในหน้าต่างเช่นกันโดยการซูมเข้าไปในบานหน้าต่างแต่ละครั้งแรกที่ใช้คำนำหน้า +

รายละเอียดที่สำคัญอย่างหนึ่งที่ขาดหายไปจากโหมดเมาส์คือการกดShiftก่อนเลือกพื้นที่ที่จะคัดลอก สิ่งนี้จะคัดลอกไปยังเทอร์มินัลบัฟเฟอร์แบบดั้งเดิมแทนการคัดลอกบัฟเฟอร์ tmux ( https://wiki.archlinux.org/index.php/Tmux#Scrolling_issues )


7

ฉันขอแนะนำให้ลองใช้ปลั๊กอินtmux-better-mouse-modeเพื่อแก้ไขปัญหาส่วนใหญ่เกี่ยวกับเมาส์ tmux ของคุณ

มันเข้ากันได้กับ Tmux 2.1+ และset-option -g mouse onแนวทางใหม่


1
ขอบคุณนี่เป็นทางออกที่ดีที่สุดสำหรับฉัน มันครอบคลุมทุกการผูกล้อเมาส์ของฉันที่ฉันได้เพิ่มด้วยตนเอง (ดังนั้นผมจึงไม่จำเป็นอีกต่อไป) และมีสองคุณสมบัตินักฆ่าที่ฉันต้องการมาก: scroll-without-changing-paneร่วมกับและscroll-without-changing-pane emulate-scroll-for-no-mouse-alternate-bufferตอนนี้ประสบการณ์การใช้ tmux ของฉันเป็นวิธีที่ดีกว่า
selurvedu

6

สิ่งเดียวที่ใช้ได้ผลสำหรับฉันคือการใส่สิ่งต่อไปนี้ ~/.tmux.conf

# Allow xterm titles in terminal window, terminal scrolling with scrollbar, and setting overrides of C-Up, C-Down, C-Left, C-Right
set -g terminal-overrides "xterm*:XT:smcup@:rmcup@:kUP5=\eOA:kDN5=\eOB:kLFT5=\eOD:kRIT5=\eOC"

(คุณอาจต้องรีบูตเพื่อให้สิ่งนี้มีผล)

ปรับปรุง:

ฉันพบว่าหากคุณเปลี่ยนการตั้งค่าในการเชื่อมต่อแบบพุต> ข้อมูล> ประเภทเทอร์มินัลเป็น "สีโป๊ว" (ใช้เพื่อแก้ไขปัญหาการจัดรูปแบบบางอย่าง) จาก "xterm" วิธีนี้จะหยุดทำงาน

อัปเดต 2:

ใช้สิ่งนี้หากคุณต้องการ "putty" เป็นประเภทอาคารของคุณ: set -g terminal-overrides "putty*:XT:smcup@:rmcup@:kUP5=\eOA:kDN5=\eOB:kLFT5=\eOD:kRIT5=\eOC"


2
อันนี้แก้ปัญหาการเลื่อนของฉันในแอพ iPhone ด้วยเช่นกัน
NathaneilCapital

ล่าสุดที่ฉันลองทำมันไม่ได้ผลอีกต่อไป แปลก. set -ga terminal-overrides ',xterm*:smcup@:rmcup@'
phocks

4

สิ่งนี้ใช้ได้กับฉัน:

vim ~/.tmux.conf
set -g mode-mouse on      ###Insert this setting with vim, then source the file.
tmux source-file ~/.tmux.conf

2
ตั้งแต่เวอร์ชัน 2.1 (18 ตุลาคม 2558) ตัวเลือกควรจะเป็นset -g mouse on
naoko

+1 สำหรับการระบุเส้นทางแบบเต็มของไฟล์กำหนดค่า คำตอบของ @ chaiyachaiya จะสมบูรณ์แบบเป็นอย่างอื่น
John McFarlane

1

FWIW บน macbook / OSX Mojave หลังจากctrl+[ทำ:

  • up arrow สำหรับการเข้าแถว
  • down arrow สำหรับบรรทัดลง
  • fn + up arrow เพื่อเลื่อนหน้าขึ้น
  • fn + down arrow สำหรับหน้าลง
  • q เพื่อออกจากโหมดดู

0

สิ่งเดียวที่ใช้ได้ผลสำหรับฉันคือ vim ~ / .tmux.conf ตั้งค่า -g mode-mouse บน ### แทรกการตั้งค่านี้ด้วย vim จากนั้นให้ส่งไฟล์ tmux source-file ~ / .tmux.conf


คุณสามารถใช้การจัดรูปแบบเพื่อทำให้ชัดเจนยิ่งขึ้น ใช้ปุ่มแก้ไขแล้วดูตัวเลือกที่มีอยู่ในโปรแกรมแก้ไขเพื่อเพิ่มรูปแบบที่เป็นประโยชน์
music2myear

-2
  • Ctrl+ A- เพื่อเริ่มเลื่อน
  • Ctrl+ C- เพื่อหยุดการเลื่อน

3
โพสต์นี้สั้นเกินไปที่จะตอบคำถามให้เป็นประโยชน์ มันเพิ่มข้อมูลใหม่ให้กับคำตอบที่โพสต์ไว้แล้วน้อยมาก มันบอกว่าไม่มีอะไรเกี่ยวกับวิธีการเลื่อน (เฉพาะวิธีการเปลี่ยนเข้าและออกจากโหมดคัดลอก) และการรวมกันของคำนำหน้าคีย์คำสั่งเริ่มต้นคือCtrl-B( Ctrl-Aเป็นค่าเริ่มต้นสำหรับหน้าจอ GNU)
Anthony Geoghegan

1
ไม่แน่ใจว่าผู้เขียนคำตอบนี้เข้าใจคำถามหรือไม่ มันไม่ช่วยเหลือและผิด
Vik

2
ฉันกำลังมองหาวิธีหยุดเลื่อนเป็นเวลานานขอบคุณที่ชี้ให้เห็น!
PERR0_HUNTER
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.