Come attivare il REGEX esteso in VIM

Evadere i caratteri che dovrebbero avere un significato speciale nelle regex può essere molto fastidioso. Ma VIM ha un'interessante funzione chiamata very magic! Ecco come usarla.

Tempo di lettura stimato: 5 minuti

Introduzione

In generale, esistono modi meno folli di creare espressioni regolari rispetto a VIM. Per questo motivo potresti voler utilizzare altri strumenti per testare, convalidare e poi importare la tua regex nell’editor di testo.

Risparmia tempo con un buon tester

Un interessante tester di regex è regex101.com, che aiuta molto quando si compone un’espressione enorme. Ce ne sono altri molto belli, ma questo è il mio preferito.

Una volta trovata l’espressione perfetta, scopri in VIM che ora devi fare l’escape di caratteri che non dovrebbero essere letterali! E poi devi trasformarli in caratteri speciali per far funzionare il tutto…

( { } ) Ma c’è un’ottima soluzione, che consiste nel richiamare un’opzione interna chiamata very magic, che ti aiuterà molto a evitare l’escape di espressioni regolari molto lunghe.

Molto magico!

Quindi, per usare la magia, basta inserire un comando aggiuntivo prima dell’espressione regolare: \v

(Magia) \1 very magicIn un esempio semplice e poco creativo 😆 , sposiamo il gruppo 1 e poi lo riportiamo con , aggiungendo , ignorando tutto ciò che non è sposato in questa espressione.

#sem very magic
:%s/\v\(Magia\) furta-cor/\1 very magic/g

#com very magic
:%s/\v(Magia) furta-cor/\1 very magic/g

Finora tutto bene. Non sembra intralciare troppo il gioco. Ma facciamo un esempio più lungo, in cui il mancato utilizzo della magia può essere un vero problema.

Abbiamo 6 campi in un elenco di prodotti e dobbiamo fare alcune sostituzioni e inserimenti di righe e dati da inserire in un file .txt per generare NFe da Sefaz.

1|9388552610010|Item A|44.0000|10.0404545455|441.78
2|9488542618041|Item B|3.0000|14.0980000000|70.49
3|9588532619058|Item C|41.0000|4.9614285714|69.46
4|9583522613157|Item D|9.0000|4.5585714286|223.37
5|9588122623188|Item E|18.0000|4.8527777778|87.35
6|9384562634201|Item F|14.0000|28.2492857143|395.49
7|9285562614225|Item G|17.0000|10.7370588235|182.53
8|9186562647232|Item H|8.0000|3.2850000000|26.28
9|9280562617256|Item I|36.0000|125.0611111111|4502.20
10|9188552617270|Item J|14.0000|15.4914285714|216.88
11|9178552627324|Item K|17.0000|5.2288235294|88.89

L’elenco è stato inserito nel texter regex101.com, perfetto, tutti i campi corrispondevano.

Se lo inserisci direttamente in VIM, semplicemente non funzionerà. \v Ecco come dovrebbe apparire, senza usare molta magia:

#sem very magic, lotado de escapes

:%s~^\(\d+\)\|\(\d\{13\}\)\|\(.*\)\|\(\d+\.\d\{4\}\)\|\(\d+\.\d\{10\}\)\|\(\d+\.\d\{2\}\)$~H|\1||\rI|\2||\3|49019900||5102|un|\4\|\5|\6||un|\4|\5|||||1|||||||\rM||\rN|\rN10d|0|103|\rO||||999|\rO07|99|0.00|\rO11|0.0000|0.0000|\rQ|\rQ04|07|\rS|\rS04|07|~g

Ora, con \v

#com very magic, mais legível, (mais) compatível com outros robôs de regex, como o do regex101, do sed -E etc

:%s~\v^(\d+)\|(\d{13})\|(.*)\|(\d+\.\d{4})\|(\d+\.\d{10})\|(\d+\.\d{2})$~H|\1||\rI|\2||\3|49019900||5102|un|\4\|\5|\6||un|\4|\5|||||1|||||||\rM||\rN|\rN10d|0|103|\rO||||999|\rO07|99|0.00|\rO11|0.0000|0.0000|\rQ|\rQ04|07|\rS|\rS04|07|~g

$1 $2 $3Nota: i mirror di gruppo nei vari motori di regex sono di solito chiamati con $: , ma in VIM è \1 \2 \3

Per non incappare in problemi molto magici e godersi solo il bello, c’è una cosa importante da sapere: diversi caratteri che non hanno un significato speciale in altri robot regex, ora lo hanno qui, in VIM.

\v @ % & ~Utilizzando , si dà un significato speciale ad alcuni caratteri molto strani, come ad esempio . Quindi, se ti servono come letterali, evadili con \

@%&~

:%s/\v\@\%\&\~

Automatizzare la magia

Purtroppo non è possibile impostare l’opzione magica in .vimrc. \v Dovrai applicarla individualmente a tutte le regex che hai impostato. Puoi mappare la combinazione /s per generare un /s\v automaticamente aggiungendo l’opzione cnoremap nel tuo ~/.vimrc (Grazie al collega Micael Levi per la segnalazione nell’eccellente community di Telegram sulle espressioni regolari).

 " Mapeia s/ para /s\v
 cnoremap s/ s/\v


” Mappa /s in /s\v cnoremap s/ s/\v

Scopri tutte le informazioni su very magic e le altre opzioni di magia nella :guida di VIM

:help magic

(...) Use of "\v" means that after it, all ASCII characters except '0'-'9', 'a'-'z', 'A'-'Z' and '_' have special meaning: "very magic"

Domande, suggerimenti? Facci sapere nei commenti!

Vedi anche

No data was found

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Altri articoli

OpenAI lancia un’estensione rivoluzionaria per sfidare Google

OpenAI ha lanciato un’estensione del browser che mira a sostituire Google come motore di ricerca. Integrando la tecnologia ChatGPT, lo strumento consente di porre domande in linguaggio naturale, offrendo risposte contestualizzate e pertinenti. Grazie alla ricerca semantica avanzata e alla personalizzazione adattiva, l’estensione impara dalle interazioni degli utenti. OpenAI dà inoltre priorità alla privacy, utilizzando la crittografia e le politiche “do-not-track”. L’estensione è disponibile per il download in Chrome, sfidando il dominio di Google sul mercato.

Leggi l'articolo "

Ondata di malware con CAPTCHA falsi

La campagna di malware che utilizza falsi CAPTCHA si sta espandendo rapidamente, rappresentando un rischio crescente per gli utenti. Sfruttando la familiarità degli utenti con i CAPTCHA, i criminali informatici creano pagine che imitano questi meccanismi di sicurezza ma che in realtà distribuiscono pericolosi malware come Lumma e Amadey. Questi programmi compromettono seriamente la sicurezza dei dispositivi e dei dati degli utenti. Questa tecnica mostra l’evoluzione delle tattiche criminali, che ora manipolano elementi web comuni per ingannare le vittime. Questo scenario rafforza la necessità di adottare pratiche di sicurezza rigorose e di sensibilizzare gli utenti per prevenire questi attacchi sempre più sofisticati.

Leggi l'articolo "

Come utilizzare bc, il calcolatore di conchiglie

bc = calcolatrice da banco.
Se non conosci ancora la calcolatrice della tua shell, è il momento di imparare a usarla, anche se il suo utilizzo è molto elementare.
L’uso più banale delle sue funzioni dovrebbe già soddisfare la maggior parte delle tue esigenze.
Ma non lasciarti ingannare: si tratta di un software davvero potente che dovrebbe essere assolutamente presente nel tuo radar.

Leggi l'articolo "

Codifica/decodifica degli URL con sed

Esistono vari modi per codificare/decodificare gli url.
In genere i programmatori utilizzano funzioni già pronte per questo scopo.
Ma sai davvero cosa fanno queste funzioni?
Per questo articolo, ho scelto sed come strumento per sostituire i codici e ti indicherò le RFC che trattano l’argomento.

Leggi l'articolo "

Capire come personalizzare VIM su MacOS

Se stai già iniziando a familiarizzare con VIM, è il momento di fare i passi successivi.
In questo articolo ti spiegherò come configurare VIM per MacOS in quello che considero il modo più pulito (potresti volerlo installare in modo diverso e non c’è problema) e come configurare i plugin NerdTree, per accedere all’albero delle directory; Status Tab per inserire alcuni strumenti aggiuntivi sullo schermo (che rendono VIM molto bello); e il plugin Git, per facilitare il controllo delle versioni senza lasciare l’applicazione.
Buona lettura!

Leggi l'articolo "
bureau-it.com