Como eu crio as associações de teclas CTRL no vim ao usar o tmux?

3

Eu uso o Vim dentro do tmux e adicionei recentemente o seguinte ao meu arquivo .vimrc :

" easy navigation
nnoremap <C-Left> :tabprevious
nnoremap <C-Right> :tabnext

Mas isso parece não ter efeito (eu pressiono CTRL+l ou CTRL+Right e meu cursor apenas se move como se eu não tivesse pressionado CTRL ). Eu estou supondo que o tmux é de alguma forma responsável por isso.

Eu tentei adicionar cada (não ambas) das linhas a seguir ao meu .tmux.conf sem sucesso:

set -g default-terminal "xterm"
set-window-option -g xterm-keys on

Certamente há uma maneira simples de passar esses comandos para o vim?

Eu li este post:

Como obter shift + setas e ctrl + setas trabalhando no Vim no tmux?

e tentei adicionar o seguinte ao meu .vimrc , também sem efeito discernível:

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

Estou executando a versão 7.4 do vim

    
por quant 11.06.2014 / 02:37

2 respostas

1

A configuração recomendada de TERM para o tmux é screen-256color e o snippet adicionado ao seu vimrc funciona somente para um TERM que começa com screen para que você possa ter certeza de que o bloco de códigos nunca será executado se seu TERM for xterm .

Eu tenho usado com sucesso este snippet no passado nesta máquina, sem set-window-option -g xterm-keys on , mas por alguma razão parece que não funciona mais para mim (eu não fiz use tmux nos últimos três meses). Eu me pergunto o que está acontecendo. Uma atualização do iTerm? Uma atualização do tmux?

Adicionar set-window-option -g xterm-keys on ao meu ~/.tmux.conf corrige o problema.

De qualquer forma, você poderia mapear diretamente as sequências brutas produzidas por <C-Left> e <C-Right> como uma solução temporária.

nnoremap <C-v><C-Left> :tabprevious<CR>

deve fornecer algo como:

nnoremap ^[[D :tabprevious<CR>
    
por 11.06.2014 / 09:23
0

Uma solução alternativa pode ser a seguinte:

" Note:  Move to the next tab! By Questor
nnoremap <silent> <C-Up> :tabnext<cr>
inoremap <silent> <C-Up> <C-O>:tabnext<cr>
vnoremap <silent> <C-Up> :<C-U>tabnext<cr>v

" Note:  Move to the previous tab! By Questor
nnoremap <silent> <C-Down> :tabprevious<cr>
inoremap <silent> <C-Down> <C-O>:tabprevious<cr>
vnoremap <silent> <C-Down> :<C-U>tabprevious<cr>v

Funciona muito bem para mim!

Veja um exemplo de uso no link

    
por 19.06.2014 / 17:15

Tags