tmuxのVimでshift + arrowsおよびctrl + arrowsを機能させる方法は?


44

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

私はかつて持っていた

export TERM='xterm-256color'

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

そして一度追加したら

set -g xterm-keys on

修飾キーを使用したキーボードショートカットはVimで正常に機能しました。すなわちshift+left/right、スイッチVimタブctrl+up/downにマッピングし、移動(「バブル」)行にマッピングshift+left/rightし、コマンドラインモードで単語ごとにジャンプするように箱から出して動作したこと(例:のような入力時:e foo bar baz)。

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

だから私は削除しました

export TERM='xterm-256color'

私から、.bashrc代わりにこれをmyに入れます.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>

これにより、ショートカットは機能しますが、適切なソリューションのようには感じません。誰がここで何が起こっているのか、それを修正する方法を教えてもらえますか?

回答:


68

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

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


ありがとうございました!それは私が持っていたものよりも良く見え、説明を感謝します。私が持っていたものによってではなく、あなたの線で固定された一つのこと、ここで説明するように下向きの矢印それまでは、/コマンド-Tプラグインで仕事をしませんでした:superuser.com/questions/237751/...私は今追加したmap <Esc>[B <Down>ものから答えの。プラグイン自体によって行われたいくつかの悪い仮定がある理由のようです。
ヘンリックN

明確にするために、ソリューションに加えmap <Esc>[B <Down>て他のスレッドから、すべてが正常に機能することを意味します。
ヘンリックN

@HenrikN何をするのか明確にしてくださいmap <Esc>[B <Down>。.vimrcファイルに追加しても違いはありません。
フランチェスコボッカルド

@Francesco Boccardo:あなたは私の以前のコメント内のリンクをたどると、そこから再びリンクをたどる場合は、を取得superuser.com/a/215181 :)詳細は耐え難いほどにそれを説明するように思われる
ヘンリックN

@HenrikNありがとう。したがって、おそらくOSX関連の問題であるか、コマンド(コントロール?)+ rを押してもtmuxのvimの矢印キーが混乱しないため、この7年間で解決された可能性があります(私はLinuxです)。
フランチェスコボッカルド

8

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

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


1
綺麗な!素晴らしい探偵作品。
ヘンリックN

2
これは私が正確に変更したものです:github.com/henrik/dotfiles/commit/…色と修飾キーはtmuxの外側と内側の両方でうまく機能するようです。
ヘンリックN
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.