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


19

私が取得する方法を把握しようとしているvimtmux一緒に遊びます。

私の問題は、使用するxterm-256colorvimうまく動作するようになりますが、背景が適切にレンダリングされないことです。

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

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

回答:


8

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

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

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


それは私のVIMの動作を変更しませんでした。
outsmartin

tmux内でcatを起動してキーを押すと、何が印刷されますか?
ミカフィッシャー

^ [[1; 5Cおよび^ [[1; 5D。良いアイデア、私はそれらを取得する方法を知りませんでした。やってみた。できます!ありがとうございました。
outsmartin

すばらしいです。正しいエスケープコードを取得するメソッドを組み込むために、アンサーを編集しました。
ミカフィッシャー

22

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

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

    set-option -g xterm-keys on
    
  3. シーケンスの大部分を使用/ 予期するように、tmux内で実行されるプログラムを構成します。tmuxscreen内で-based TERM を使用していることを確認してください(例:)screen-256color。これは、内部の実行中のプログラム伝えtmuxのをどのように制御するにはtmuxは何の応答どこから期待するべきであるの端末(再)エミュレーションと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(つまり、<Up>代わりに<xUp>あなたが使用していることを発見した場合、エトセトラ)x-variantが停止作業に通常の矢印キーを引き起こします。

    このようにキーを定義する利点は、各修飾子の組み合わせを個別にマップする必要がないことです(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
    

1
ねえ、これは完璧に機能しました!
パブロオルモスデアギレラC.

2

ここ説明したように、VuxをtmuxおよびGNU画面内で使用する場合にカラースキームが適切に機能するように、ターミナルオプションをクリアして(Vimで実行してから+ を押してターミナルのディスプレイを更新する)バックグラウンドカラー消去(BCE)を無効にします。t_ut:set t_ut=ControlL

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


1

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

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

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


それが見えるとのxterm-256色と画面に罰金を作品
outsmartin

セットt_Coは= 256がaswell行われます
outsmartin

助けになりましたか?
サルダスリオン

残念だけど違う。ctrl + arrowの再マップとはどういう意味ですか?vimでタブを切り替えるために、すでにリマップされています。
outsmartin

次のようにマッピングされます:map <C-Right> gt
outsmartin
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.