terça-feira, 4 de outubro de 2011

Colocar as teclas de cursor a funcionar no vi em Solaris

Em Solaris 10, o vi vem com uma funcionalidade muito irritante que é a de não ter a funcionar nem o backspace nem o delete nem as teclas de cursor no modo de edição. As teclas de cursor por exemplo trocam minúsculas por maiúsculas e vice-versa.

A solução do problema não é difícil, bastando criar um ficheiro e colocar alguns mapeamentos que solucionam o problema.

Assim, criar na home do utilizador o ficheiro .exrc.

Dentro desse ficheiro colocar os mapeamentos pretendidos.
O conteúdo tem de ser escrito à mão e NÃO PODE SER COPIADO. Caso contrário não irá funcionar.
Os mapeamentos não podem ter espaços no final, nem pode haver linhas em branco no ficheiro.

Exemplo de ficheiro .exrc (NÃO COPIAR. Escrever no ficheiro o conteúdo, conforme instruções mais abaixo):


:map! ^[OA ^[ka
:map! ^[OB ^[ja
:map! ^[OC ^[la
:map! ^[OD ^[ha
:map! ^[[3~ ^[xa
:map! ^? ^[Xa

Para escrever o conteúdo usar os seguintes comandos (são comandos de controlo, por isso não podem ser copiados):

^[OA = CTRL-V + Seta-para-cima
^[ka = CTRL-V + ESCAPE + k + a

^[OB = CTRL-V + Seta-para-baixo
^[ja = CTRL-V + ESCAPE + j + a

^[OC = CTRL-V + Seta-para-direita
^[la = CTRL-V + ESCAPE + l + a

 ^[OD = CTRL-V + Seta-para-esquerda
^[ha = CTRL-V + ESCAPE + h + a

^[[3~ = CTRL-V + DELETE
 ^[xa = CTRL-V + ESCAPE + x + a

^H = CTRL-V + BACKSPACE
 ^[Xa = CTRL-V + ESCAPE + x + a


Explicação dos mapeamentos:

:map! ^[OA ^[ka -> Coloca a seta para cima a funcionar em modo de edição
:map! ^[OB ^[ja-> Coloca a seta para baixo a funcionar em modo de edição
:map! ^[OC ^[la-> Coloca a seta para a direita a funcionar em modo de edição
:map! ^[OD ^[ha-> Coloca a seta para a esquerda a funcionar em modo de edição
:map! ^[[3~ ^[xa-> Coloca o delete a funcionar em modo de edição, apagando o carácter seleccionado pelo cursor
:map! ^? ^[Xa-> Coloca o backspace a funcionar em modo de edição, apagando o carácter à esquerda do cursor


Esta foi uma configuração que escolhi.
Pode-se adaptar esta configuração usando outros comandos do vi, e acrescentando mais mapeamentos se necessário.

Documentação vi: http://hea-www.harvard.edu/~fine/Tech/vi.html

Onde encontrei a solução: http://www.jonathanlaliberte.com/2009/12/01/fix-arrow-keys-in-vi-on-solaris/comment-page-1/#comment-3548

Sem comentários: