Applica il comando in modalità normale alle corrispondenze regex


10

Sto usando la seguente espressione regolare per abbinare una stringa di documentazione sotto una definizione della funzione Clojure:

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

C'è un modo per eseguire il gqcomando in modalità normale (linee di formato) su tutte le corrispondenze di questo modello in un determinato file?

Risposte:


10

Potenza di g:

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

La parte tra le /s è abbastanza autoesplicativa, poiché è la regex della tua domanda originale.

normal gngqalla fine è in qualche modo interessante. gnselezionerà la corrispondenza successiva dell'espressione regolare e gq, ovviamente, formatterà questa selezione (come indicato nella domanda).

:gè la parte davvero fantastica. Questa è, secondo me, una delle funzionalità più utili di Vim. Il gcomando ex prende una regex e un comando Ex, ed esegue il comando su ogni riga corrispondente alla regex. Se non ne hai :ggià sentito parlare , ti consiglio vivamente di farlo, poiché aumenterà notevolmente la tua produttività. Alcune risorse sono di Vim :help :go Power of g sul wiki di Vim.


Il gnpezzo sta selezionando dalla linea in cui Vviene attivato il successivo (non quello sulla stessa linea) del motivo. La documentazione di Vim afferma che se la modalità visiva è attiva, la selezione viene estesa dalla riga corrente al modello successivo. Ciò sta causando comportamenti indesiderati.

@merb Whoops, non me ne sono reso conto. Modificato.
Doorknob,

La selezione è ancora dalla linea della partita alla partita successiva . Scorrere i comandi in modalità normale mostra manualmente che //s<cr>mi lascia all'inizio della partita sulla riga corrente, ma //e<cr>mi lascia alla fine della partita successiva, non alla partita corrente.

1
Il problema sembra essere con //s<cr>V. Quando corro :normal Vvado in modalità linea visiva, come previsto. Quando corro, il :normal //s<cr>mio cursore si posiziona sul primo "della partita, come previsto. Quando corro :normal //s<cr>Vnon ottengo una selezione visiva.

1
Risolto Il comando deve essere normal gngq. Suggerendo una modifica.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.