2013-02-27 12 views
25

Jestem nowy w tmux i próbuję dowiedzieć się, jak edytować konfigurację, aby okna z vimem były otwarte na pasku zadań, a nie jako #:vim, ale jako cokolwiek, nazwa plik otwarty w vim to
(ie "#:filename.php"). Wydaje się, że powinno to być powszechne, ale moje poszukiwania - foo zawodzi.tmux tabs z nazwą pliku otwartego w vim

+3

używam podzielić los w vim. jeśli otworzę 10 plików w buforze i podzielę 4 pliki na 4 okna, powiesz mi, co chcesz pokazać w etykiecie okna tmux? – Kent

+1

@Kent Załóżmy, że w jednym oknie otwarty jest tylko jeden plik. Czy można to zrobić? –

+1

Kent: możesz zdefiniować odpowiednie autokomendy w Vimie, aby wywoływać 'tmux rename-window' z nazwą pliku w aktywnym buforze. – chepner

Odpowiedz

32

Oto częściowa odpowiedź. Można go poprawić, ale nie mam czasu, aby go teraz rozwiązać.

umieścić następujące informacje w swojej .vimrc:

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

Istnieją inne zdarzenia (patrz :help autocmd-events w vim), które mogą być używane do obsługi również. Jedną z rzeczy, o której nie wiedziałem, jest zmiana nazwy okna, jeśli w każdym z dwóch okien otwarte jest jedno wystąpienie vim, a ty zmieniasz z jednego panelu na drugi. vim nie jest świadomy działania w tmux, więc nie są wywoływane żadne zdarzenia.

+14

Musiałem zmodyfikować to, aby użyć expand(), aby uzyskać znak procentowy do rozwinięcia do nazwy okna, w przeciwnym razie po prostu otrzymałem "%" jako nazwę mojego okna. Tak było z vim 7.3. Tj .: autocmd BufReadPost, FileReadPost, BufNewFile * system wywołań ("tmux rename-window". Expand ("%")) – Von

+4

Znalazłem przy korzystaniu z wielu paneli lub okien, lub zbiegiem, potrzebowałem dodać BufEnter do listy zdarzeń utrzymywanie tytułu podczas przemieszczania się między buforami. – Von

+7

expand ("%: t") wstawiłaby nazwę pliku podczas rozwijania ("%") wyświetla pełną ścieżkę. – Nobu

16

Jest to możliwe! Chciałem podzielić się tą odpowiedzią, ponieważ szukałem jej od dłuższego czasu. Nareszcie mam czas, aby sam to wdrożyć. Umieścić następujące informacje w swojej .vimrc:

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

Będzie ustawić tytuł terminala tylko tytuł dokumentu Obecnie w centrum uwagi (%t podpórek tytule dokumentu bez ścieżki). Dzięki zdarzeniu BufEnter tytuł terminala zmienia się za każdym razem, gdy przełączasz fokus na inny dokument. Również po opuszczeniu Vima, jest on przywracany do pierwotnego stanu. Put (lub wymienić) dodaje się w swojej .tmux.conf:

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

Nie jest konieczne, aby skopiować go dokładnie, ale wygląda tak:

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

The I oznacza liczbę okien. Numer W oznacza bieżącą aplikację, a nazwa T oznacza tytuł terminalu. Później używamy do pokazania bieżącego pliku otwartego w vim. Tytuł terminal jest zawsze ustawiony (mój terminalu bash zawsze pokazuje nazwę hosta, który nie muszę widzieć w moich opisach pasku stanu), tak, aby tylko pokazać, gdy vim biegnie dodać następujące do .bashrc:

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

Dotyczy to powłoki bash, której używam. PROMPT_COMMAND jest oceniany tuż przed wyświetleniem Twojego monitu na terminalu. Polecenie echo ustawia tytuł terminala na zero. Tak więc dzieje się tak za każdym razem, gdy otrzymasz monit z powrotem od aplikacji, które mogły zmienić tytuł. Inne powłoki mogą wymagać innej konfiguracji ...

Nie będę używał tmux rename-window, ponieważ ustawia tytuł tak długo, jak okna istnieją. Będziesz musiał wywołać to przy każdym uruchomieniu aplikacji. Przedstawione podejście zachowuje dynamikę, ponieważ działa z wieloma oknami w oknie i wieloma podzielonymi ekranami/plikami otwartymi w vimie.

+0

Próbowałem tego bez żadnego szczęścia. Jakieś wskazówki dotyczące debugowania? Zrobiłem restart tmux. –

+0

To nie wystarcza, aby kontynuować, ale najlepsze domysły, że nie używasz bash jako domyślnego terminala. TMUX może być zmuszony do użycia bashu poprzez umieszczenie "set-option -g default-shell/bin/bash" w twoim ".tmux.conf". Być może nie widzisz paska stanu, który można naprawić, dodając "set-option -g status on". Trochę szczęścia? – gospes

+1

'autocmd BufEnter * let & titlestring = ''. expand ("%: t") "nie działa dla mnie w tmux. Jak zasugerował @Phluks, użyłem podejścia 'tmux rename-window', kiedy znajduje się wewnątrz tmux. – studgeek

5

Dzięki dla wielkich facetów wejściowymi oszczędza mi wiele wpisywać :-)

I połączeniu dwóch poprzednich odpowiedzi w jeden, który mi się podoba.

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 

Pierwsza i sedondowa linia dla tmux, a trzecia i czwarta dla normalnego użytku terminalowego. Nie musisz ponownie uruchamiać tmux, ponieważ jest to vim, który bezpośrednio aktualizuje tmux.

+1

Dwie poprzednie odpowiedzi mi nie pasowały, tylko ta jedna. Czemu? – fiatjaf

1

Świetne odpowiedzi tutaj, ale nadal nie mogłem go uruchomić tak, jak chciałem, co jest: 1) Zmień nazwę okna TMUX na otwarcie vim 2) Po wyjściu. przywrócić go do poprzedniego nazwiska po zakończeniu osiągnąłem go z następującymi liniami 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

Działa dobrze, z wyjątkiem buforów bez nazwy pliku. Każdy pomysł, jak to naprawić? – PonyEars

1

Jako alternatywę dla innych odpowiedzi, które określają nazwę okna tmux, można mieć vim ustawić tytuł okienka tmux zamiast. Pozwala to zachować statyczną nazwę okna zdefiniowaną za pomocą tmux new-window -n <window-name>, podczas gdy vim zmienia tytuł okna. Możesz użyć #T w set-titles-string, aby wyświetlić tytuł panelu, np. set-option -g set-titles-string "#W: #T" wyświetli nazwę okna i okienka tmux.

konfiguracji vim przykład zmianę szyby tytuł:

" 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 

Uznanie vim.wikia.com dla informacji t_ts i t_fs i phluks do autokomendę.

+0

FWIW, dla mnie po prostu "ustaw tytuł" i "set titlestring =% t" utrzymywały tytuł okna na czasie, gdy przełączałem bufory i nie potrzebowałem polecenia augroup/BufEnter. –

2

I przywrócić automatyczne tytuł okna na wyjściu vim:

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

Chciałbym również zasugerować, aby sprawdzić, czy prowadzimy pod tmux:

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