Bagaimana cara saya menggulir di tmux?


1293

Saya baru saja mulai menggunakan tmux, dan saya sangat menyukainya, tetapi saya harus dapat menggulir di dalam buffer / panel / windows yang telah saya buka. Saya tidak peduli apakah itu berfungsi dengan mouse atau tidak. Ketika saya mencari halaman manual tmux, saya hanya menemukan dua contoh kata "scroll" yang muncul, dan keduanya berhubungan dengan mode salin. Apakah ada cara untuk menggulir tanpa semua overhead memasuki mode salin?


8
Apa overhead yang Anda khawatirkan? copy-modeadalah cara untuk melihat riwayat (dan secara opsional menyalin hal-hal dari itu).
Chris Johnsen

2
bagi saya, Anda dapat menekan f7 untuk mode gulir dan q untuk berhenti
JohnMerlino

7
set -g mode-mouse onjawaban per @ chaiyachaiya adalah pemenang untuk saya
Peter Berg

Jawaban:


1569

Ctrl- blalu [Anda dapat menggunakan tombol navigasi normal untuk menggulirkan (mis. Up Arrowatau PgDn). Tekan quntuk keluar dari mode gulir.

Atau Anda dapat menekan Ctrl- b PgUpuntuk langsung masuk ke mode salin dan gulir satu halaman ke atas (seperti itulah yang paling Anda inginkan)

Dalam vimode (lihat di bawah), Anda juga dapat menggulir halaman ke atas / ke bawah baris demi baris menggunakan Shift- kdan Shift- j(jika Anda sudah dalam mode gulir). Tanpa pergeseran, kursor bergerak alih-alih halaman.

Kutipan dari halaman manual :

tmux dapat dikontrol dari klien yang terpasang dengan menggunakan kombinasi tombol dari kunci awalan, 'C-b' (Ctrl-b) secara default, diikuti oleh tombol perintah.

 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

Ditambah banyak lagi. Perhatikan bahwa Anda harus menekan C-bdua kali jika Anda menggunakannya untuk halaman ke atas karena C-bterikat sebagai tombol perintah. Lihat halaman manual untuk informasi tentang membuat perintah mode salin dengan hitungan berulang.

Anda dapat mengatur mode penjilidan tombol menggunakan Ctrl- b, lalu

:set-window-option mode-keys emacs

atau vi.


14
Saya pikir C-b =secara choose-bufferdefault. Apakah maksud Anda C-b [(yang secara copy-modedefault)? Anda juga dapat menggunakan C-b PageUpuntuk memulai mode salin langsung pada halaman sebelumnya (sangat berguna ketika Anda tahu apa yang ingin Anda lihat / salin telah digulir dari halaman saat ini).
Chris Johnsen

4
Benar, tmux saya tidak memiliki mode gulir. Anda harus C-b [masuk ke mode salin dan kemudian menggunakan emacs atau vi key-bindings untuk bergulir. Ini sepertinya banyak langkah hanya untuk menggulir, tetapi manfaat tmux masih lebih besar daripada gangguan ini. Saya menggunakan macbook dan tidak ada kunci PageUp: - \. (Juga, bagaimana cara membuat kunci dengan penurunan harga seperti yang Anda lakukan, Dennis?)
chadoh

44
@chadoh: Coba ini di Macbook Anda: Home: fn-LeftArrow; Akhir: fn-RightArrow; Halaman Atas: fn-UpArrow; Page Down: fn-DownArrow. Untuk membuat keycaps:<kbd>Ctrl</kbd>
Dennis Williamson

5
di macbook, fn + up langsung ke aplikasi terminal dan tidak pernah menyentuh tmux
Tyler

15
Pada macbook jika Anda dalam mode gulir, Anda dapat menggunakan fn + Shift + LeftArrow untuk menggulir halaman.
Nick Hammond

306

Nah, Anda harus mempertimbangkan cara yang tepat untuk mengatur gulir: tambahkan di tmux.conf

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

atau

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

Ini bekerja untuk saya di jendela dan panel. Sekarang tmux sempurna.

Tmux praktis memiliki info lebih lanjut tentang file tmux.conf.


5
Ketika saya melakukan ini, klik dan gulir mouse menyebabkan karakter omong kosong dicetak ke area prompt terminal yang saya gunakan dengan tmux. Ada ide?
ely

22
Pengguna tmux mouse di masa mendatang: Untuk menghemat Anda harus menggulir ke bawah lagi sebelum mengetik, Anda dapat menekan quntuk keluar dari mode gulir.
Jezen Thomas

15
Pengguliran mouse berfungsi dengan baik dengan ini, tetapi sayangnya saya tidak dapat menggunakan mouse untuk memilih teks lagi. Menggunakan Tilda dan tmux.
friederbluemle

27
Perhatikan bahwa pada tmux 2.1 dan lebih tinggi, ini diganti dengan set -g mouse on, dan gulir tidak secara otomatis memasuki mode salin seperti sebelumnya.
thrnio

25
Catatan penting: Pengaturan ini mematahkan sorotan dan menyalin teks. Gunakan shift + klik untuk mempertahankan fungsi ini.
Shadoninja

141

Dari .tmux.conf saya:

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

Ini memungkinkan pengguliran xterm asli.


28
Bisakah Anda jelaskan apa yang dilakukannya?
Ivo

11
Saya tidak tahu apa fungsinya, tetapi itu benar-benar jenius. Akhirnya, tmux scrolling berfungsi, yay!
diri sendiri

5
Ini tidak berfungsi untuk saya di OS X ...
Nick


6
Lihat ini jika Anda bingung tentang jawaban togdon: superuser.com/questions/310251/... IMO, jika Anda hanya memiliki satu panel, solusi ini berfungsi lebih baik daripada jawaban yang diterima.
thameera

57

Untuk tmux 2.1 terbaru, untuk menggulir dengan mouse Anda dengan baik, ini adalah jawaban yang tepat:

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

tidak cukup hanya dengan memuat ulang .tmux.conf Anda, Anda perlu memulai ulang tmux Anda, mis tmux kill-server && tmux

diambil dari https://github.com/tmux/tmux/issues/145


1
Bagaimana ini bukan jawaban yang diterima?
Marcel

2
catatan dalam jawaban ini tentang "tidak cukup hanya memuat ulang .tmux.conf membantu" dan keluar dari semua sesi tmux untuk saya (mungkin kill-server akan bekerja) membantu!
Colin D

1
dapatkah Anda menjelaskan bagaimana ini bekerja?
oligofren

Tampaknya untuk meneruskan peristiwa mouse ketika mouse diklik / digulir / dll. jika panel dalam keadaan tidak langsung / buffered (hanya mode salin?), dan mouse menekan tombol, menggulir, dll. Bagian terakhir mencakup menggulir dalam mode langsung dengan beralih ke mode tidak langsung terlebih dahulu. Jika bukan karena kontrol-kontrol itu, terminal mungkin menafsirkan peristiwa-peristiwa tersebut sebagai pengguliran riwayat, jika memang ada. Dengan mengatakan itu, saya tidak tahu apakah saya pernah bisa mendapatkan pager dan Vim saya untuk menggulir dengan benar pada saat yang sama, dan saya sudah mencoba banyak potongan-potongan potongan sekitar.
John P

2
@ chefarov - per komentar pada jawaban lain, Anda dapat melakukan ini melalui Shift+clicksaat Anda mengaktifkan mode mouse.
Brendan Moore

14

Dalam kasus saya, cukup opt+ UpArrowdan opt+ DownArrowdi OSX.


@ fixer1234 Pertanyaannya tidak menyebutkan Linux sama sekali. tmuxdapat digunakan pada OS X juga.
slhck

@ Slhck: Terima kasih. Bermata terlalu mata; astigmatisme muncul. Saya salah membaca tag tmux sebagai tag linux.
fixer1234

11

Ini adalah cara saya membuatnya bekerja, dan alasan mengapa saya pikir itu lebih baik daripada cara default.

Untuk mencobanya, masukkan semua bagian kode ~/.tmux.conf.

Langkah 1. Ubah kunci awalan sehingga Anda tidak perlu mencapai sedikit pun. 'B' tampaknya merupakan kunci dekat, tetapi berada di tengah-tengah kedua jari telunjuk (di 'F' dan 'J', masing-masing). Karena jalan pintas itu penting dalam tmux, Cj jauh lebih baik karena melibatkan gerakan tanpa tangan (selain dari menekan tombol).

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

Langkah 2. 'S' (untuk masuk ke mode salin) adalah: 1) tutup (alasan yang sama seperti di atas), 2) melibatkan sisi lain (bandingkan: 1-2 dalam tinju, atau lsperintah untuk melihat file dalam direktori ), dan 3) dapat dianggap sebagai mnemonik untuk "gulir" (walaupun mode salin bukan hanya tentang menggulir).

bind s copy-mode

Langkah 3. Bagian terakhir, gulir yang sebenarnya. 'P' dan 'N' familiar untuk tujuan ini bagi pengguna Emacs. Mereka dekat, intuitif ('P' di atas 'N' pada keyboard), dan mnemonik ("sebelumnya" dan "berikutnya"). Jika Anda baru saja menggulir di Emacs, dan kemudian pergi ke tmux, masuk akal untuk memiliki pintasan tersebut.

Namun, saya menemukan bahwa 'I' dan 'K' bahkan lebih baik - mereka bahkan lebih dekat daripada 'P' dan 'N', dan intuitif (untuk alasan yang sama); seperti untuk mnemonik - karena menggulir adalah hal yang biasa dilakukan, mnemonik tidak akan terlalu penting karena pintasan akan segera memotong otak Anda dan memasuki memori otot.

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

Saya sering mencari-cari ini dan solusi terbaik bagi saya berfungsi sebagaimana disebutkan dalam panduan terperinci ini: http://tangledhelix.com/blog/2012/07/16/tmux-and-mouse-mode/

Tambahkan binding ini di ~ / .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

Dengan pendekatan di atas yang diterapkan, Anda dapat menyalin dari panel di jendela juga dengan memperbesar ke setiap panel terlebih dahulu menggunakan Awalan + .

Satu detail penting yang tidak ada dalam mode mouse adalah dengan menekan Shift sebelum memilih area yang akan disalin. Ini akan menyalinnya ke buffer terminal tradisional alih-alih buffer copy tmux. ( https://wiki.archlinux.org/index.php/Tmux#Scrolling_issues )


7

Saya akan merekomendasikan untuk mencoba plugin tmux-better-mouse-mode untuk menyelesaikan sebagian besar masalah terkait mouse tmux Anda.

Ini kompatibel dengan Tmux 2.1+ dan set-option -g mouse onpendekatan baru .


1
Terima kasih, ini solusi terbaik untukku. Ini mencakup semua binding roda mouse saya yang telah saya tambahkan secara manual (jadi saya tidak membutuhkannya lagi), dan ada dua fitur pembunuh yang sangat saya inginkan: scroll-without-changing-panedalam kombinasi dengan scroll-without-changing-panedan emulate-scroll-for-no-mouse-alternate-buffer. Sekarang pengalaman penggunaan tmux saya jauh lebih baik.
selurvedu

6

Satu-satunya hal yang bekerja untuk saya adalah memasukkan yang berikut ~/.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"

(Anda mungkin perlu mem-boot ulang agar ini berlaku)

Memperbarui:

Saya menemukan bahwa jika Anda mengubah pengaturan di Putty Connection> Data> tipe terminal ke "putty" (digunakan untuk memperbaiki beberapa masalah pemformatan) dari "xterm" maka solusi ini berhenti berfungsi.

Pembaruan 2:

Gunakan ini jika Anda ingin "dempul" sebagai jenis terminal Anda: set -g terminal-overrides "putty*:XT:smcup@:rmcup@:kUP5=\eOA:kDN5=\eOB:kLFT5=\eOD:kRIT5=\eOC"


2
Yang satu ini benar-benar menyelesaikan masalah gulir saya di aplikasi iPhone juga.
NathaneilCapital

Terakhir saya mencoba ini tidak berfungsi lagi, tetapi ini berhasil. Aneh. set -ga terminal-overrides ',xterm*:smcup@:rmcup@'
Jam

4

Ini bekerja untuk saya:

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

2
Sejak versi 2.1 (18 Oktober 2015) pilihan harusset -g mouse on
naoko

+1 untuk benar-benar memberikan path lengkap file konfigurasi. Jawaban @ chaiyachaiya akan sempurna jika tidak.
John McFarlane

1

FWIW, di macbook / OSX Mojave, setelah ctrl+[melakukan:

  • up arrow untuk berbaris
  • down arrow untuk line down
  • fn + up arrow untuk halaman atas
  • fn + down arrow untuk halaman ke bawah
  • q untuk keluar dari mode tampilan

0

Satu-satunya hal yang bekerja untuk saya adalah vim ~ / .tmux.conf set -g mode-mouse di ### Masukkan pengaturan ini dengan vim, lalu sumber file. tmux source-file ~ / .tmux.conf


Bisakah Anda menggunakan beberapa format untuk membuatnya lebih jelas? Gunakan tombol EDIT dan kemudian lihat opsi yang tersedia di editor untuk menambahkan format yang bermanfaat.
music2myear

-2
  • Ctrl+ A- untuk mulai menggulir
  • Ctrl+ C- untuk berhenti menggulir

3
Posting ini terlalu pendek untuk berguna menjawab pertanyaan. Ini menambahkan sangat sedikit informasi baru ke jawaban yang sudah diposting; ia tidak mengatakan apa pun tentang cara menggulir (hanya cara mengubah masuk dan keluar dari mode salin). Juga, kombinasi kunci awalan perintah default adalah Ctrl-B( Ctrl-Aadalah default untuk layar GNU).
Anthony Geoghegan

1
Tidak yakin apakah penulis jawaban ini bahkan memahami pertanyaannya. Itu tidak membantu dan salah.
Vik

2
Saya sudah mencari cara untuk berhenti menggulir begitu lama, terima kasih telah menunjukkannya!
PERR0_HUNTER
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.