Zastosuj polecenie trybu normalnego do wyrażeń regularnych

10

Korzystam z następującego wyrażenia regularnego, aby dopasować ciąg dokumentacji pod definicją funkcji Clojure:

\vdefn.*\n\s*\zs"([^"]|\n)*"

Czy istnieje sposób na uruchomienie gqkomendy trybu normalnego (formatowanie linii) na wszystkich dopasowaniach tego wzorca w danym pliku?


źródło

Odpowiedzi:

10

Moc g:

:g/\vdefn.*\n\s*\zs"([^"]|\n)*"/normal gngq

Część między /literami jest dość oczywista, ponieważ jest wyrażeniem regularnym z twojego pierwotnego pytania.

normal gngqna końcu jest dość interesujące. gnwybierze następne dopasowanie wyrażenia regularnego i gq, oczywiście, sformatuje ten wybór (jak wspomniałeś w pytaniu).

:gto naprawdę świetna część. To, moim zdaniem, jedna z najbardziej przydatnych funkcji Vima. Polecenie gex pobiera wyrażenie regularne i polecenie Ex i wykonuje polecenie w każdej linii, w której wyrażenie regularne jest zgodne. Jeśli jeszcze się nie nauczyłeś :g, zdecydowanie polecam to zrobić, ponieważ znacznie zwiększy to twoją wydajność. Kilka zasobów należy do Vima :help :glub Power of g na wiki Vima.

Klamka
źródło
gnKawałek jest wybranie z linii, w której Vjest wywołany do następnego (nie jeden na tej samej linii) wystąpienia wzorca. Dokumentacja Vima stwierdza, że ​​jeśli aktywny jest tryb wizualny, wybór jest przedłużany od bieżącej linii do następnego wzoru. To powoduje niepożądane zachowanie.
@merb Whoops, nie zdawałem sobie z tego sprawy. Edytowane.
Klamka
Wybór jest nadal od linii meczu do następnego meczu. Ręczne przechodzenie przez polecenia trybu normalnego pokazuje, że //s<cr>pozostawia mnie na początku dopasowania w bieżącym wierszu, ale //e<cr>pozostawia mnie pod koniec następnego dopasowania, a nie bieżącego dopasowania.
1
Problem wydaje się być związany z //s<cr>V. Po uruchomieniu :normal Vprzechodzę do trybu linii wizualnej, zgodnie z oczekiwaniami. Kiedy uruchamiam :normal //s<cr>kursor, ląduje w pierwszym "meczu, zgodnie z oczekiwaniami. Kiedy uruchamiam :normal //s<cr>V, nie widzę selekcji wizualnej.
1
Rozwiązałem to. Polecenie musi być normal gngq. Sugerowanie edycji.