Wie beschrifte ich tmux tabs mit dem Namen der in vim bearbeiteten Datei?

14

Jedes Mal, wenn ich eine tmux-Sitzung im Terminal öffne, sind alle Registerkarten mit vim-Sitzungen beschriftet vim.

Meine Frage ist: Wie man es so konfiguriert, dass es tmux-Tabs mit dem Namen der bearbeiteten Datei oder so etwas wie vim | test.cppdem Titel der fraglichen Tabs beschriftet .

Mayukh Sarkar
quelle
1
Kann dies helfen: stackoverflow.com/a/15124717/2558252 ?
Nobe4
Vielen Dank dafür, aber können Sie den Vorgang bitte etwas detaillierter erläutern? Außerdem ist die Antwort nicht vollständig. Der Typ gab nur einen Hinweis
Mayukh Sarkar
als die frage beantwortet wurde (und meiner meinung nach richtig) könntest du sie annehmen?
Nobe4

Antworten:

19

Es geht los:

autocmd BufReadPost,FileReadPost,BufNewFile,BufEnter * call system("tmux rename-window 'vim | " . expand("%:t") . "'")

Zerlegen:

autocmd BufReadPost,FileReadPost,BufNewFile,BufEnter * call

Führen Sie beim Lesen des Puffers, beim Lesen der Datei oder beim Puffern eines neuen Dateiereignisses (siehe :help autocmd-events) den folgenden Befehl aus:

call system()

Rufen Sie eine Systemfunktion auf und übergeben Sie den Text:

"tmux rename-window 'vim | "  

Benennen Sie das aktuelle Fenster mit einer Zeichenfolge um, die mit beginnt vim |

. expand("%:t") 

Fügen Sie der Zeichenfolge den Dateinamen hinzu (siehe diesen Artikel für die Formatierung und diesen Beitrag für die Erweiterungseinfügung).

. "'"

Fügen Sie das Finale hinzu ', um den Befehl zu schließen.

Nach dem Erweitern wird es so aussehen (während die .vimrc-Datei bearbeitet wird):

system("tmux rename-window 'vim | .vimrc'")

Wie @erthalion im Kommentar sagte, können Sie aufräumen, wenn Sie vim verlassen mit:

autocmd VimLeave * call system("tmux rename-window 'tmux'")
nobe4
quelle
1
Ich denke, es wird schön sein, ein BufEnterEreignis in diese Liste aufzunehmen (um die Bezeichnung zu ändern, auch wenn wir zwischen vorhandenen Puffern wechseln) und so etwas autocmd VimLeave * call system("tmux rename-window 'tmux'")zum Aufräumen.
Erthalion
3

Um das standardmäßige tmux-Benennungsschema beim Beenden von vim wiederherzustellen, können Sie auch Folgendes tun:

autocmd VimLeave * call system("tmux setw automatic-rename")
Raffael
quelle
Dies wird im Einklang mit der anderen Antwort verwendet und bietet die beste Lösung. Ich habe das tmux-Umbenennungsfenster-Snippet überall gesehen, aber dies ist das erste Mal, dass jemand auf die Option zum automatischen Umbenennen des tmux-Fensters hingewiesen hat. Vielen Dank.
f3xy
1

Das ist es, was ich dank der Antwort von @raphael in mein vimrc geschrieben habe

Ich installiere auch das Plugin tmux-plugins / vim-tmux-focus-events für die Ereignisse FocusGained und FocusLost.

augroup tmux                                                                                                                                                                                                                                                                                                                 
  autocmd!                                                                                                                                                                                                                                                                                                                 
  if exists('$TMUX')                                                                                                                                                                                                                                                                                                       
    autocmd BufReadPost,FileReadPost,BufNewFile,FocusGained * call system("tmux rename-window " . expand("%:t"))                                                                                                                                                                                                         
    autocmd VimLeave,FocusLost * call system("tmux set-window-option automatic-rename")                                                                                                                                                                                                                                  
  endif                                                                                                                                                                                                                                                                                                            
augroup END
f3xy
quelle