Vim sem Esc
Como já até comentei em um post anterior, eu considero que a tecla Esc
do meu teclado além de
pequena está mal posicionada. Para um usuário frequente do editor Vim isso é um grande problema, já
que o Esc
é uma das teclas mais usadas. É por ela que acessamos o modo de comandos (normal
mode).
Até mesmo em teclados mais comuns o longo caminho para pressionar essa tecla não parece natural.
E, de fato, não é!
Quando Bill Joy criou o vi ele usava um ADM-3A. Só de olhar para o teclado desse
computador percebemos o motivo para algumas escolhas de teclas: As setas de movimento eram impressas
nas teclas HJKL
e o Esc
era localizado onde hoje temos o Tab
.
Como sempre, existe mais de um jeito de contornar esse problema. Aqui mostrarei 5 alternativas à tecla Esc.
Ctrl-[
No Vim, o Ctrl-[
tem exatamente a mesma função que o Esc. Apesar de serem duas teclas, usar este
comando é bem mais prático e requer um deslocamento menor. Provavelmente demora algumas semanas para
acostumar, mas tem a vantagem de não precisar de nenhuma configuração extra, pois ele é um comando
embutido no Vim. (Veja :help i_CTRL-[
)
Ctrl-c
Em outros editores esse geralmente é o comando para copiar texto, mas no Vim o Ctrl-c
serve para
sair do modo de inserção e ir para o modo normal. Ele não é exatamente idêntico ao Esc, mas na
prática é parecido o suficiente. De qualquer forma no meu teclado o comando Ctrl-[
é bem mais
fácil. (Veja :help i_CTRL-C
)
Alt/Meta
No meu terminal, digitar Alt+alguma_tecla é equivalente a pressionar Esc mais aquela tecla. Também não é exatamente igual ao Esc, pois tem uma ação ou movimento a mais e só funciona em alguns terminais. Porém é bastante útil. E.g.:
Alt+hjkl
: MovimentaçãoAlt+o
: Abre nova linha abaixo da posição atualAlt+A
: Append ao final da linha atualAlt+p
: Cola na posição atual
Mapeamentos pelo .vimrc
Algumas pessoas mapeiam o Esc para um combo de teclas, as mais interessantes são:
imap ;; <Esc>
imap jk <Esc>
imap ii <Esc>
Porém você terá problemas se algum dia precisar digitar ;;
, jk
ou ii
.
Troque o Esc com o Caps Lock
Finalmente a minha opção favorita, mas que requer um pouco mais de configuração, pois como o Caps Lock é uma tecla modificadora não podemos mapeá-la pelo Vim.
Teremos que modificar a função da tecla no sistema inteiro, o que sinceramente não é um problema, já que raramente uso o Caps Lock. Existe mais de um jeito de se fazer isso.
Setxkbmap
O jeito mais simples é usar o setxkbmap, que possui uma opção especificamente para alternar o Caps Lock com o Esc:
setxkbmap -option caps:swapescape
Adicione esse comando ao .xinitrc
se quiser que ele seja executado toda a vez que iniciamos o X.
No meu caso eu também uso o setxkbmap para configurar todo o layout do meu teclado:
setxkbmap -model pc105 -layout gb -variant intl -option caps:swapescape
Xmodmap
Se você não quiser que o Esc se torne Caps Lock (e ficar com dois Esc), pode usar o Xmodmap.
-
Adicione as seguintes linhas a um arquivo (sugestão:
~/.Xmodmap
):remove Lock = Caps_Lock keysym Caps_Lock = Escape
-
Edite seu
.xinitrc
para definir o mapeamento toda vez que você iniciar oX11
:xmodmap ~/.Xmodmap
-
Encontrei esse script na internet. Ele também usa o xmodmap, mas simplifica o processo de ligar e desligar o Caps Lock:
#!/bin/sh case $1 in off) xmodmap -e "clear lock" xmodmap -e "keycode 0x42 = Escape" ;; on) xmodmap -e "keycode 0x42 = Caps_Lock" xmodmap -e "add lock = Caps_Lock" ;; *) echo "Uso: caps {on|off}, liga e desliga o Caps Lock" echo "Quando desligado, ele funciona como a tecla Esc" ;; esac
Terminal
Um problema das soluções anteriores é que elas só funcionam no X
. Para trocar o Caps Lock com o
Esc no terminal, basta executar o seguinte comando:
julio@julio-acer ~> (echo `dumpkeys | grep -i keymaps`; echo keycode 58 = Escape; echo keycode 1 = Caps_Lock) | sudo loadkeys -
Por praticidade, adicione um alias ao ~/.zshrc
:
alias nocaps='(echo `dumpkeys | grep -i keymaps`; echo keycode 58 = Escape; echo keycode 1 = Caps_Lock) | sudo loadkeys -'
Atualização
Hoje em dia (2022) eu encontrei a solução ideal que é ter um teclado configurável.
Comprei um Moonlander Mark I e mapeei o Caps Lock para a tecla à
esquerda do A
.
Nenhuma alteração via software necessária.