Chave de fim do Solaris vim

0

Uma pergunta simples: por que com o Solaris 10 no vim, pressionar a tecla final produzir F?

Isto é o que aconteceu depois de pressionar

This is a text file,i will press "end key"

    F
    F
    F
    F
:(
    
por elbarna 24.01.2015 / 23:37

2 respostas

1

Solução encontrada

# For some reason home and end keys are not mapping properly.
# Home key
imap <esc>OH <esc>0i
cmap <esc>OH <home>
nmap <esc>OH 0
# End key
nmap <esc>OF $
imap <esc>OF <esc>$a
cmap <esc>OF <end>

link

    
por 24.01.2015 / 23:39
1

Com o Solaris 10, você provavelmente está executando o xterm ou o gnome-terminal. Para o xterm, ele tem o patch xterm # 196 e um xterm X11R6 ligeiramente corrigido.

O vim obtém as informações do terminal do banco de dados do terminal. A definição xterm não possui uma definição para as chaves home / end. Aqui está o que parece no formato terminfo:

#       Reconstructed via infocmp from file: /usr/share/lib/terminfo/x/xterm
xterm|vs100|xterm terminal emulator,
        am, km, mir, msgr, xenl,
        cols#80, it#8, lines#65,
        acsc=''aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
        bel=^G, blink=\E[5m, bold=\E[1m, clear=\E[H\E[2J,
        cr=\r, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=\b,
        cud=\E[%p1%dB, cud1=\n, cuf=\E[%p1%dC, cuf1=\E[C,
        cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A,
        dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M,
        ed=\E[J, el=\E[K, el1=\E[1K$<3>, enacs=\E(B\E)0,
        home=\E[H, ht=\t, hts=\EH, ich=\E[%p1%d@, ich1=\E[@,
        il=\E[%p1%dL, il1=\E[L, ind=\n, ka1=\EOq, ka3=\EOs,
        kb2=\EOr, kbs=\b, kc1=\EOp, kc3=\EOn, kcub1=\EOD,
        kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, kent=\EOM,
        kf0=\E[21~, kf1=\E[11~, kf10=\EOx, kf2=\E[12~,
        kf3=\E[13~, kf4=\E[14~, kf5=\E[15~, kf6=\E[17~,
        kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, rc=\E8, rev=\E[7m,
        ri=\EM, rmacs=^O, rmkx=\E[?1l\E>, rmso=\E[m,
        rmul=\E[m,
        rs1=\E>\E[1;3;4;5;6l\E[?7h\E[m\E[r\E[2J\E[H, rs2=@,
        sc=\E7,
        sgr=\E[0%?%p1%p6%|%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;m%?%p9%t^>
        sgr0=\E[m, smacs=^N, smkx=\E[?1h\E=, smso=\E[7m,
        smul=\E[4m, tbc=\E[3g,

Se a descrição do terminal tivesse teclas de início / fim, elas seriam listadas como khome e kend , respectivamente.

Além disso, a sequência de inicialização rs1 ativa o modo de aplicação para as teclas do cursor (que podem incluir o teclado de edição de 6 teclas com o Início e chaves End ). Isso faz com que eles enviem o prefixo escape O .

O vim não sabe nada sobre essa informação, já que ela apenas usa o que pode obter do banco de dados do terminal. Quando ele vê uma seqüência de caracteres não no banco de dados do terminal, ele tenta interpretar esse caractere de cada vez. O caractere escape finaliza o modo de inserção, mas O "abre" (inicia uma inserção) e você obtém o caractere final da chave, por exemplo, H ou F . Pressionando repetidamente a tecla obtém-se um F por impressão (deixando-o no modo de inserção após pressionar a tecla).

A correção adequada seria reparar a descrição do terminal, evitando a necessidade de mapeamentos no seu .vimrc , por exemplo,

infocmp >foo
vi foo
....adding this line (with a leading tab character):
        khome=\EOH, kend=\EOF,
sudo tic foo

Leitura adicional:

por 18.12.2016 / 01:57