2013-02-27 88 views
25

我是tmux的新手,我試圖弄清楚如何編輯配置,以便打開vim的窗口顯示在任務欄中,而不是作爲#:vim,而是作爲任何名稱在vim中打開的文件是
(ie "#:filename.php")。似乎它應該是一件普通的事情,但我的搜索 - 失敗。在vim中打開文件名稱的tmux選項卡

+3

我用拆分了很多活力。如果我在緩衝區中打開10個文件並將4個文件分割爲4個窗口,那麼您告訴我,您想在tmux窗口標籤中顯示什麼內容? – Kent 2013-02-27 22:19:45

+1

@Kent假設只有一個文件在單個窗口中打開。這可以做到嗎? – 2013-02-27 22:55:11

+1

Kent:你可以在Vim中定義合適的自動命令,用活動緩衝區中文件的名稱調用'tmux rename-window'。 – chepner 2013-02-27 22:57:17

回答

32

以下是部分答案。它可以改進,但我現在沒有時間去完成它。

把你.vimrc如下:

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

還有其他的事件(見Vim的:help autocmd-events)可用於處理 爲好。我還沒有想到的一件事是,如果在兩個窗格中的每一個窗格中打開 的實例vim,並且您從一個窗格 切換到另一個窗格,如何更改窗口名稱。 vim不知道tmux中的活動,因此不會觸發vim事件。

+14

我不得不調整這個使用expand()來獲取百分比符號擴展到窗口名稱,否則我只是得到「%」作爲我的窗口名稱。這是vim 7.3。 Ie:autocmd BufReadPost,FileReadPost,BufNewFile * call system(「tmux rename-window」。expand(「%」)) – Von 2013-04-19 18:51:42

+4

我發現使用多個窗格或窗口時,或者需要將BufEnter添加到事件列表當在緩衝區之間移動時標題保持不變。 – Von 2013-05-02 13:06:48

+7

expand(「%:t」)將放置文件名,而expand(「%」)顯示完整路徑。 – Nobu 2013-08-28 18:24:14

16

這是可能的!我想分享這個答案,因爲我一直在尋找它一段時間。終於有時間自己實施了。把你的.vimrc如下:

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

它將終端標題設置爲僅聚焦當前文檔標題(%t代表文檔標題不帶路徑)。由於事件BufEnter,每次將焦點切換到另一個文檔時,終端標題都會更改。當離開Vim時,它也會變回原來的狀態。將(或更換)在.tmux.conf如下:

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

這是沒有必要精確地複製它,但它看起來像這樣:

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

I代表窗口號。 W代表正在運行的當前應用程序,T代表終端標題。後面我們用vim打開當前文件。終端標題總是被設置(我的bash終端始終顯示我不需要我的狀態欄的描述看到的主機名),所以,只顯示它時,Vim執行以下內容添加到您的.bashrc

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

對於bash,我使用的shell來說,這是正確的。 PROMPT_COMMAND在您的提示顯示在終端之前進行評估。 echo命令將終端標題設置爲空。每當您從可能更改標題的應用程序獲得提示時,都會發生此操作。其他外殼可能需要配置不同...

我不會使用tmux rename-window,因爲它只要窗口存在就設置標題。您需要爲每個應用程序啓動調用它。所提出的方法保持動態,因爲它可以在窗口中使用多個窗格,並在vim中打開多個分割屏幕/文件。

+0

我沒有任何運氣試過。任何調試技巧?我沒有重啓tmux。 – 2013-06-26 15:44:33

+0

這是沒有足夠的信息繼續,但最好的猜測是你沒有使用bash作爲默認終端。通過在「.tmux.conf」中放置「set-option -g default-shell/bin/bash」,TMUX可以強制使用bash。也許你沒有看到可以通過添加「set-option -g status on」來解決的狀態欄。運氣好的話? – gospes 2013-07-01 08:19:09

+1

'autocmd BufEnter * let&titlestring =''。展開(「%:t」)在tmux中似乎不適用於我。正如@Phluks建議的那樣,我在tmux內部使用'tmux rename-window'方法。 – studgeek 2016-04-09 05:04:15

5

感謝偉大的球員投入它節省了我很多打字:-)

的前兩個答案,我合爲一體,是我喜歡的。

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 

第一條線和第二條線用於tmux,第三條和第四條線用於正常的終端使用。您不必重新啓動tmux,因爲它是顯式更新tmux的vim。

+1

以前的兩個答案對我來說並不適用,只有這個答案。爲什麼? – fiatjaf 2017-03-01 16:39:51

1

這裏有很好的答案,但我仍然無法按照我想要的方式工作,即: 1)在打開vim時更改TMUX窗口名稱 2)退出。完成 當它返回到以前的名字,我有以下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

工作正常,除了沒有文件名的緩衝區。任何想法如何解決這些? – PonyEars 2016-02-04 18:51:13

1

作爲替代其設置TMUX窗口名稱其他答案,你可以有VIM設置TMUX窗格標題來代替。這可讓您在使用vim更改窗格標題的同時保留使用tmux new-window -n <window-name>定義的靜態窗口名稱。您可以在set-titles-string中使用#T來顯示窗格標題,例如set-option -g set-titles-string "#W: #T"將顯示tmux窗口名稱和窗格標題。

實施例的vim配置改變窗格標題:

" 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 

榮譽給vim.wikia.com用於自動命令的t_tst_fs指導和phluks

+0

FWIW,對於我來說,只要「set title」和「set titlestring =%t」在切換緩衝區時保持窗格標題爲最新,並且我不需要augroup/BufEnter命令。 – 2017-01-02 18:56:51

2

,並恢復對Vim的自動退出窗口標題:

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

我也建議檢查是否我們在TMUX運行:

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