tmux dalam praktiknya: scroll buffer

Perbezaan antara penyangga gulungan terminal dan tmux, dan cara mengubah mod salinan, tatal, dan pemilihan tetikus tingkah laku tmux.

Ini adalah bahagian ke-3 dari siri artikel praktik saya.

Biasanya emulator terminal melaksanakan buffer scrollback, jadi anda dapat meneroka output masa lalu, ketika ia bergerak dari pandangan. tmux, seperti aplikasi terminal skrin penuh lain seperti vim, berjalan dalam penyangga skrin alternatif yang disebut terminal induk. Penyangga alternatif mempunyai ukuran lebar dan tinggi yang tepat seperti ukuran tingkap fizikal.

Terdapat beberapa kesan penggunaan buffer alternatif:

  • Sebarang output, yang melebihi bahagian penyangga alternatif yang dapat dilihat, akan hilang. Sebaik sahaja garis keluar dari pandangan, mereka akan hilang. Untuk mengelakkan kehilangan sejarah, tmux menerapkan penyangga tatal balik "dalaman" sendiri. Akibatnya adalah bahawa anda tidak dapat bekerja dengan tatal balik tmux sama seperti yang biasa anda lakukan di terminal anda.
  • Sebarang output yang dihasilkan di dalam tmux (yang sama berlaku untuk vim, nano, man, kurang, dan lain-lain) tidak tumpah ke dalam sejarah tatal balik terminal luar. Apabila anda menutup aplikasi skrin penuh, anda akan kembali ke keadaan yang sama ketika anda melancarkan aplikasi dan tidak melihat output dari dalam aplikasi lagi.

Dalam praktiknya, jika anda terbiasa menatal kembali menggunakan ⌘↑dalam iTerm anda dan jika anda akan melakukan perkara yang sama dalam sesi tmux yang sedang berjalan, anda akan mengawal dan menatal penyangga tatal balik iTerm luar, dan bukannya penyangga skrol balik tmux.

Penyelesaiannya adalah dengan menggunakan kawalan khusus tmux untuk mengakses buffer scrollback sendiri: Ctrl-bkemudian [masuk ke mod salin, gunakan Down/Upanak panah PageDowndan dan PageUpkunci, qatau Enterkeluar dari mod salin.

Sebilangan orang yang menganggap ini menjengkelkan - mengkonfigurasikan buffer scrollback tmux agar boleh ditunjukkan dalam buffer scrollback terminal induk - sehingga mereka hanya dapat menggunakan kawalan tatal biasa. Lihat siaran ini. Walau bagaimanapun, penyelesaian ini terhad kepada sesi tmux dengan 1 tetingkap dan 1 panel sahaja. Dan apabila anda melepaskan / menutup sesi tmux, terminal induk tercemar dengan output tetingkap tmux.

Secara peribadi, saya menggunakan tatal balik tmux tanpa peretasan di atas, tetapi ubah konfigurasinya agar lebih mesra dan akrab.

Pertama sekali, saya tidak suka prefix,[memasuki mod salin. Saya sudah terbiasa untuk ⌘↑mula menatal di iTerm, dan saya telah menambahkan ikatan kunci root berikut:

# trigger copy mode bybind -n M-Up copy-mode

Setelah anda berada dalam mod salin, anda boleh terus menekan M-Upuntuk menatal 1 baris ke atas. Yang biasa PageDowndan PageUpkawalan tersedia untuk menatal mengikut keseluruhan skrin, dan tambahan M-PageDowndan M-PageUpuntuk menatal dengan separuh skrin (sangat mudah).

# Scroll up/down by 1 line, half screen, whole screenbind -T copy-mode-vi M-Up send-keys -X scroll-upbind -T copy-mode-vi M-Down send-keys -X scroll-downbind -T copy-mode-vi M-PageUp send-keys -X halfpage-upbind -T copy-mode-vi M-PageDown send-keys -X halfpage-downbind -T copy-mode-vi PageDown send-keys -X page-downbind -T copy-mode-vi PageUp send-keys -X page-up

Lebih-lebih lagi, walaupun saya berada di sesi tmux, saya masih dapat terus menggunakan ⌘↑dan ⌘↓untuk mengawal penyangga scrollback tmux dalaman, dan bukannya yang ada di iTerm. Ini mungkin dengan menggunakan profil iTerm tersuai dengan beberapa pengikat kunci diganti untuk mencetuskan tindakan tmux. Jadi ⌘↑ditekan dalam iTerm hanya menghantar M-Upkekunci untuk sesi tmux.

Baca bahagian sebelumnya dari siri "tmux in praktik" untuk maklumat lebih lanjut: tmux dalam praktik: integrasi iTerm2 dan tmux.

Lalai tmux lain yang saya lebih suka menukarnya adalah tatal roda tetikus. Ia bergulir dengan 5 baris, yang terasa seperti lompatan besar. Mari kurangkan untuk menatal sebanyak 2 baris:

# When scrolling with mouse wheel, reduce number of scrolled rows per tick to "2" (default is 5)
bind -T copy-mode-vi WheelUpPane select-pane \; send-keys -X -N 2 scroll-upbind -T copy-mode-vi WheelDownPane select-pane \; send-keys -X -N 2 scroll-down

Baiklah, sekarang mari kita bincangkan tentang menyalin teks setelah anda berada dalam mod salin. Saya terbiasa menyalin teks menggunakan tetikus. Mari aktifkan sokongan tetikus:

set -g mouse on

Secara lalai, apabila anda memilih teks dengan tetikus dalam tmux, teks disalin ke buffer, dan anda akan segera keluar dari mod salin. Kedudukan tatal semasa anda diset semula pada akhir output, dan anda berada dalam mod arahan cepat. Mari lihat ini dalam tindakan:

Seperti yang anda perhatikan, setiap kali saya memilih teks dengan tetikus, ia menyingkirkan saya dari mod salin. Sungguh menjengkelkan. Biasanya ketika saya tersekat dengan beberapa tugas, saya cenderung memilih beberapa teks di sana sini hanya untuk bertafakur (ia menolong saya memberi tumpuan?). Atau anda mungkin hanya mahu memilih beberapa teks untuk diketengahkan untuk rakan anda yang duduk di sebelah anda.

Oleh itu mari kita atasi ini Kami tidak mahu dikeluarkan dari mod salin. Kami tidak mahu pilihan dihapus pada acara seret tetikus. Teks dari pilihan boleh disalin pada klik kiri tetikus selepas itu.

# Do not copy selection and cancel copy mode on drag end event# Prefer iTerm style selection: select, then mouse click to copy to bufferunbind -T copy-mode-vi MouseDragEnd1Panebind -T copy-mode-vi MouseDown1Pane select-pane \;\ send-keys -X copy-pipe "pbcopy" \;\ send-keys -X clear-selection

Mari lihat hasilnya:

Untuk mengakses item penyangga salin dan menampal item terbaru, gunakan C-pdan p:

bind p paste-bufferbind C-p choose-buffer

Itu sahaja untuk hari ini. Nantikan. Pada bahagian seterusnya dari siri "tmux in praktik", kita akan membincangkan mengenai integrasi papan keratan, dan cara berkongsi teks yang disalin di dalam tmux dengan papan keratan sistem (baik secara tempatan dan ketika bekerja dari jauh, pada OSX dan Linux).

BTW, anda dapat melihat semua tetapan konfigurasi tersebut dalam tindakan, lihat saja repo tmux-config saya

Muslihat

Sekiranya anda ingin memintas mod salinan tmux sama sekali dan memilih teks melalui iTerm, tahan pt> key while dragging you mouse.

Resources and links

shell — What exactly is scrollback and scrollback buffer? — Unix & Linux Stack Exchange — //unix.stackexchange.com/questions/145050/what-exactly-is-scrollback-and-scrollback-buffer

tmux scrollback with iTerm2 • dan.carley.co — //dan.carley.co/blog/2013/01/11/tmux-scrollback-with-iterm2/

tmux copy mouse selected text to clipboard automatically on mouse release — Stack Overflow — //stackoverflow.com/questions/36815879/tmux-copy-mouse-selected-text-to-clipboard-automatically-on-mouse-release

keyboard shortcuts — tmux — scroll up/down with shift + page up/down into a pane — Super User — //superuser.com/questions/702189/tmux-scroll-up-down-with-shift-page-up-down-into-a-pane

[question/request] copy-mode without automatically selecting a pane? · Issue #1021 · tmux/tmux — //github.com/tmux/tmux/issues/1021

ssh — Leaving tmux scrollback in terminal (iTerm2) — Stack Overflow — //stackoverflow.com/questions/12865559/leaving-tmux-scrollback-in-terminal-iterm2

command line — Use terminal scrollbar with tmux — Super User — //superuser.com/questions/310251/use-terminal-scrollbar-with-tmux

Original text