เลื่อนเอาต์พุตเชลล์ด้วยเมาส์ใน tmux


256

การเลื่อนเมาส์ไม่ทำงานในtmuxวิธีการทำงานเมื่อฉันเรียกใช้เชลล์โดยไม่ต้อง tmux (ใน Terminal Gnome) ดูเหมือนว่า tmux จะส่งเหตุการณ์การเลื่อนเมาส์ราวกับว่าฉันกดปุ่มขึ้น / ลง แต่ฉันต้องการเลื่อนดูแม้ว่าประวัติเอาต์พุตของเชลล์ มีวิธีทำให้ tmux ทำงานเช่นนี้หรือไม่?

หมายเหตุ:ฉันรู้วิธีเลื่อนด้วยแป้นพิมพ์ (ขอบคุณคำถามอื่นที่นี่)

ฉันพยายามเลื่อนเมาส์ใน tmux สองเวอร์ชัน:


1
ฉันคิดว่าคำตอบของ bukzor แก้ปัญหาของคุณสำหรับ tmux 1.5 และใหม่กว่า
kynan

คำตอบ:


252

หากต้องการเลื่อนภายในประวัติของเอาต์พุตคุณจะต้องใช้^b+ [ คุณสามารถใช้ M + V เพื่อเลื่อนหน้าขึ้นและ ^ V เพื่อเลื่อนหน้าลง ฉันไม่รู้ว่าคุณสามารถใช้ของจริงได้PgUpหรือPgDownไม่ เทอร์มินัลของฉันไม่ส่งคีย์เหล่านี้ไปยัง tmux แต่จะเลื่อนเองและไม่ใช่ประวัติ tmux

หากต้องการออกจากโหมดถ่ายสำเนาให้กด ESC

หากต้องการใช้เมาส์ของคุณในโหมดนี้ (เรียกว่าโหมดคัดลอก) กด^b+ : และป้อนต่อไปนี้:

setw -g mouse on

หมายเหตุ: ใน tmux <2.1 ตัวเลือกจะถูกตั้งชื่อmode-mouseและไม่ใช่mouse

ตอนนี้เมื่อคุณเปลี่ยนเป็นโหมดการคัดลอกคุณสามารถใช้เมาส์เพื่อเลื่อนดูได้ คุณสามารถใส่คำสั่งนี้ใน ~ / .tmux.conf ของคุณหากคุณต้องการให้มันโหลดทุกครั้งที่คุณรัน tmux

อัปเดต:ตั้งแต่ tmux 1.5 ตัวเลือกนี้ทำให้การใช้ล้อเลื่อนเลื่อนไปที่โหมดการคัดลอกโดยอัตโนมัติและเลื่อนบัฟเฟอร์การเลื่อนกลับของ tmux ไม่จำเป็นต้องกดCtrl-B+ ครั้งแรก[อีกต่อไป การเลื่อนกลับไปที่พรอมต์จะสิ้นสุดโหมดคัดลอกโดยอัตโนมัติ


1
โปรดทราบว่าคุณอาจต้องโหลดไฟล์กำหนดค่าใหม่หากคุณมีเซิร์ฟเวอร์ tmux ที่กำลังทำงานอยู่ blog.sanctum.geek.nz/reloading-tmux-config tmux source-file ~ / .tmux.conf
Allan Nienhuis

7
ไม่ทำงานสำหรับฉันใน OS X.
Ain

2
@Ain - ขณะนี้มี OS 11 เวอร์ชันหลัก 11 เวอร์ชันเรากำลังพูดถึงรุ่นอะไรกันแน่?
Ramhound

10
สำหรับ tmux> = 2.1 ดูคำตอบของ @ DannyRe (ในปัจจุบันค่อนข้างไกล)
joelostblom

3
set -g mouse onทำงานกับฉันใน macOS tmux 2.1
Miguel Mota

123

มีการเปลี่ยนแปลงบางอย่างสำหรับ Tmux 2.1

  • โหมดเมาส์ถูกเขียนใหม่ ตอนนี้ไม่มีตัวเลือกสำหรับ:

    • เมาส์ปรับขนาดบานหน้าต่าง
    • เมาส์เลือกบานหน้าต่าง
    • เมาส์เลือกหน้าต่าง
    • โหมดเมาส์

    มีเพียงตัวเลือกเดียว: 'เมาส์' ซึ่งเปิดใช้งานการสนับสนุนเมาส์ทั้งหมด

นั่นจะเป็น

set -g mouse on
# to enable mouse scroll, see https://github.com/tmux/tmux/issues/145#issuecomment-150736967
bind -n WheelUpPane if-shell -F -t = "#{mouse_any_flag}" "send-keys -M" "if -Ft= '#{pane_in_mode}' 'send-keys -M' 'copy-mode -e'"

6
ขอบคุณตอนนี้เลือกบานหน้าต่างทำงาน ฯลฯ แต่การเลื่อนไม่ได้ เพื่อให้การเลื่อนทำงานอีกครั้งให้ใช้สิ่งนี้: github.com/NHDaly/tmux-scroll-copy-mode
Mahdi

1
ยอดเยี่ยม - มันใช้งานได้กับ cygwin - tmux ใน WINDOWS 7
GWD

@Mahdi ดูเหมือนว่านี่จะไม่ทำงานบน osx คำใบ้ใด ๆ
DiTTiD

2
bindดูเหมือนจะไม่จำเป็นอีกต่อไปใน tmux 2.3
Theron Luhn

2
+1 set -g mouse onสำหรับ ความคิดเห็นก่อนหน้านี้ถูกต้อง การผูกไม่จำเป็นอีกต่อไป
Dakusan

63

tmux เวอร์ชันปัจจุบัน (1.5) ให้คุณตั้งค่าตัวเลือกโหมดเมาส์และช่วยให้คุณเลื่อนด้วยล้อเลื่อนของเมาส์

         mode-mouse [on | off]
                 Mouse state in modes.  If on, the mouse may be used to
                 enter copy mode and copy a selection by dragging, to
                 enter copy mode and scroll with the mouse wheel, or to
                 select an option in choice mode.

ใน. tmux.conf ของฉัน:

set-window-option -g mode-mouse on

นั่นคือพฤติกรรมที่คุณต้องการจริงๆ! การเลื่อนเมาส์เพื่อเปิดใช้งานโหมดการคัดลอกไม่ใช่แค่เลื่อนบัฟเฟอร์สำรองของเชลล์ ในที่สุดมันก็เป็นแรงจูงใจให้เปลี่ยนจากหน้าจอเป็นtmuxสำหรับฉัน มีตัวเลือกในการรับพฤติกรรมเดียวกันกับ Shift + PgUp หรือไม่
kynan

1
@ kynan: โดยส่วนตัวแล้วฉันเพียงกดC-A PgUpเพื่อทำเช่นนั้น tmux bind-key -n PPage copy-mode -uคุณสามารถผูกคีย์หน้าขึ้นโดยตรง Thign ที่คล้ายกันควรใช้งาน shift + pageup ถ้าคุณยกเลิกการผูกมันจากเทอร์มินัลท้องถิ่นของคุณ
bukzor

1
สิ่งนี้ส่งผลให้เกิดพฤติกรรมแปลก ๆ ที่เมื่อฉันเลื่อนกลับไปที่บรรทัดคำสั่งฉันได้รับอักขระพิเศษที่แทรกเข้าไปใน CLI ซึ่งมักส่งผลให้คำสั่งแรกของฉันผิดรูปแบบ มันค่อนข้างน่ารำคาญ
Chris R

โปรดทราบว่าอย่างไรก็ตามวิธีนี้ใช้งานได้ดีสำหรับการกระตุ้นการเลื่อนด้วยเมาส์มันทำให้เกิดพฤติกรรมแปลก ๆ เมื่อเลือกข้อความที่จะวางด้วยการคลิกกลาง ฉันสิ้นสุด preffering Cb pg-up / down (ค่าเริ่มต้น) เนื่องจากการแลกเปลี่ยนไม่เป็นที่ยอมรับ
h7r

@ ChrisR ฉันได้รับมันเช่นกันและมันก็ค่อนข้างไม่สอดคล้องกัน มันเป็น [M [M # M [M # M [M # M [M # M M [M # [M ประเภทของสตริง]?
Elijah Lynn

53

ลองสิ่งนี้ใน. tmux.conf ของคุณ

# Make mouse useful in copy mode
setw -g mode-mouse on

# Allow mouse to select which pane to use
set -g mouse-select-pane on

# 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"

# Scroll History
set -g history-limit 30000

# Set ability to capture on start and restore on exit window data when running an application
setw -g alternate-screen on

# Lower escape timing from 500ms to 50ms for quicker response to scroll-buffer access.
set -s escape-time 50

นำมาจากhttp://brainscraps.wikia.com/wiki/Extreme_Multitasking_with_tmux_and_PuTTY


+1 สำหรับescape-timeการตั้งค่า
Dakusan

สำหรับผู้อื่นที่สงสัยไฟล์. tmux.conf จะอยู่ในโฮมไดเร็กตอรี่ของคุณ
2647513

15

บางคน (จากแหล่งข้อมูลที่ฉันทำหาย) แนะนำให้เพิ่มสิ่งต่อไปนี้ใน~.tmux.conf:

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

ฉันไม่รู้เลยว่ามันทำงานอย่างไรหรือทำงานอย่างไร แต่ตอนนี้ฉันสามารถเลื่อนด้วยเม้าส์ล้อในเซสชั่น tmux โดยไม่ต้องเข้าสู่โหมดการคัดลอกของ tmux; ฉันแค่เลื่อนล้อและ BAM! มันได้ผล. โปรดทราบว่าฉันกำลังใช้ terminal.app แต่ฉันจำได้ว่า OP ให้คำตอบสำหรับการใช้งานโดยgnome-terminalเฉพาะ


1
เจดขอบคุณ! คำแนะนำของคุณทำงานใน gnome-terminal ด้วยเช่นกัน ฉันจะพยายามใช้การตั้งค่านี้ในบางครั้ง แต่มันมีข้อเสีย: ขณะนี้การเลื่อนเมาส์ไม่ทำงานอย่างที่คาดlessไว้ ถ้าผมโหลดlessภายในเลื่อนเมาส์ไม่เลื่อนไฟล์เปิดในtmux lessมันเลื่อนเทอร์มินัลทั้งหมด ตระการตาvimประพฤติตามที่คาดไว้ในtmuxการตั้งค่าของคุณ
user31494

2
โปรดทราบว่าตั้งแต่ tmux 1.5 setw -g mode-mouse onตัวเลือกนี้จะถูกแทนที่โดยตัวเลือกซึ่งทำหน้าที่เลื่อนโหมดการคัดลอกโดยใช้ล้อเลื่อนของเมาส์
kynan

3
คำอธิบายคือตัวเลือกนี้จะปิดการใช้งานการล็อคการเลื่อนบนหน้าจอทางเลือกของเทอร์มินัลซึ่งเป็นที่ต้องการในกรณีส่วนใหญ่เนื่องจากแอปพลิเคชันที่ร้องขอบัฟเฟอร์หน้าจอทางเลือก (vi, น้อยกว่า, tmux เป็นต้น) ให้ความสามารถในการเลื่อน การแทนที่ล็อคนี้ใน tmux ช่วยให้สามารถเลื่อนบัฟเฟอร์หน้าจอสำรองของเทอร์มินัลซึ่งไม่ได้ให้ผลลัพธ์ที่ต้องการในทุกกรณี แต่บางกรณี ดูคำตอบนี้เพื่ออ้างอิงจากการman xtermอธิบายหน้าจอทางเลือก
kynan

อนิจจานี่ใช้งานไม่ได้กับ iTerm
Suan

ฉันได้ผลลัพธ์ที่เป็นบวกกับสิ่งนี้ใน iTerm 2
Keith Smiley

5

tmux 2.1 แนะนำการผูกเมาส์ใหม่

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

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

bind -n WheelUpPane if "[[ #{pane_current_command} =~ vim ]]" "select-pane -t = ; send-keys -M" "select-pane -t = ; send-keys Up"
bind -n WheelDownPane if "[[ #{pane_current_command} =~ vim ]]" "select-pane -t = ; send-keys -M" "select-pane -t = ; send-keys Down"

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


ตอนนี้ฉันแค่เล่นกับความคิดในการสร้างมูสบนขอบบานหน้าต่างทำสิ่งที่น่าสนใจ อาจเป็นสิ่งที่ฉันจะทำไม่ได้ล้อแผนที่ที่ชายแดน แต่แผนที่เพื่อรอบ Windows tmux เมื่อเสร็จสิ้นการสถานะ
Steven Lu

ลิงค์ไปยัง Github ของคุณคืออะไร? ฉันต้องการติดตามความพยายามของคุณ! คุณสมบัติอื่นที่ฉันกำลังค้นหาคือการดับเบิลคลิกคัดลอกคำไปยังคลิปบอร์ด X เช่นเดียวกับที่อยู่นอก Tmux
joeytwiddle

@joeytwiddle ผมขอแนะนำให้github.com/NHDaly/tmux-better-mouse-modeดูคำตอบอื่น ๆ ของฉัน
สตีเว่น Lu

3

Gnome-terminal จะใช้กลอุบายอย่างพิถีพิถันในการแปลเหตุการณ์การเลื่อนเมาส์ไปยังปุ่มลูกศรขึ้นและลงในสภาวะการเลื่อน "ปกติ" ที่ จำกัด ตัวอย่างเช่นเมื่อคุณดูข้อความบางส่วนใช้less(นี้เกิดขึ้นโดยเฉพาะอย่างยิ่งเมื่อคุณกำลังอ่านคน) คุณสามารถเลื่อนเนื้อหาโดยใช้j, kและปุ่มลูกศร แต่ยังมีgnome-terminalคุณสามารถทำเช่นนั้นได้ด้วยการเลื่อนเมาส์ขอบคุณเคล็ดลับดังกล่าว

ดังนั้นฉันจึงเดาว่าtmux"การจับภาพ" ของเครื่องเทอร์มินัลเหมือนกันless- และกลไกแบบเดียวกันในการgnome-terminalเตะ: การเลื่อนเมาส์แปลเป็นปุ่มลูกศรขึ้น / ลง

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


ขอบคุณสำหรับคำอธิบาย uldtko! แต่มันไม่ได้ช่วยแก้ไขปัญหาการเลื่อนเมาส์ ใช่เมื่อปิดการใช้งานตัวเลือกgnome-terminalหยุดส่งสาม^[[Aและ^[[Bเมื่อเลื่อนเมาส์ มันยอดเยี่ยมกว่าtmux(ไม่น่าเกลียด^[[A^[[A^[[Aในบางโปรแกรมไม่มีคำสั่งเลื่อนประวัติ - น่าเกลียด) แต่ตอนนี้lessหยุดเลื่อนบนเม้าส์เลื่อน
user31494

1
ยูเครน? (คาดเดาโดยiตัวละคร)
dotancohen

1

https://github.com/NHDaly/tmux-better-mouse-mode

การปรับใช้การควบคุมเมาส์ที่กำหนดค่าได้และคุณสมบัติหลากหลายสำหรับ tmux รุ่นใหม่ ขอแนะนำอย่างยิ่ง

คุณอาจต้องการใช้

set -g @emulate-scroll-for-no-mouse-alternate-buffer "on"

กับมันยัง


ฉันติดตั้งแล้ว แต่ไม่สามารถเน้นและคัดลอกข้อความด้วยเมาส์ได้อีกต่อไป คุณสามารถทำสิ่งนี้ได้หรือไม่
jonathanking

ใช่คุณน่าจะมีเมาส์อื่น ๆ ที่เกี่ยวข้องกับการกำหนดค่า tmux ที่ขัดแย้งกับมัน
Steven Lu

0

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

รหัสของฉัน:

bind -n WheelUpPane if -t = "test $(echo #{pane_current_command} |grep -e 'man' -e 'less' -e 'journalctl')" "select-pane -t = ; send-keys Up Up Up Up"  "if-shell -F -t = '#{?mouse_any_flag,1,#{pane_in_mode}}' 'send-keys -M' 'select-pane -t = ; copy-mode -e; send-keys -M'"
bind -n WheelDownPane if -t = "test $(echo #{pane_current_command} |grep -e 'man' -e 'less' -e 'journalctl')" "select-pane -t = ; send-keys Down Down Down Down"  "if-shell -F -t = '#{?mouse_any_flag,1,#{pane_in_mode}}' 'send-keys -M' 'select-pane -t = ; copy-mode -e; send-keys -M'"

คุณสามารถเพิ่มคำสั่งอื่น ๆ ที่ต้องใช้ปุ่มลูกศรสำหรับการเลื่อนในส่วนของ grep -e 'man'

ฉันเพิ่มปุ่มส่งหลาย ๆ ครั้งดังนั้นหนึ่งขีดบนเมาส์วีลจะเลื่อน 4 บรรทัดในแต่ละครั้ง


0

หากคุณอยู่ในเซสชั่น tmux แล้วคุณสามารถเรียกใช้คำสั่ง

set mouse on

คำเตือน: :การเรียกใช้คำสั่งให้ใช้คำนำหน้าของคุณแล้ว

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