No vim, procure para trás por parêntesis / parentes correspondentes

7

Como a maioria de vocês provavelmente sabe, você pode usar % para procurar na linha para encontrar o próximo par / parênteses / parênteses e passar para o parceiro correspondente:

|a|rray[index] = value;
" |e| is the cursor; hit %:
array[index|]| = value;

Espero que exista uma chave semelhante que pesquise de trás para frente na linha, por exemplo:

array[index] = value|;|
" |;| is the cursor again, hit the key I'm looking for:
array|[|index] = value;

A maioria dos comandos vim tem um backwards e forward, então parece que isso deveria acontecer. Não tem um parceiro? Em caso afirmativo, é porque, uma vez que está em um caractere pareado, eles agiriam da mesma forma?

    
por Kevin 30.01.2012 / 19:38

3 respostas

3

Se você realmente quiser pesquisar para trás caracteres comuns correspondentes, você pode usar um desses vim -específicos:

  • [( ... (ir para o caractere anterior ( sem correspondência)
  • [{ ... (ir para o caractere anterior { sem correspondência)

Esses dois comandos têm parceiros correspondentes:

  • ]) ... (ir para o próximo caractere ) sem correspondência)
  • ]} ... (ir para o próximo caractere } sem correspondência)

Existem outros comandos semelhantes para #ifdef e para comentários em C.

Você pode encontrar mais quando em vim usando o comando :help % .

    
por 16.02.2012 / 17:48
2

Eu apenas tentei :map ^] ^%% (com ^] = Ctrl + v Ctrl + 5 aqui , como uma analogia com % = Deslocamento + 5 ).

Funciona para o caso específico dado, mas como ele não pesquisa para trás do cursor, ele sempre seleciona o primeiro parêntese aberto na linha e deixa o cursor no início da linha, se não o fizer encontre qualquer correspondência.

Esta é uma solução melhor; é feio e provavelmente há muito espaço para simplificar, mas acho que a semântica está exatamente correta (não move o cursor se não houver nenhum paren aberto e move para o primeiro paren aberto antes da coluna atual ).

:map ^] ^[:call search("[({[]", "bes", line("."))^M

para

  • ^] = Ctrl + v Ctrl + 5
  • ^[ = Ctrl + v Esc
  • ^M = Ctrl + v Retorno
por 16.02.2012 / 18:35
1

% encontra o par correspondente. Então, se você está em (ou {vai procurar adiante.

Se você estiver em um} ou), ele pesquisará de trás para frente.

% não é direcional, basta encontrar o colchete correspondente.

    
por 16.02.2012 / 23:41