web-dev-qa-db-ja.com

tmux内のvim:挿入モードで<C-Left>を使用して「E388」をスローします

vimの挿入モードでは、_<C-Left>_と_<C-Right>_を使用して単語で移動できることを読みました。これは私にとってはうまくいきますが、vimターミナルスプリッター内でtmuxを実行しない場合に限ります。

tmux内にある場合、_<C-Left>_は代わりに挿入モードを終了し、エラーを出します。

E388:定義が見つかりませんでした

このエラーは、定義検索と関係があるというヘルプで説明されています。ただし、定義を検索したくないので、1つの単語を左に移動します。同様に、_<C-Right>_は、私が望むものではなく、挿入モードから私を投げ出すだけです。

これがset (no)esckeysに関連している可能性があることをどこかで読んで、このフラグの両方の設定で試してみましたが、まったく同じ結果になりました。同様に、私は tmuxのVimでshift + arrowsとctrl + arrowsを機能させる方法? で答えを見ましたが、それらは私を助けていないようです。

私の現在の_.tmux.conf_:

_# This File is : ~/.tmux.conf

# use "|" and "-" to do vertical/horizontal splits
# (press CTRL B and then - or |, CTRL D to close it)
unbind %
bind | split-window -h
bind - split-window -v

# use the vim motion keys to move between panes
# (press CTRL B and then h,j,k,l for the move)
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R

# use vim motion keys while in copy mode
# To copy, press CTRL B and then [, move, space, move, enter.
# To paste, press CTRL B and then ]
setw -g mode-keys vi

# make vim work properly inside tmux
setw -g xterm-keys on
set -g default-terminal "screen-256color"
_

そして_.vimrc_:

_" tabs, indentation, line numbering
set ts=4 sts=4 number autoindent sw=4

" sage is python
au BufNewFile,BufRead *.sage set filetype=python

if &term =~ '^screen'
  " Page keys http://sourceforge.net/p/tmux/tmux-code/ci/master/tree/FAQ
  execute "set t_kP=\e[5;*~"
  execute "set t_kN=\e[6;*~"

  " Arrow keys http://unix.stackexchange.com/a/34723
  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
_
3
yo'

あなたのVimは端末から送信された<C-Left>キーコードを正しく検出しません(そしておそらく他のものも)。代わりに、コードを分析し、ESCが挿入モードを終了し、[Dが奇妙なエラーを引き起こします。

TERM設定をいじることはできますが、一般に、特別なキー(カーソルやファンクションキーなど)を次のような修飾子で機能させることは困難です。 Shift そして Ctrl ターミナルで。 (これらは、Ubuntuでgnome-terminalを使用しても機能しません。)最も簡​​単な回避策は、代わりにグラフィカルGVIMを使用することです。

1
Ingo Karkat