Vim Match enthalten nicht wie erwartet

627
Klas. S

Ich habe versucht, die C-Syntax in Vim mit dem Beispiel im Handbuch zu erweitern.

Zuerst starte ich vim ohne Konfiguration:

vim -u NONE test.c 

Dann lade ich die c-Syntax und erstelle meine Erweiterung

syntax on syntax keyword myword HELP containedin=cComment contained highlight myword guibg=red 

Code:

1: /* HELP */ 2: int main(int argc, char **argv) { 3: int HELP = 0; 4: if(HELP); 5: } 

HELP wird wie erwartet in Zeile 1 hervorgehoben. Es wird auch in Zeile 4 hervorgehoben. Gibt es dafür eine Erklärung?

2

1 Antwort auf die Frage

0
Ingo Karkat

Sie müssen herausfinden, welche Syntaxgruppe HELPdie dritte Zeile "belegt", die von Ihrer Syntaxregel nicht abgedeckt wird. :syn listZeigt alle aktiven Gruppen an, aber es ist einfacher, wenn Sie die SyntaxAttr.vim - Syntax-Hervorhebungsattribute von Zeichen unter dem Cursor- Plugin installieren .

SyntaxAttr sagt mir, dass die cBlockSyntax dort übereinstimmt. Dies muss auch in Ihrer Erweiterung enthalten sein:

syntax keyword myword HELP containedin=cComment,cBlock contained 
Wenn ich `: SyntaxAttr ()` rufe, wenn sich der Cursor innerhalb der Klammern befindet, wird mir nur `group: myword guibg = red (# ff0000)` angezeigt. Ich verstehe nicht, warum ich `cBlock` verwenden sollte, da ich die Anzahl der Stellen einschränken möchte, an denen die myword-Hervorhebung verwendet wird. Klas. S vor 7 Jahren 0
Der `cBlock` umfasst alles in` {`...`} `und verhindert die Übereinstimmung. Diese Definition befindet sich in $ VIMRUNTIME / syntax / c.vim`. Es würde auch die "HELP" in Zeile 4 verdecken; Das ist jedoch in `cParen` enthalten, das` ALLBUT enthält, ... `Das` ALL` bewirkt, dass Ihr 'myword' eingeschlossen wird. Daher wird es hervorgehoben, ohne dass Sie 'includedin = cParen` benötigen. Ingo Karkat vor 7 Jahren 0