Bagaimana saya bisa mencari di dalam buffer output dari shell tmux?


180

Saya tidak bisa melakukan ini. Bagaimana saya bisa mencari buffer dari shell tmux?


1
Versi apa dari tmux( tmux -V)? Saya percaya ini ditambahkan dalam versi 0.9.
Dennis Williamson

@ Dennis sekarang 1,3-1
NES

1
Menemukan versi dengan tmux -Vhanya berfungsi di versi yang lebih baru. Di Ubuntu / Debian Anda dapat melakukan: dpkg -l | grep tmux
Niels Bom

Jawaban:


275

pencarian mode salin

Untuk mencari di tmuxbuffer riwayat untuk jendela saat ini, tekan Ctrl- b [untuk masuk copy mode.

Jika Anda menggunakan binding kunci emacs (default), tekan Ctrl- slalu ketik string untuk mencari dan tekan Enter. Tekan nuntuk mencari string yang sama lagi. Tekan Shift- nuntuk pencarian terbalik. Tekan Escapedua kali untuk keluar copy mode. Anda dapat menggunakan Ctrl- runtuk mencari di arah sebaliknya. Perhatikan bahwa karena tmuxmengendalikan keyboard di copy mode, Ctrl- sberfungsi terlepas dari stty ixonpengaturan (yang saya ingin miliki stty -ixonuntuk mengaktifkan pencarian maju di Bash).

Jika Anda menggunakan binding kunci vi ( Ctrl- b:set-window-option -g mode-keys vi), tekan /lalu ketik string untuk mencari dan tekan Enter. Tekan nuntuk mencari string yang sama lagi. Tekan Shift- nuntuk pencarian terbalik seperti dalam mode emacs. Tekan qdua kali untuk keluar copy mode. Anda dapat menggunakannya ?untuk mencari ke arah sebaliknya.

temukan-jendela

Jika Anda ingin beralih ke jendela berdasarkan sesuatu yang ditampilkan di dalamnya (ini juga termasuk nama dan judul jendela tetapi bukan riwayat), (dimulai dengan lebih dari satu jendela terbuka) tekan Ctrl- b flalu ketik string yang akan dicari dan tekan Enter. Anda akan dialihkan ke jendela yang berisi teks itu jika ditemukan. Jika lebih dari satu jendela cocok, Anda akan melihat daftar untuk dipilih.


3
Bagaimana saya bisa mengatur gaya mengikat? (emacs vs vi)
Daniel Que

2
@DanielQue: Lihatlah halaman manual tmux dan cari "mode-keys" dan "status-keys". Itu adalah sub-perintah yang memungkinkan Anda untuk mengatur gaya pengikatan. Sebagai alternatif, mungkin lebih mudah untuk mengatur variabel lingkungan ( EDITORatau VISUAL) ke gaya yang Anda inginkan sebelum memulai tmux.
Dennis Williamson

6
Terima kasih, saya dapat menggunakannya set-window-option -g mode-keys vidi .tmux.conf. Tapi saya ingin tahu tentang alternatif variabel lingkungan dan tidak bisa berfungsi. Apakah itu variabel lingkungan shell, atau variabel lingkungan tmux yang harus diatur dalam file conf?
Daniel Que

2
@DanielQue: Variabel lingkungan shell. Ini perlu diekspor atau ditempatkan di lingkungan tmux seperti ini:VISUAL=vi tmux
Dennis Williamson

1
Perhatikan juga bahwa belum ada pencarian regex, di sini ada masalah terbuka tentang itu sourceforge.net/p/tmux/tickets/9
Elijah Lynn

7

Masuk ke mode salin dan mulai mencari dalam sekali jalan

bind-key / copy-mode \; send-key ?

memungkinkan Anda melakukan hal-hal berikut:

 Ctrl + B /

dan mulai mengetik istilah pencarian.

Buang ke file dan gunakan vim

Ketika hal-hal lebih terlibat, saya hanya ingin menggunakan editor yang tepat: https://unix.stackexchange.com/questions/26548/write-all-tmux-scrollback-to-a-file

bind-key P 'capture-pane' \; capture-pane -S - \; save-buffer /tmp/tmux \; delete-buffer

Sekarang Pmembuang buffer ke file, dan kemudian saya hanya:

vim /tmp/tmux

Diuji dalam tmux 2.6.


Bagaimana cara saya membuat prompt ini untuk nama file (jadi saya tidak perlu hardcode /tmp/tmux)?
Peeyush Kushwaha

@PeeyushKushwaha maaf tapi tmux fu saya tidak begitu bagus, saya harus ke google, beri tahu saya jika Anda mengetahuinya.
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

1

Anda dapat menggunakan vim untuk melihat / mengedit / mencari / menyimpan log layar, lipat log pada setiap bash prompt:

tmux capture-pane -pS -1000000 |
  vim +":setl fen fdm=expr fde=getline(v:lnum)=~'^\\\\S\\+\\\\$\\\\s'?'>1':1"  -  

Sesuaikan regex sesuai permintaan Anda, gunakan empat backslash untuk setiap backslash di regex.

Atau letakkan fungsi vim di ~ / .vimrc:

command!           MoshFoldTmuxLog :setl fen fdm=expr
  \   fde=getline(v:lnum)=~'^\\S\\+\\$\\s'?'>1':1 

Dan di ~ / .bashrc tambahkan tanggal ke prompt, jika Anda memiliki banyak log untuk dicari. misalnya

PS1='\u@\h:\w:\D{%F-%T}$?:\$ ' # user-host-pwd-date-time-errno 
alias tmux-log='tmux capture-pane -pS -1000000 | vi +MoshFoldTmuxLog -'         

0

Inilah solusi yang saya temukan.

Anda dapat memodifikasi jalur target dan nama file:

# Save screen content to file
bind p command-prompt -p 'Save history to:' -I '~/tmux.history' 'capture-pane -S -32768 ; save-buffer %1 ; delete-buffer'

Setelah memuat ulang file konfigurasi tmux Anda dapat menekan prefix pdalam kasus saya Ctrl+a p Anda dapat mengubah bind pke kombinasi tombol pilihan Anda.

Milik saya yang pertama tidak berfungsi karena saya menimpa bind pdi baris lain jadi saya hanya berkomentar saja.

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.