Um ein Wort zu finden, kann man verwenden
\v(\w+)
Aus der Vim-Hilfe :h \w
:
\ w Wortzeichen: [0-9A-Za-z_]
Dies funktioniert genau wie im Handbuch beschrieben. Ich möchte jedoch Wörter finden, die darüber hinausgehende Zeichen enthalten a-z
, z . B.
prästgården . Die Übereinstimmung des regulären Ausdrucks \v(\w+)
mit
prästgården ergibt stattdessen drei Übereinstimmungen:
prästgården
^^ ^^^ ^^^^
Wie werden Wörter verglichen, die darüber hinausgehende Zeichen enthalten a-z
? Mein Gebietsschema ist Englisch, und wenn möglich, möchte ich es so lassen.
Bearbeiten: Die Wörter gehören möglicherweise nicht zu einem einzelnen Gebietsschema, z
prästgården
treść
vim
regular-expression
Marco
quelle
quelle
[[:alpha:]]\+
in diesem Fall) sollen hier tun, was Sie wollen, laut Vim docs (:help regex
) jedoch nicht: "Diese Elemente funktionieren nur für 8-Bit-Zeichen." Hier funktioniert es zwar mit Vim 7.3 unter OS X 10.8, aber Vim 7.3 unter Linux funktioniert nicht. Ich gehe also davon aus, dass dieses Vim etwas Apple-spezifisches hat, das es zulässt. Sie werden auch feststellen, dass die Ausführung über die Vim-Perl-Bindung ebenfalls fehlschlägt, obwohl Perl sehr gute Unicode-Unterstützung bietet. Möglicherweise müssen Sie zu einem externen Perl-Skript wechseln, damit Sie die vollständige Unicode-Unterstützung aktivieren können.\p{Word}
anstelle einer POSIX-Zeichenklasse verwenden. Es gibt viele Ausnahmefälle in der POSIX-Zeichenklassenbehandlung von Perl, die Sie vermeiden, wenn Sie stattdessen Unicode-Eigenschaften verwenden.Antworten:
Vim (ab Version 7.3) ist hinsichtlich der Unterstützung von Nicht-ASCII-Zeichen in Mustern sehr eingeschränkt. Insbesondere werden
\w
nur ASCII-Buchstaben gefunden, was von begrenztem Nutzen ist.Es gibt einige Zeichenklassenmuster, die Unicode unterstützen. Interessant für Sie sind im
\I
Großen und Ganzen Buchstaben und nur Buchstaben plus_
und@
. Zumindest bei Debian Squeeze (in einem UTF-8-Gebietsschema) gibt es Fehler. Zum Beispiel×
und÷
werden als Buchstaben abgeglichen, aber alle Buchstaben mit lateinischem Akzent scheinen korrekt erkannt zu werden.\I
kann durch dieisident
Option zumindest für den ASCII-Teil konfiguriert werden .Wenn Sie ernsthafte Unicode-Unterstützung wünschen, müssen Sie sich auf ein externes Tool verlassen. Zum Beispiel
perl -C -e '/\p{L}/'
, um UTF-8-Buchstaben abzugleichen (unter der Annahme eines UTF-8-Gebietsschemas).quelle
Es funktioniert auch für Kyrillisch
Etwas komplizierter und versagt mit Kyrillisch
Doc .
Getestet auf Vim 7.4.
quelle
[=l=]
der Liste hinzufügen , die auchł
(z. B. Złoty) usw. abdecken würde . Das scheitert aber schon für Russisch. Trotzdem danke fürs Teilen.Verwenden Sie
\k
. Sieheiskeyword
Option.quelle