Por que o Vim está comendo Ctrl quando usado com Ctrl + V e como consertá-lo?

3

Estou usando o Vim /etc/zsh/zshrc para adicionar ligações de chave para zsh porque não funciona com inputrc . No meu terminal com o tmux quando eu digito Ctrl + v então Ctrl + LeftArrow o shell mostrará ^[OD . No entanto, quando estou no modo de inserção do Vim, pressionar a mesma sequência resultará em ^[[D .

Descobri que ^[[D é o que o shell produz quando digito Ctrl + v então LeftArrow . Eu também alterei ^[[D para ^[OD no arquivo /etc/zsh/zshrc e ele funciona como esperado (pressionar Ctrl + SetaEsquerda faz com que o cursor retorne uma palavra) . Aqui está a linha de que estou falando:

bindkey "^[OD" backward-word

Eu acho que algo está errado com o Vim porque está consumindo a Ctrl . Como faço para corrigir isso?

    
por phunehehe 13.03.2011 / 14:31

1 resposta

8

Este é realmente o seu terminal fazendo algo estranho, não o Vim. Os terminais têm dois conjuntos de sequências de controle associados a teclas de cursor, por motivos históricos : um para aplicativos de tela inteira, geralmente chamado de "modo de teclas do cursor de aplicativo", e um para aplicativos read-eval-print (por exemplo, shells).

Antigamente, os aplicativos read-eval-print não tinham nenhum recurso de edição de linha e pretendia-se que o terminal, ou o driver do terminal do SO, acabasse se tornando mais sofisticado. Assim, o terminal enviou sequências de controle destinadas ao driver do terminal. De alguma forma, os drivers de terminal Unix nunca obtiveram recursos decentes de edição de linha; estes foram adicionados às aplicações em vez disso (por exemplo, através da biblioteca readline).

Seu terminal está enviando ␛OD para Ctrl + Esquerda no modo de teclas de edição da linha e ␛[D no modo de teclas do cursor da aplicação. Você tem duas opções:

  • Configure seu terminal para não fazer diferença entre os dois modos. Como fazer isso é totalmente dependente do seu emulador de terminal.
  • Viva com isso. Como qualquer aplicação dada sempre configura o terminal no mesmo modo, basta configurar suas ligações de acordo com o modo que ele usa.
por 13.03.2011 / 14:58