vim dentro do tmux: lança “E388” com C-Left no modo insert [duplicado]

3

Eu li que no modo de inserção em vim , pode-se usar <C-Left> e <C-Right> para mover por palavras. Isso funciona para mim, mas apenas na medida em que eu não corro vim dentro de tmux terminal splitter.

Quando dentro de tmux , <C-Left> me joga fora do modo de inserção e dá um erro:

E388: Couldn't find definition

Esse erro é explicado na ajuda para ter algo a ver com a pesquisa de definição. No entanto, não quero que qualquer definição seja pesquisada, quero apenas mover uma palavra para a esquerda. Além disso, <C-Right> não faz nada além de me jogar fora do modo de inserção, não do que eu gostaria.

Lendo em algum lugar que isso pode estar conectado a set (no)esckeys , eu tentei com ambas as configurações desse sinalizador, com o mesmo resultado. Bem, eu vi as respostas em Como para obter shift + arrows e ctrl + arrows trabalhando no Vim no tmux? mas eles não aparecem para me ajudar.

Meu atual .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"

e .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
    
por yo' 16.01.2014 / 11:27

1 resposta

1

Seu Vim não detecta corretamente os códigos de tecla <C-Left> enviados pelo terminal (e provavelmente outros também). Em vez disso, ele disseca os códigos, ESC o retira do modo de inserção e um [D causa o erro estranho.

Você pode tentar mexer com a configuração TERM , mas em geral é difícil fazer com que teclas especiais (como teclas de cursor e teclas de função) funcionem com modificadores como Shift e Ctrl no terminal. (Esses também não funcionam para mim no Ubuntu com gnome-terminal .) A solução mais fácil é usar o GVIM gráfico.

    
por 16.01.2014 / 11:48