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 natual. E, de fato, não é! Quando [Bill Joy][] criou o vi ele usava um [ADM-3A][adm3a]. 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. [adm3a]: https://en.wikipedia.org/wiki/ADM-3A [Bill Joy]: https://en.wikipedia.org/wiki/Bill_Joy
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ção
- Alt+o: Abre nova linha abaixo da posição atual
- Alt+A: Append ao final da linha atual
- Alt+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 sitema 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:
julio@julio-acer ~> 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 o X: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 -'