web-dev-qa-db-ja.com

vimでtmuxを適切に動作させるには?

vimtmuxを一緒にプレイする方法を理解しようとしています。

私の問題は次のとおりです。xterm-256colorを使用すると、vimが適切に機能するようになりますが、背景が適切にレンダリングされません。

screen-256colorを使用して修正しました。これは見た目は良いですが、Ctrl + arrow keysが壊れます(挿入モードになり、4行を削除します)。代わりにこれらのマッピングを使用して、vimのタブを切り替えます。

これを機能させるにはどうすればよいですか?

19
outsmartin

cat内でtmuxを実行し、問題のキーを押して、それらが生成するエスケープコードを見つけます。私にとって、これは^[[D^[[Cを与えます。次に、それらのエスケープコードを直接マップします。

nnoremap ^[[D gT
nnoremap ^[[C gt

ここで、^[はエスケープ文字であり、vimで<CTRL-v><ESC>を押して挿入できます。

8
Mika Fischer

最高の機能を実現するためには、正しくセットアップする必要があるいくつかのレベルの構成があります。

  1. シーケンスを認識するようにtmuxを構成します。 tmuxを起動する前に、ターミナルエミュレータに適したTERM値を設定します(例:xterm-256color)。 TERM環境変数によって識別されるterminfoデータベースエントリは、変更された矢印キーのシーケンスを認識する方法を示しますtmux(ユーザー定義機能{kUPkDNkRITkLFT} {、3..7})。
  2. シーケンスを生成するようにtmuxを構成します。 xterm-keysセッションオプションをonに設定して、TERMが識別するシーケンスを受信したときにtmuxが独自のxtermスタイルのシーケンスを生成するようにします。 ~/.tmux.conf内:

    set-option -g xterm-keys on
    
  3. そのシーケンスの大部分を使用する/期待するtmux内で実行されるプログラムを構成します。 tmux内でscreenベースのTERMを使用していることを確認してください(例:screen-256color)。これは、内部で実行されているプログラムにtmuxtmuxの端末の(再)エミュレーションを制御する方法と、プログラムがtmuxから期待する応答を伝えます。
  4. 残念ながら、screenベースのterminfoデータベースエントリは、変更された矢印キーのシーケンスを定義しないことが多いため(つまり、kUPなどが含まれていない可能性があります)、プログラムは内部で実行されますtmuxは、このようなシーケンスを期待することを知らない場合があります。これらのキーを認識するプログラムを手動で構成する必要があります。 Vimでは、これを~/.vimrcに入れることができます。

    if &term =~ '^screen'
        " tmux will send xterm-style keys when xterm-keys is on
        execute "set <xUp>=\e[1;*A"
        execute "set <xDown>=\e[1;*B"
        execute "set <xRight>=\e[1;*C"
        execute "set <xLeft>=\e[1;*D"
    endif
    

    xバリアントを使用すると通常の矢印が発生する場合は、xなしのバリアント(つまり、<Up>の代わりに<xUp>など)を使用することができます。動作を停止するキー。

    このようなキーを定義することの利点は、修飾子の各組み合わせを個別にマッピングする必要がないことです(Shift、Control、Contol + Shift、Meta、Meta + Shift、Meta + Control、Meta + Control + Shift)。 *は、すべての関連シーケンスを処理するために特別な解釈を取得します(:help xterm-modifier-keysを参照)。

  5. 次に、ハードコードされたシーケンスの代わりにキーをマップできます。

    nnoremap <C-Right> gt
    nnoremap <C-Left> gT
    
23
Chris Johnsen

ここで説明 、無効にする背景色の消去(BCE)t_ut端末オプションをクリアして(実行:set t_ut=をVimで入力してから、 Control+L 端末の表示を更新するため)Vimがtmux内で使用されているときに配色が正しく機能するように、GNU画面。

このように、適切なキー検出のためにTERM値をxterm-256colorとして保持しながら、適切なVimカラースキームレンダリングも取得できます。 :-)

2
sunaku

〜/ .vimrcのset t_Co=256の設定は役に立ちますか?これは単なる色の設定ですが、いくつかの問題を解決するのに役立ちます。

〜/ .vimrcのctrl+Arrowキーを再マッピングすることもできます...

編集:GNUスクリーンセッションでctrl+Arrowを試しましたか?これはおそらくあなたの問題だと思います。