Esta é uma restrição de terminal, porque vi os códigos de teclas como sendo os mesmos. Pode-se verificar isso entrando no modo de inserção i , pressionando Ctrl v para colocar o vi em um modo para esperar a entrada literal de um especial personagem e depois bateu por exemplo Ctrl Desloca a . Uma saída ^A
será exibida. Agora faça a seqüência Ctrl v , Ctrl a , e novamente um ^A
aparecerá: ambas as seqüências de entrada resultar no mesmo código de teclado sendo visto pelo vi.
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>[65;5u :echo "ctrl-shift-a received"<CR>
map <C-a> :echo "ctrl-a received"<CR>