Trova la parola che contiene caratteri oltre a-zA-Z


15

Per abbinare una parola si può usare

\v(\w+)

Dall'aiuto di vim :h \w:

\ w carattere parola: [0-9A-Za-z_]

Funziona esattamente come descritto nel manuale. Tuttavia, voglio abbinare parole che contengono caratteri oltre a-z, ad esempio prästgården . La corrispondenza dell'espressione regolare \v(\w+)con il prästgården produce invece tre partite:

prästgården
^^ ^^^ ^^^^

Come abbinare le parole contenenti caratteri oltre a-z? Il mio locale è impostato in inglese e, se possibile, mi piacerebbe mantenerlo così.

Modifica: le parole potrebbero non appartenere a una singola locale, ad es

prästgården
treść

Le classi di caratteri POSIX (ad esempio [[:alpha:]]\+in questo caso) dovrebbero fare quello che vuoi qui, ma secondo i documenti di Vim ( :help regex) non funziona: "Questi elementi funzionano solo per i caratteri a 8 bit". Funziona qui con Vim 7.3 su OS X 10.8, ma Vim 7.3 su Linux non funziona, quindi suppongo che ci sia qualcosa di specifico per Apple su questo Vim che lo permetta. Scoprirai anche che farlo attraverso l'associazione Vim Perl fallisce, anche se Perl ha un ottimo supporto Unicode. Potrebbe essere necessario passare a uno script Perl esterno, quindi è possibile attivare il supporto Unicode completo.
Warren Young

A proposito, se vai con Perl, vuoi usare al \p{Word}posto di una classe di caratteri POSIX. Ci sono molti casi di eccezione nella gestione della classe di caratteri POSIX di Perl, che eviti quando usi invece le proprietà Unicode.
Warren Young

Risposte:


9

Vim (dalla versione 7.3) è molto limitato rispetto al supporto di caratteri non ASCII nei pattern. In particolare, \wcorrisponde solo alle lettere ASCII, che è di utilità limitata.

Esistono alcuni modelli di classi di caratteri che supportano Unicode. Di interesse per te sono \I, che in generale corrisponde a lettere e solo lettere, più _e @. Almeno su Debian Squeeze (in una localizzazione UTF-8), ci sono errori; per esempio ×e ÷sono abbinati come lettere, ma tutte le lettere accentate latine sembrano essere riconosciute correttamente. \Ipuò essere configurato tramite l' isidentopzione, almeno per la parte ASCII.

Se desideri un serio supporto Unicode, dovrai fare affidamento su uno strumento esterno. Ad esempio perl -C -e '/\p{L}/'per abbinare le lettere UTF-8 (presupponendo una locale UTF-8).



2

Funziona anche per cirillico

\v\k

Un po 'più complicato e fallisce con il cirillico

\v(\c[0-9a-z_[=a=][=c=][=e=][=i=][=l=][=n=][=o=][=r=][=s=][=t=][=u=][=y=][=z=]])

Doc .

Testato su Vim 7.4.


Vorrei aggiungere [=l=]all'elenco che verrebbe trattato ł(ad esempio złoty), ecc. Ma questo già fallisce per il russo. Comunque, grazie per averlo condiviso.
Marco
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.