vim の screen セッション内で、control-left と control-right が機能しない

vim の screen セッション内で、control-left と control-right が機能しない

vim では、control-left と control-right は、Web のテキストエリアや と同じように、空白で区切られた単語を前後に操作します (つまり、B と W の同義語です) bash

しかし、 を実行している場合screen、これらのキーは機能しなくなります。 を押すと、vim は代わりにコマンド ラインに切り替わり、そこに5Cまたは を入力します5D

これらのキーのエンコードは次のとおりです。

$ cat >/dev/null    # pressing control-left, then control-right:
^[[1;5C^[[1;5D

ところで、私は.screenrc次のようにこれらのキーを再マッピングしてみました:

bindkey ^[[1;5D stuff B
bindkey ^[[1;5C stuff W

これは vim では機能しますが、これらのキーはコマンド ラインでは機能しませんbash(代わりに、 または のみが出力されますB) W

termcapこれは私が理解できない何かの神秘的なものだと思います... 何かお分かりでしたら、よろしくお願いします!

答え1

これを修正する方法はいくつかあります。1つは、screen(おそらくxterm)を起動する前に$TERMの値を書き留めておき、screen内でvimを起動した後、'term'オプションをその値に設定することです。たとえば、

:set term=xterm

別の方法は、これらの文字シーケンスのマッピングを定義することです。

:map <esc>[1;5D <C-Left>
:map <esc>[1;5C <C-Right>

次のように、screen を使用する場合は、~/.vimrc でこれらのソリューションのいずれかを条件付きで実行できます。

if &term == "screen"
    map <esc>[1;5D <C-Left>
    map <esc>[1;5C <C-Right>
endif

答え2

Ubuntu.vimrcでCtrl+矢印キーを操作する

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

map  <Esc>[1;2D <S-Left>
map  <Esc>[1;2C <S-Right>
cmap <Esc>[1;2D <S-Left>
cmap <Esc>[1;2C <S-Right>

関連情報