2013-02-27 3 views
25

Sono nuovo di tmux e sto cercando di capire come modificare la configurazione in modo che Windows con vim aperto compaia nella barra delle applicazioni non come #:vim ma come qualunque sia il nome del il file aperto in vim è
(ie "#:filename.php"). Sembra che dovrebbe essere una cosa comune, ma la mia ricerca - foo sta fallendo.schede tmux con nome del file aperto in vim

+3

Io uso dividere molto in vim. se apro 10 file in buffer e dividi 4 file in 4 finestre, dimmi cosa vuoi mostrare nell'etichetta della finestra tmux? – Kent

+1

@Kent Supponiamo che ci sia un solo file aperto in una singola finestra. Può essere fatto? –

+1

Kent: è possibile definire autocomandi appropriati in Vim per chiamare 'tmux rename-window' con il nome del file nel buffer attivo. – chepner

risposta

32

Ecco una risposta parziale. Può essere migliorato, ma non ho tempo di lavorarci adesso.

Inserire il seguente nella vostra .vimrc:

autocmd BufReadPost,FileReadPost,BufNewFile * call system("tmux rename-window " . expand("%")) 

Non ci sono altri eventi (vedi :help autocmd-events in Vim) che possono essere utilizzati per gestire pure. Una cosa che non ho capito è come cambiare il nome della finestra se hai vim aperto in ciascuno di due riquadri e passi da un riquadro all'altro. vim non è a conoscenza dell'attività in tmux, pertanto non viene attivato alcun evento vim.

+14

Ho dovuto modificare questo per usare expand() per ottenere il segno di percentuale per espandere il nome della finestra, altrimenti stavo solo ottenendo "%" come nome della mia finestra. Questo era con vim 7.3. Vale a dire: autocmd BufReadPost, FileReadPost, BufNewFile * sistema di chiamata ("tmux rename-window". Expand ("%")) – Von

+4

Ho trovato quando si utilizzavano più riquadri o finestre, o fuggitivo avevo bisogno di aggiungere BufEnter alla lista degli eventi per mantenere il titolo al passo quando ci si sposta tra i buffer. – Von

+7

expand ("%: t") inserirà il nome del file mentre espandi ("%") visualizza il percorso completo. – Nobu

16

È possibile! Volevo condividere questa risposta perché la stavo cercando da un po 'di tempo. Finalmente ho avuto il tempo di implementarlo da solo. Inserire il seguente nella vostra .vimrc:

autocmd BufEnter * let &titlestring = ' ' . expand("%:t") 
set title 

Sarà impostare il titolo del terminale solo il titolo del documento attualmente a fuoco (%t sta per il titolo del documento, senza il percorso). Grazie all'evento BufEnter, il titolo del terminale cambia ogni volta che si passa a un altro documento. Inoltre, quando si esce da Vim, viene ripristinato lo stato originale. Mettere (o sostituire) il seguente nella vostra .tmux.conf:

set-window-option -g window-status-current-format "[#I #W#T]" 
set-window-option -g window-status-format "[#I #W#T]" 

Non è necessario copiare esattamente, ma sembra così:

[1 vim .tmux.conf][2 bash]... 

I I sta per il numero della finestra. Lo W sta per l'applicazione corrente in esecuzione e lo T sta per il titolo del terminale. Più tardi usiamo per mostrare il file corrente aperto in vim. Il titolo del terminale è sempre impostato (mio terminale bash mostra sempre il nome host, che non ho bisogno di vedere nelle mie descrizioni barra di stato), in modo da mostrare solo quando viene eseguito vim aggiungere il seguente al vostro .bashrc:

PROMPT_COMMAND='echo -ne "\033]0;\007"' 

Questo vale per bash, la shell che uso. PROMPT_COMMAND viene valutato appena prima che il prompt venga visualizzato nel terminale. Il comando echo imposta il titolo del terminale su nulla. Questa azione si verifica in questo modo ogni volta che si richiama il prompt delle applicazioni che potrebbero aver cambiato il titolo. Altre shell potrebbero dover essere configurate in modo diverso ...

Non userei tmux rename-window come imposta il titolo finché le finestre esistono. Dovresti chiamarlo per ogni avvio dell'applicazione. L'approccio presentato mantiene le cose dinamiche, poiché funziona con più riquadri in una finestra e più schermate divise/file aperti all'interno di vim.

+0

L'ho provato senza fortuna. Qualche consiglio per il debug? Ho riavviato tmux. –

+0

Questa informazione non è sufficiente per andare avanti, ma le ipotesi migliori sono che non stai usando bash come terminale predefinito. TMUX può essere forzato ad usare bash mettendo "set-option -g default-shell/bin/bash" nel tuo ".tmux.conf". Forse non vedi la barra di stato che può essere aggiustata aggiungendo "set-option -g status on". Qualche fortuna? – gospes

+1

'autocmd BufEnter * let & titlestring = ''. expand ("%: t") 'non sembra funzionare per me all'interno di tmux. Come suggerito da @Phluks, ho usato l'approccio 'tmux rename-window' quando si trovava all'interno di tmux. – studgeek

5

Grazie per ragazzi fantastici di input che mi fa risparmiare un sacco di battitura :-)

ho unito le due risposte precedenti in una sola, che mi piace.

autocmd BufEnter * call system("tmux rename-window " . expand("%:t")) 
autocmd VimLeave * call system("tmux rename-window bash") 
autocmd BufEnter * let &titlestring = ' ' . expand("%:t")                 
set title 

Il primo e sedond linea sono per tmux e il terzo e quarto sono per uso normale terminale. Non è necessario riavviare tmux poiché è vim che aggiorna esplicitamente tmux.

+1

Le due risposte precedenti non hanno funzionato per me, solo questo. Perché? – fiatjaf

1

Ottime risposte qui, ma non riuscivo ancora a farlo funzionare come volevo, ovvero: 1) Modificare il nome della finestra di TMUX all'apertura vim 2) All'uscita. restituirlo al nome precedente al termine ho raggiunto con le seguenti linee 3 vimrc:

autocmd BufReadPost,FileReadPost,BufNewFile * call system("tmux rename-window " . expand("%:t")) 
let tmuxtitle = system("tmux display-message -p '#W'") 
autocmd VimLeave * call system("tmux rename-window " . shellescape(tmuxtitle)) 
+0

Funziona bene, tranne i buffer senza nome file. Qualche idea su come sistemarlo per quelli? – PonyEars

1

Come alternativa ad altre risposte che definiscono il nome della finestra tmux, si può avere vim impostare il titolo riquadro tmux invece. Ciò consente di mantenere un nome di finestra statico definito con tmux new-window -n <window-name> mentre si modifica il titolo del riquadro. È possibile utilizzare #T in set-titles-string per visualizzare il titolo del riquadro, ad es. set-option -g set-titles-string "#W: #T" mostrerà il nome della finestra tmux e il titolo del riquadro.

configurazione vim esempio per cambiare titolo del riquadro:

" Teach vim the tmux escape sequences for changing pane title 
" Note the "^[" should be a literal escape code (use `^v<esc>` to enter it) 
set t_ts=^[]2; 
set t_fs=^[\\ 

" Turn on setting the title. 
set title 

" The following causes vim to refresh the title each time we change buffers. 
" Otherwise it will only set the title once at startup. 
augroup RefreshTitle 
    autocmd! 
    " The concatenation of the colon is a hack to prevent vim from 
    " interpreting the string as a modeline. 
    autocmd BufEnter * let &titlestring = "vim" . ":" . expand("%:t") 
augroup END 

Complimenti a vim.wikia.com per la guida t_ts e t_fs e phluks per l'autocomando.

+0

FWIW, per me solo "set title" e "set titlestring =% t" ha mantenuto il titolo del riquadro aggiornato mentre cambio i buffer, e non avevo bisogno del comando augroup/BufEnter. –

2

E per ripristinare il titolo della finestra automatica all'uscita Vim:

autocmd VimLeave * call system("tmux setw automatic-rename") 

Vorrei anche suggerire di verificare se ci sono in esecuzione sotto tmux:

if exists('$TMUX') 
    autocmd BufEnter * call system("tmux rename-window '" . expand("%:t") . "'") 
    autocmd VimLeave * call system("tmux setw automatic-rename") 
endif