O que é essa magia Vim?

5

Em uma pergunta sobre jVi e sua capacidade de analisar .vimrc, o autor dá um exemplo de uma ligação vim complexa que ele afirma que o jVi não seria capaz de manipular:

inoremap hh <c-o>?\%<c-r>=line('.')<Return>l\({}\|\[]\|<>\|><\|()\|""\|''\|><lt>\)?s+1<Return>

Eu me pergunto o que (principalmente como) isso acontece. Até agora eu recebo:

  • < c-o > : executa um comando no modo normal e retorna ao modo de inserção
  • ? /% n: olha para trás para um caractere com o código dec / hex especificado
    • qual é o sentido de inserir o número da linha aqui?
  • a última parte procura por uma combinação específica de colchetes e coloca o cursor lá
    • Eu não entendo como l pode ser usado assim

Cuidado para esclarecer?

    
por Ярослав Рахматуллин 15.03.2013 / 17:51

1 resposta

4

A Ctrl + O é como você indicou. E o primeiro ? faz iniciar uma pesquisa para trás.

Uma sequência de padrões como \%15l restringe a pesquisa à linha 15, o l após o primeiro <Return> é o final de tal sequência. O mapeamento usa Ctrl + R , o especial = register ( :help i_CTRL-R ) e a expressão line('.') para inserir o número da linha atual naquele sequência, impedindo que a pesquisa vá para uma linha diferente.

O restante do mapeamento até o caractere final ? é bastante direto encaminhar a expressão regular para corresponder a qualquer uma das várias seqüências de caracteres.

O% final% co_de indica o fim do padrão, a porção ? faz com que o cursor a ser posicionado 1 caractere após o início da partida ( s+1 ).

    
por 15.03.2013 / 19:17

Tags