Gnome-terminal + mapeamentos Vim e CTRL-Shift

8

É possível mapear a seqüência com o CTRL-Shift no gnome-terminal?

Estou tentando adicionar mapeamentos:

map <C-S-[> gT

map <C-S-]> gt

E não está funcionando. Como fazer isso?

De alguma forma, mapeei <C-S-]> , mas não foi <C-S-]> , mas <C-]> , então parece que não reconhece Shift nessa sequência. Está mal configurado ou é culpa do gnome-terminal?

Além disso. Mapeamento <C-[> , depois de pressionado, parece que o vim está esperando. Eu suponho que seja tempo limite de mapeamento, mas como me livrar desse tempo limite quando pressiono precisamente <C-[> e não quero pressionar mais nada?

Eu comecei a aprender vim, então desculpe se há algo obviamente errado nesses mapeamentos.

    
por Simon 22.10.2012 / 16:34

5 respostas

7

Eu acho que o problema aqui é que você está tentando obter o vim, que espera rodar em um terminal, para reconhecer uma seqüência CTRL-SHIFT. Embora seja possível para o X reconhecer essas combinações, os aplicativos executados em um terminal (ou, atualmente, um emulador de terminal) não podem. Isso ocorre porque, historicamente, os terminais só podiam enviar e receber sequências de sete ou oito bits de dados ASCII através de uma conexão serial (embora isso pudesse incluir "seqüências de escape" que posicionam o cursor, rolar ou excluir linhas, alterar cores e outras efeitos).

Existem 32 "Control Codes" no conjunto de caracteres ASCII, incluindo o familiar CTRL-A através de CTRL-Z. Mas não há códigos ASCII correspondentes para "CTRL-SHIFT" de A a Z. Agora, o próprio gnome-terminal pode reconhecer esses códigos (CTRL-SHIFT-V, por exemplo, colará texto da área de transferência), mas o vim não será capaz de ter acesso direto a ele.

Naturalmente, pode ser possível (não sei) que um emulador de terminal seja configurado para converter as teclas CTRL-SHIFT em uma seqüência de escape que pode então ser reconhecida por um mapeamento vim.

=======

UPDATE

Você pode estar interessado em gvim, que é uma versão gráfica do vim que é executada como um programa X em vez de um programa terminal. Talvez o gvim consiga entender os códigos CTRL-SHIFT?

    
por Bartleby the Scrivener 31.10.2012 / 12:34
3

parece ser um problema com o terminal do gnome, não permitindo certas combinações com a tecla ctrl. o google mostra muito disso.

caso você não saiba, os ciclos up / down de ctrl-page por meio de guias.

    
por stschn 31.10.2012 / 10:55
3

Como Bartleby apontou , essa é uma restrição de terminal, porque vi os códigos de teclas como sendo os mesmos.

Para terminais como xterm , você pode alterar isso. Para gnome-terminal que ignora as configurações dos recursos do X eu não sei como fazer o seguinte:

Esta pergunta SO aborda o mesmo tópico e este exemplo mostra isso em uso para mapeamento de múltiplas chaves no arquivo .Xresources . Por exemplo:

XTerm*vt100.translations: #override \
  Ctrl ~Meta Shift <Key>a: string(0x1b) string("[65;5u") \n\
  Ctrl ~Meta Shift <Key>b: string(0x1b) string("[66;5u") \n\ 
  Ctrl ~Meta Shift <Key>f: string(0x1b) string("[70;5u")  

Agora temos sequências de teclas diferentes no vi para Ctrl a vs. Ctrl Deslocamento a , Ctrl b vs. Ctrl Deslocamento b , < kbd> Ctrl f vs. Ctrl Deslocamento f .

Agora podemos mapeá-los de forma diferente em ~/.vimrc :

map <ESC>[66;5u   :echo "ctrl-shift-b received"<CR>
map <ESC>[70;5u   :echo "ctrl-shift-f received"<CR>
map <C-b>         :echo "ctrl-b received"<CR>
map <C-f>         :echo "ctrl-f received"<CR>
    
por cfi 22.09.2015 / 15:03
1

Parece que você só precisa desativar todos os atalhos de teclado no gnome-terminal.

    
por beinvisible 23.01.2013 / 15:55
1

Em gnome-terminal , as seqüências de escape geradas por chaves não são configuráveis. Para muitas teclas Ctrl + tecla e Shift + Ctrl + tecla geram sequências diferentes ; infelizmente para [ e ] eles não, então você não pode distingui-los.

    
por egmont 23.09.2015 / 12:56