web-dev-qa-db-ja.com

ファイル名がvimで開いているtmuxタブ

私はtmuxを初めて使用し、vimが開いているウィンドウがタスクバーに#:vimとしてではなく、vimで開いているファイルの名前として表示されるように構成を編集する方法を理解しようとしています。
(ie "#:filename.php")。それは一般的なことのようですが、私の検索-fooは失敗しています。

28
attack attack

これが部分的な答えです。改善することはできますが、今は解決する時間がありません。

.vimrcに次のように入力します。

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

他にも処理に使用できるイベントがあります(Vimの:help autocmd-eventsを参照)。 2つのペインのそれぞれでvimのインスタンスを開いていて、一方のペインからもう一方のペインに切り替えた場合に、ウィンドウ名を変更する方法がわかりませんでした。 vimtmuxのアクティビティを認識しないため、vimイベントはトリガーされません。

35
chepner

可能です!私はかなり長い間それを探していたので、私はこの答えを共有したいと思いました。ついに自分で実装する時間ができました。 .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にも当てはまります。 Prompt_COMMANDは、プロンプトがターミナルに表示される直前に評価されます。 echoコマンドは、端末のタイトルを何にも設定しません。したがって、このアクションは、タイトルを変更した可能性のあるアプリケーションからプロンプトを返すたびに発生します。他のシェルは別の方法で構成する必要があるかもしれません...

tmux rename-windowは、ウィンドウが存在する限りタイトルを設定するため、使用しません。アプリケーションを起動するたびに呼び出す必要があります。提示されたアプローチは、ウィンドウ内の複数のペインと、vim内で開いている複数の分割画面/ファイルで機能するため、物事を動的に保ちます。

17
gospes

素晴らしい入力者に感謝しますそれは私に多くのタイピングを節約します:-)

私は前の2つの答えを1つにまとめました。

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

1行目とsedond行はtmux用で、3行目と4行目は通常の端末用です。 tmuxを明示的に更新するのはvimなので、tmuxを再起動する必要はありません。

5
Phluks

そして、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
3
sc0ty

Tmuxウィンドウ名を設定する他の回答の代わりに、vimにtmuxペインのタイトルを設定させることができます。これにより、vimにペインのタイトルを変更させながら、tmux new-window -n <window-name>で定義した静的ウィンドウ名を保持できます。 #Tset-titles-stringを使用して、ペインのタイトルを表示できます。 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.comt_tsおよびt_fsガイダンス、および phluks 自動コマンドに敬意を表します。

1
Von

ここでは素晴らしい答えですが、それでも私が望むように動作させることができませんでした。つまり、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))
1
Arthur