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>