vim
とtmux
を一緒にプレイする方法を理解しようとしています。
私の問題は次のとおりです。xterm-256color
を使用すると、vim
が適切に機能するようになりますが、背景が適切にレンダリングされません。
screen-256color
を使用して修正しました。これは見た目は良いですが、Ctrl + arrow keys
が壊れます(挿入モードになり、4行を削除します)。代わりにこれらのマッピングを使用して、vim
のタブを切り替えます。
これを機能させるにはどうすればよいですか?
cat
内でtmux
を実行し、問題のキーを押して、それらが生成するエスケープコードを見つけます。私にとって、これは^[[D
と^[[C
を与えます。次に、それらのエスケープコードを直接マップします。
nnoremap ^[[D gT
nnoremap ^[[C gt
ここで、^[
はエスケープ文字であり、vimで<CTRL-v><ESC>
を押して挿入できます。
最高の機能を実現するためには、正しくセットアップする必要があるいくつかのレベルの構成があります。
xterm-256color
)。 TERM環境変数によって識別されるterminfoデータベースエントリは、変更された矢印キーのシーケンスを認識する方法を示しますtmux(ユーザー定義機能{kUP
、kDN
、 kRIT
、kLFT
} {、3
..7
})。シーケンスを生成するようにtmuxを構成します。 xterm-keys
セッションオプションをon
に設定して、TERMが識別するシーケンスを受信したときにtmuxが独自のxtermスタイルのシーケンスを生成するようにします。 ~/.tmux.conf
内:
set-option -g xterm-keys on
screen
ベースのTERMを使用していることを確認してください(例:screen-256color
)。これは、内部で実行されているプログラムにtmuxtmuxの端末の(再)エミュレーションを制御する方法と、プログラムがtmuxから期待する応答を伝えます。残念ながら、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
を参照)。
次に、ハードコードされたシーケンスの代わりにキーをマップできます。
nnoremap <C-Right> gt
nnoremap <C-Left> gT
ここで説明 、無効にする背景色の消去(BCE)t_ut
端末オプションをクリアして(実行:set t_ut=
をVimで入力してから、 Control+L 端末の表示を更新するため)Vimがtmux内で使用されているときに配色が正しく機能するように、GNU画面。
このように、適切なキー検出のためにTERM
値をxterm-256color
として保持しながら、適切なVimカラースキームレンダリングも取得できます。 :-)
〜/ .vimrcのset t_Co=256
の設定は役に立ちますか?これは単なる色の設定ですが、いくつかの問題を解決するのに役立ちます。
〜/ .vimrcのctrl+Arrow
キーを再マッピングすることもできます...
編集:GNUスクリーンセッションでctrl+Arrow
を試しましたか?これはおそらくあなたの問題だと思います。