Wie kann ich vim dazu bringen, meine Worte nicht mehr in Stücke zu teilen?

8

Benutzer in englischer Sprache haben diese Probleme wahrscheinlich nicht, aber vim ist ziemlich dumm, wenn es um reguläre Ausdrücke geht. In meinem Fall scheinen die meisten Buchstaben des türkischen Alphabets außerhalb des EN-Alphabets nicht als Wortzeichen zu gelten.

Angesichts eines Dokuments, das ein türkisches Wort enthält:

gerçekleşiyor

Der Suchausdruck

/ger\wek

… Stimmt nicht mit dem Wortanfang überein. Aus irgendeinem Grund ist ç kein Wortzeichen.

Dies wird ärgerlich, wenn Plugins \wals Teil ihres regulären Ausdrucksrepertoires verwendet werden. Ein typisches Beispiel ist neocompcache(was ich anstelle von neocompleteweil es mit Neovim kompatibel ist). Mit zusätzlichen übereinstimmenden Regelsätzen für einige Sprachsyntaxen erfolgt die automatische Vervollständigung nur in wortgroßen Blöcken. Wenn ich große Mengen türkischer Prosa schreibe, wäre es praktisch, eine funktionale automatische Vervollständigung zu haben, aber da die meisten Wörter in kleinere Teile zerlegt werden und die türkischen Zeichen weggelassen werden, ist dies mehr als nutzlos.

Wie kann ich vim (vorzugsweise neovim, wenn es darauf ankommt) davon überzeugen, einen größeren Bereich von Zeichen als "Wort" -Zeichen zu akzeptieren?

Caleb
quelle
Welche Codierung und Dateicodierung verwenden Sie?
CXW
@cxw utf-8auf der ganzen Linie . Und ja, es ist in beiden Einstellungen eingestellt.
Caleb
1
Sie haben diese Frage als neovim markiert . Ich würde vorschlagen, dass Sie ein Problem im NeoVim Issue Tracker öffnen, falls es noch keines gibt. Dies wird wahrscheinlich nicht kurzfristig behoben, sondern wird auf der ganzen Linie sein ... Sie können auch versuchen, eine Nachricht an vim_dev zu senden, aber ich vermute, jeder wird zustimmen, dass etwas getan werden muss, danach nichts mehr Änderungen.
Martin Tournoij
@ Carpetsmoker Neovim Ausgabe geöffnet .
Caleb

Antworten:

5

\wist ausdrücklich kurz für [0-9A-Za-z_]. Verwenden Sie \kstattdessen, wenn Sie Unicode-Zeichen außerhalb dieses Bereichs abgleichen möchten. Zum Beispiel /ger\kekÜbereinstimmungen gerçekleşiyor.

By the way, ist neocomplete sich dessen bewusst , aber absichtlich nicht nicht verwenden \k(Standardeinstellung) wegen Leistungsbedenken. Sie können die g:neocomplete#keyword_patternsEinstellung von neocomplete ändern . Siehe auch:

https://github.com/Shougo/neocomplete.vim/issues/207

Justin M. Keyes
quelle
4

Es gibt anscheinend keine einfache Möglichkeit, sie neu zu definieren \w. Siehe zum Beispiel, dass Vim-Regex-Übereinstimmungen mit Unicode-Zeichen als Nicht-Wort und Übereinstimmungswort mit Zeichen jenseits von a-zA-Z sind .

Möglicherweise können Sie jedoch einen benutzerdefinierten Bereich verwenden, wenn Sie nichts dagegen haben, ihn regelmäßig erneut einzugeben (ha) : [a-zA-Z\%u00c7-\%u015f]. Das passt leider auch zu vielen nicht-türkischen Zeichen, aber wenn diese Zeichen nicht in Ihrem Text erscheinen, ist das möglicherweise in Ordnung.

cxw
quelle
1
Leider habe ich nicht die Kontrolle über alle Orte, an denen solche regulären Ausdrücke verwendet werden. Eine beliebige Anzahl von Plugins wird verwendet \wund daher fallen sie alle aus, wenn es darum geht. Anstatt jeden einzelnen zu patchen (wenn ich die Schuldigen überhaupt ausfindig machen kann), wäre es für mich einfacher, vim zu patchen, damit es \wfunktioniert. Bah.
Caleb