web-dev-qa-db-ja.com

tmuxのVimでshift + arrowsとctrl + arrowsを機能させるには?

これはすべてOS XのiTerm2にあります。

私はかつて持っていた

export TERM='xterm-256color'

私の.bashrcで。つまり、tmuxのVimは256色を使用していました。

そして、私が追加したら

set -g xterm-keys on

その後、修飾子を含むキーボードショートカットがVimで正常に機能しました。つまり、Vimタブを切り替えるためにマップしたshift+left/right、移動(「バブル」)するためにマップしたctrl+up/down、およびshift+left/rightは、ボックスからWordでジャンプしてコマンドラインモード(例::e foo bar bazなどを入力するとき)。

ただし、この設定では、Vimの背景色がテキストの背後にしか表示されないという問題がありました ここ

だから私は削除しました

export TERM='xterm-256color'

私の.bashrcから、代わりにこれを私の.tmux.confに入れます:

set -g default-terminal "screen-256color"

これでVimの背景色は修正されましたが、キーボードショートカットが壊れました。代わりに、予期しない動作(カーソルの移動、テキストの削除)が行われます。

ctrl+vを使用して、キーの組み合わせから逐語的な出力を挿入することで(説明 ここ )、それを回避することができました。

map [1;5A <C-Up>
map [1;5B <C-Down>
map [1;2D <S-Left>
map [1;2C <S-Right>
cmap [1;2D <S-Left>
cmap [1;2C <S-Right>

これによりショートカットが機能しますが、適切な解決策とは言えません。ここで何が起こっているのか、そしてそれを修正する方法を誰かに教えてもらえますか?

48
Henrik N

tmuxがこれらのキーを端末に渡すことができるように、tmuxウィンドウオプションxterm-keysを設定する必要があります。あなたはおそらくこれをあなたの~/.tmux.confに入れたいでしょう:

set-window-option -g xterm-keys on

Vimは通常、TERMがxterm- somethingのときにこれらのキーの処理を自動的に設定しますが、TERMがscreen-256colorであるため、これをスキップします。これらのキーは、~/.vimrcで次のように手動で設定できます。

if &term =~ '^screen'
    " tmux will send xterm-style keys when its xterm-keys option 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

少なくともそのようにすれば、さまざまな組み合わせをすべてマップする必要はありません。

74
Chris Johnsen

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

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

8
sunaku