Como você realiza uma pesquisa 2D no vim?

4

Estou procurando por linhas em um arquivo que correspondam a um padrão bidimensional.

Por exemplo, dado o seguinte arquivo de entrada:

aaaba
aabaa
aaaba
aaaaa
aaaaa

Eu gostaria de usar um padrão como

ab
ba
ab

para combinar nas 3 principais linhas. Idealmente, gostaria de poder fazer uma substituição com esse padrão, por exemplo, substituindo-o por

ba
ab
ba
    
por Brian Minton 22.05.2014 / 22:39

1 resposta

3

Isso não pode ser feito apenas por meio de expressões regulares. Você precisaria de um átomo especial que funcionasse como um grupo de captura , mas capturasse a coluna e, em seguida, um átomo correspondente para a recuperação. O melhor que você pode fazer é combinar cada linha em uma linha subsequente, para o seu exemplo

/ab\ze.*\n.*ba.*\n.*ab/

Com isso, não apenas as linhas que correspondem às linhas do bloco são correspondidas, mas todas as ocorrências que contêm o texto do bloco, embora não apenas com o mesmo alinhamento vertical, e apenas a correspondência da primeira linha são destacadas. O meu plug-in SearchHighlighting também fornece essa funcionalidade (mapeada para {Visual}* ).

Se isso não for suficiente (você pode usar o sinal /c em :substitute para verificar e reconhecer manualmente cada correspondência), você precisa criar sua própria infraestrutura de pesquisa (e substituta), ou seja, equivalentes de / , n / N e :s e faça a asserção adicional para alinhamento de bloco no Vimscript.

    
por 22.05.2014 / 23:05

Tags