Vim nimmt Umlaute nicht als Wortzeichen

9

Wenn ich einen deutschen Text schreibe, der so etwas wie abücdzum Beispiel und ein dwvorangestelltes enthält, wird nur das gelöscht, abda es nicht üals Wortzeichen interpretiert wird .

Wenn ich reStructuredText bearbeite, habe ich

iskeyword=38,42,43,45,47-58,60-62,64-90,97-122,_

Das erklärt, warum die Umlaute nicht markiert sind, aber ich verstehe nicht, woher das kommt. Wenn ich gerade gVim öffne, ist dies auf eingestellt

iskeyword=@,48-57,_,192-255

Woher könnte das kommen?

Martin Ueding
quelle
3
Setzen Sie set encoding=utf-8Ihre .vimrc.
Cuonglm
Das ist schon in meinem .vim/vimrcund :set enc?gibt mir utf-8. Gleiches gilt für fenc. Trotzdem funktioniert es nicht.
Martin Ueding
Nachher :set iskeyword&wird üimmer noch nicht als Teil eines Wortes erkannt?
Ryuichiro
Zeigen Sie als Ihr Schlüsselwort ( set iskeyword). Es sollte so etwas wie "@,48-57,_,128-167,224-235"oder sein "@,48-57,_,192-255". Verwenden Sie Vim oder Vi? (Der Standardwert in Vi ( "@,48-57,_") erkennt ü nicht; der Standardwert in Vim ist in Ordnung)
JJoao
1
Ich benutze gVim und habe iskeyword=@,48-57,_,192-255. Es funktioniert jetzt auf magische Weise in einer neuen Vim-Instanz. Das ist seltsam, das muss ich genauer beobachten.
Martin Ueding

Antworten:

5

Das @Zeichen in iskeywordenthält alle Zeichen, für die isalpha()(C-Funktion) TRUE ist. In modernen (letzten 20 Jahren) libc-Implementierungen wird auch nach Unicode-Zeichen gesucht.

Ihre zweite iskeywordVerwendung 97-122(az) und 64-90(AZ), die nicht alle Varianten mit den verschiedenen Diakritika (wie Umlaut / Diaeresis / Trema) enthalten.

Die Lösung ist also zu ersetzen 97-122und 64-90mit @.

Dieser Funky iskeywordstammt aus der LISP-Syntaxdatei. Die rstSyntaxdatei enthält eine Reihe anderer Syntaxdateien zum Hervorheben der Codeblöcke.

Glücklicherweise können Sie festlegen, welche Sprachen in die g:rst_syntax_code_listVariable aufgenommen werden sollen. Der Standardwert ist:

let g:rst_syntax_code_list = ['vim', 'java', 'cpp', 'lisp', 'php', 'python', 'perl']

Da es unwahrscheinlich ist, dass in Ihrer reStructuredText-Datei eine Hervorhebung der LISP-Syntax erforderlich ist, können Sie diese wahrscheinlich einfach entfernen. Fügen Sie es einfach an einer beliebigen Stelle in Ihrer vimrc-Datei hinzu. Wenn es definiert ist, verwendet die Syntaxdatei diesen Wert, anstatt einen eigenen zu definieren.

Meiner Meinung nach möchten Sie wahrscheinlich verwenden:

let g:rst_syntax_code_list = []

Denn wer weiß, welche funky Nebenwirkungen die anderen Syntaxdateien verursachen ...

Martin Tournoij
quelle
Cool Danke! Dies ist mir bisher unter Ubuntu nicht passiert, es ist nur hier unter Fedora 22 passiert. Wahrscheinlich sind ihre Syntaxdateien etwas anders. Es funktioniert jetzt.
Martin Ueding
Der Hinweis mit der Bedeutung @für alphanumerische Zeichen war wirklich hilfreich.
Zelphir Kaltstahl
1

Wenn man Grammatiken aus anderen Sprachen in beispielsweise Markdown-Dateien einfügt, scheinen die Einstellungen dieser Sprachen die Einstellungen für die Markdown-Syntax zu überschreiben. Ob dies der Fall ist, kann überprüft werden mit:

:verbose set iskeyword?

Um dies zu beheben, kann man einen automatischen Befehl definieren, der jedes Mal ausgeführt wird, wenn eine Markdown-Datei (und wahrscheinlich auch andere Sprachen) eingegeben wird:

autocmd BufEnter,BufNewFile *.md set iskeyword=38,42,43,45,47-58,60-62,_,@

Durch das Einfügen in mein .vimrcProblem wurde das Problem für mich behoben. Ich war mit vim-pandocSyntax und inlined Sprachen , darunter racket, python, shund einige. Ich denke, es ist nicht notwendig, einen automatischen Befehl zum Verlassen von Markdown-Dateien zu definieren, denn wenn Sie Dateien anderer Sprachen eingeben, sollten deren Syntaxdateien ihre Schlüsselwörter festlegen, wenn ich das richtig verstehe.

Zelphir Kaltstahl
quelle