Wie kann ich im Ausgabepuffer einer tmux-Shell suchen?


180

Ich kann das nicht zum Laufen bringen. Wie kann ich den Puffer einer tmux-Shell durchsuchen?


1
Welche Version von tmux( tmux -V)? Ich glaube, das wurde in Version 0.9 hinzugefügt.
Dennis Williamson

@Dennis es ist 1.3-1
NES

1
Das Finden der Version mit tmux -Vfunktioniert nur in späteren Versionen. In Ubuntu / Debian können Sie: dpkg -l | grep tmux
Niels Bom

Antworten:


275

Kopiermodus suchen

So suchen Sie in der tmuxHistorien - Puffer für das aktuelle Fenster, drücken Sie Ctrl- b [eingeben copy mode.

Wenn Sie emacs-Tastenzuordnungen verwenden (Standardeinstellung), drücken Sie Ctrl-, geben Sie sdie zu suchende Zeichenfolge ein und drücken Sie Enter. Drücken Sie n, um erneut nach derselben Zeichenfolge zu suchen. Drücken Sie Shift- nfür die Rückwärtssuche. Drücken Sie Escapezweimal , um zu beenden copy mode. Sie können verwendet werden Ctrl- rin umgekehrter Richtung zu suchen. Beachten Sie, dass da die tmuxKontrolle über die Tastatur in ist copy mode, Ctrl- sfunktioniert, unabhängig von der stty ixonEinstellung (die ich haben möchte stty -ixon, um Forward-Suchen in Bash zu ermöglichen).

Wenn Sie vi-Tastenkombinationen ( Ctrl- b:set-window-option -g mode-keys vi) verwenden, drücken Sie, geben Sie /die zu suchende Zeichenfolge ein und drücken Sie Enter. Drücken Sie n, um erneut nach derselben Zeichenfolge zu suchen. Drücken Sie Shift- nfür die Rückwärtssuche wie im Emacs-Modus. Drücken Sie qzweimal , um zu beenden copy mode. Mit können Sie ?in umgekehrter Richtung suchen.

Suchfenster

Wenn Sie zu einem Fenster wechseln möchten, das auf einer Anzeige basiert (dies umfasst auch Fensternamen und -titel, jedoch nicht den Verlauf), drücken Sie (beginnend mit mehr als einem geöffneten Fenster) Ctrl- und geben Sie b fdann die Zeichenfolge ein, nach der gesucht werden soll, und drücken Sie Enter. Sie werden zu einem Fenster weitergeleitet, das diesen Text enthält, wenn er gefunden wird. Wenn mehr als ein Fenster übereinstimmt, wird eine Liste angezeigt, aus der Sie auswählen können.


3
Wie kann ich den Bindungsstil festlegen? (emacs vs vi)
Daniel Que

2
@DanielQue: Schauen Sie sich die tmux-Manpage an und suchen Sie nach "mode-keys" und "status-keys". Dies sind Unterbefehle, mit denen Sie den Bindungsstil festlegen können. Alternativ ist es möglicherweise einfacher, eine Umgebungsvariable ( EDITORoder VISUAL) auf den gewünschten Stil festzulegen, bevor Sie beginnen tmux.
Dennis Williamson

6
Danke, ich habe es set-window-option -g mode-keys viin meinem .tmux.conf. Aber ich war neugierig auf die umweltvariable Alternative und konnte sie nicht zum Laufen bringen. Handelt es sich um eine Shell-Umgebungsvariable oder um eine tmux-Umgebungsvariable, die in der conf-Datei festgelegt werden muss?
Daniel Que

2
@DanielQue: Eine Shell-Umgebungsvariable. Es muss exportiert oder wie folgt in die Umgebung von tmux gestellt werden:VISUAL=vi tmux
Dennis Williamson

1
Beachten Sie auch, dass es noch keine Regex-Suche gibt. Hier ist eine offene Ausgabe. Sourceforge.net/p/tmux/tickets/9
Elijah Lynn

7

Aktivieren Sie den Kopiermodus und starten Sie die Suche auf einmal

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

ermöglicht es Ihnen, nur zu tun:

 Ctrl + B /

und geben Sie den Suchbegriff ein.

In eine Datei ausgeben und vim verwenden

Wenn die Dinge komplizierter werden, möchte ich nur einen geeigneten Editor verwenden: 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

Nun wird Pder Puffer in eine Datei kopiert und ich führe einfach Folgendes aus:

vim /tmp/tmux

Getestet in tmux 2.6.


Wie mache ich diese Eingabeaufforderung für den Dateinamen (damit ich nicht hart codieren muss /tmp/tmux)?
Peeyush Kushwaha

@PeeyushKushwaha sorry aber mein tmux fu ist nicht so gut, ich müsste googeln, lass es mich wissen wenn du es herausfindest.
Ciro Santilli新疆改造中心法轮功六四事件

1

Sie können vim verwenden, um das Bildschirmprotokoll anzuzeigen / zu bearbeiten / zu suchen / zu speichern. Falten Sie das Protokoll bei jeder Bash-Eingabeaufforderung:

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

Passen Sie die Regex entsprechend Ihrer Eingabeaufforderung an. Verwenden Sie vier Backslashs für jeden Backslash in Regex.

Oder setzen Sie die vim-Funktion in ~ / .vimrc:

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

Fügen Sie in ~ / .bashrc das Datum zur Eingabeaufforderung hinzu, wenn Sie viele Protokolle zum Durchsuchen haben. z.B

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

0

Hier ist eine Lösung, die ich gefunden habe.

Sie können auch den Zielpfad und den Dateinamen ändern:

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

Nach dem erneuten Laden der tmux-Konfigurationsdatei können Sie prefix pin meinem Fall auf drücken. Ctrl+a p Sie können bind pzu Ihrer bevorzugten Tastenkombination wechseln .

Zuerst funktionierte meins nicht, weil ich bind pin einer anderen Zeile überschrieb , also habe ich das nur auskommentiert.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.