Comment étiqueter les onglets tmux avec le nom du fichier édité dans vim?

14

Chaque fois que j'ouvre une session tmux dans le terminal, tous les onglets contenant les sessions vim sont étiquetés vim.

Ma question est: comment le configurer pour étiqueter les onglets tmux avec le nom du fichier modifié ou quelque chose comme vim | test.cpputilisé comme titre des onglets en question.

Mayukh Sarkar
la source
1
cela peut-il aider: stackoverflow.com/a/15124717/2558252 ?
nobe4
merci pour cela, mais pouvez-vous s'il vous plaît élaborer le processus en détail? De plus, la réponse n'est pas complète. Le gars vient de donner un indice
Mayukh Sarkar
comme la question a été répondue (et à mon humble avis correctement) pourriez-vous l'accepter?
nobe4

Réponses:

19

Voilà :

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

Décomposition:

autocmd BufReadPost,FileReadPost,BufNewFile,BufEnter * call

Lors de la lecture du tampon, de la lecture du fichier ou de la mise en tampon d'un nouvel événement de fichier (voir :help autocmd-events), exécutez la commande suivante:

call system()

Appelez une fonction système et passez-lui le texte:

"tmux rename-window 'vim | "  

Renommez la fenêtre actuelle avec une chaîne commençant par vim |

. expand("%:t") 

Ajoutez à la chaîne le nom de fichier (voir cet article pour la mise en forme et ce post pour l'insertion expand)

. "'"

Ajoutez la finale 'pour fermer la commande.

Après l'avoir développé, il ressemblera (lors de la modification du fichier .vimrc):

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

Comme @erthalion l'a dit dans le commentaire, vous pouvez nettoyer en quittant vim avec:

autocmd VimLeave * call system("tmux rename-window 'tmux'")
nobe4
la source
1
Je pense que ce sera bien d'inclure l' BufEnterévénement dans cette liste (pour changer l'étiquette même lorsque nous basculons entre les tampons existants), et quelque chose comme ça autocmd VimLeave * call system("tmux rename-window 'tmux'")pour le nettoyage.
erthalion
3

Pour restaurer le schéma de nommage tmux par défaut lorsque vous quittez vim, vous pouvez également faire:

autocmd VimLeave * call system("tmux setw automatic-rename")
raphael
la source
Ceci est utilisé à l'unisson avec l'autre réponse fournit la meilleure solution. J'ai vu l'extrait de fenêtre renommer tmux partout, mais c'est la première fois que quelqu'un a souligné l'option de fenêtre renommer automatiquement tmux. Je vous remercie.
f3xy
1

C'est ce que j'ai mis dans mon vimrc grâce à la réponse de @raphael

J'installe également le plugin tmux-plugins / vim-tmux-focus-events pour les événements FocusGained et 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
la source