Die Hervorhebung der unvergleichlichen Klammern in vim
Ich bin immer brannte immer wieder durch unübertroffene Klammern beim schreiben von python-code in vim. Ich mag, wie Sie sind bearbeitet für C-code - vim-highlights in rot-alle geschweiften Klammern folgenden die unerreichte Klammer. Ich schaute auf die c.vim
syntax-Datei kurz zu versuchen, es zu verstehen, aber der Abschnitt behandelt Klammer Fehler ist sehr Komplex. Kann mir jemand erklären wie dieser code funktioniert und vorschlagen, wie ich schreiben könnte, etwas ähnliches für python-code?
Beispiel C-code mit unerreichter parens:
int main(void
{ /* brace highlighted in red */
} /* brace highlighted in red */
Da python-code muss nicht geschweifte Klammern zu markieren, müssen wir wählen was anderes (vielleicht auch andere Klammern).
BTW, ich habe versucht, aus das vim-plugin aber ich war nicht zufrieden mit dem Verhalten.
Edit:
Ich bin mit python generieren von C++ - code (eine Sprache, die gerne Klammern und Semikolons). Ich habe die unangenehme Angewohnheit, von der abschließene Teil aus einem file.write()
Methode aufrufen. Es wäre schön, wenn ich Sie bekommen könnte von vim zu machen, dass Fehler mehr visuell offensichtlich.
Update:
Ok, hier ist was ich bisher ausprobiert habe.
:syn region pParen transparent start="(" end=")" contains=ALL
:syn match pError display ")"
:hi def link pError Error
Leider, all dies tut, ist als highlight ein Fehler der rechten Klammer aller ausgewogene Klammern, das Gegenteil von dem, was ich tun möchte. Ich verstehe wirklich nicht, was ich hier mache (einfach kopiert aus der bestehenden C-syntax-Datei). Wenn jemand erklären könnte, was ich (falsch), würde ich mich freuen.
InformationsquelleAutor Michael Kristofik | 2009-02-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn ich das richtig verstehe, und Sie versuchen, zu betrachten, nicht übereinstimmende Klammer in C-code, der generiert wurde, in python), würde ich empfehlen Ihnen installieren Regenbogen.vim aus Dr. Chip ' s Website. Diese wird aufzeigen, Klammern in verschiedenen Farben je nach den Ebenen der Einrückung und markieren unmatching Klammern in rot, als Sie angefordert haben. Ein screenshot http://img294.imageshack.us/img294/8586/rainbow.jpg http://img294.imageshack.us/img294/8586/rainbow.jpg
Zu installieren, laden Sie
rainbow.vim
und invimfiles/after/syntax/c/
(erstellen Sie dieses Verzeichnis, wenn es nicht vorhanden ist).Auf Linux, das wird
~/.vim/after/syntax/c/rainbow.vim
Unter Windows, kann es sein
c:\vim\vimfiles\after\syntax\c\rainbow.vim
oder vielleicht irgendwo anders, siehe:help runtimepath
.Beachten Sie, dass es gibt einige plugins, die in Konflikt mit
rainbow.vim
, aber es ist nicht allzu schwer zu machen, Ihnen kooperieren.Wenn Sie versuchen, zu markieren, nicht passende Klammer im python-code, den Sie ändern könnte, Regenbogen.vim verwenden der python-syntax-Cluster anstelle des C, aber dies ist ein wenig komplizierter, aber man könnte etwas entlang der Linien von (modifizierten version von Dr. Chip ' s rainbow code):
EDIT:
Als test habe ich heruntergeladen gvim70.zip und vim70rt.zip von ftp://ftp.vim.org/pub/vim/pc/ (das sind die Windows-Versionen von Vim 7.0). Ich entpackt die beiden Dateien in ein neues Verzeichnis und lief
gvim.exe
ausvim/vim70/gvim.exe
. Ich nicht haben alle vim-Konfiguration gespeichert in "C:\Documents und Einstellungen", so läuft das vim ist die gleiche wie bei einem 'vanilla' - Konfiguration. Ich habe dann heruntergeladenpyprint.py
aus amk.ca/python/simple/pyprint.html als ein Stück Beispiel-code und kopiert den obigen code in eine Datei namens code.vim. In gVim, trat ich:e pyprint.py
. Es öffnete im white-hintergrund-Fenster, ohne syntax-highlighting. Ich habe dann eingegeben:syntax on
, die Umstellung der Standard-syntax-highlighting. Ich fügte hinzu, eine zweite)
Charakter auf Linie 8. Schließlich betrat ich:source code.vim
, die aus der zweiten)
Zeichen werden rot markiert.Habe ich auch durchgeführt, dieser test unter Linux (mit Vim 7.2), durch Eingabe der folgenden Befehlsfolge:
Wieder, die zweite Klammer hervorgehoben ist, und alles andere scheint normal.
Ah! Guter Punkt. Es ist nicht unbedingt notwendig, wie es definiert im wesentlichen die übereinstimmungen werden hervorgehoben, innerhalb der Klammern. Allerdings hatte ich die gehen zu machen ein Beispiel und es scheint zu funktionieren mit meinem test-code.
Dies scheint zu brechen, die Markierung für die korrekte python-code. Alles nach dem ersten '(' ist nicht markiert und es gibt keine Fehler markieren, wenn ich hinzufügen unübertroffene parens. Ich einige hervorheben, zurück, wenn ich Artikel hinzufügen pyParenGroup.
Ich habe gerade versucht dies mit ein paar Beispiel-code aus dem web und erstellt den folgenden screenshot (img401.imageshack.us/img401/6887/pyprint.png). Es scheint zu funktionieren, aber ich denke, es kann etwas sein, das mir fehlt über die Art von code, die Sie verwenden oder Ihr set-up im Allgemeinen.
Ich habe versucht, das Beispiel-code in das Bild und ich sehe nicht die gleichen, die Hervorhebung, die Sie haben. Die einzige Sache, die hervorgehoben, nachdem die erste '(' der string in Zeile 9. Ich bin mit gvim version 7.0.237.
InformationsquelleAutor DrAl
Erhalten Sie können vim verwenden, um das Gegenteil zu tun: machen Sie ein
und es hebt passenden Klammern. Sie werden wissen, wenn Sie unsymmetrisch ist, wenn es nicht um etwas hervorzuheben.
Ich bin auch davon ausgegangen, dass Sie vertraut mit dem ' % ' - Befehl, der hüpft Sie auf die passende element.
InformationsquelleAutor Andrew Barnett
Stop gap Lösung:
Das macht es so jedes mal, wenn Sie geben Sie eine linke Klammer wird automatisch in der rechten und steckte Sie in die position der Eingabe in zwischen.
InformationsquelleAutor Whaledawg
Nicht sicher, ob es dann mehr oder weniger verwirrend für Sie, aber Sie könnten Blick auf die
lisp.vim
- syntax-Datei (vor allem der Teil, wog:lisp_rainbow
behandelt wird), um zu sehen, wie Sie können markieren Sie passenden Klammern.Wenn Sie verwalten, um alle passenden Klammern, Sie könnten die übrig gebliebenen parens (D. H. unübertroffene parens) Standard-Fehler-Hervorhebung. Dies ist, was die lisp-Datei zu tun scheint.
EDIT: Wie wäre es damit:
Wenn Sie
:syn clear
und führen Sie diejenigen, die es scheint zu funktionieren. Beachten Sie, dass die Reihenfolge dersyn
Befehle ausgeführt Angelegenheiten. Pro:h :syn-priority
, die Regel matched letzten ist das eine, die Wirkung, die sein können, warum Ihre Regeln markiert alle end-parens in der Datei.EDIT #2:
Was c ist.vim ist tatsächlich tun, ist die Hervorhebung alle
{}
innerhalb von()
, ob alles richtig verschlossen ist oder nicht. Versuchen Sie({})
im C-Modus, ist es noch highlights der{}
als Fehler.Ich glaube nicht, dass dieser Ansatz kann verwendet werden, um die Prüfung direkt für eine
(
mit einer unvergleichlichen)
, weil:syn region
egal ist, ob das end-Muster vorhanden ist oder nicht.Also Sie haben etwas zu finden Python-spezifisch, das sollte nie gehören ins
()
. Dann Spiel gegen"(\_[^)]*the_forbidden_something"
. Ich weiß nicht, Python genug, um zu wissen, was das sein könnte.Wenn nichts anderes, die Sie tun können:
entspricht einer öffnenden Klammer keine schließende Klammern vor dem Ende-der-Datei. Dieser schlägt fehl, wenn es feststellt, dass ein schließen der Klammer, was bedeutet, es wird nicht mal verstanden
(()<EOF>
.Vim ist syn-Befehl ist ein wenig kryptisch. Hat mein edit funktioniert?
Dass alle highlights extra Recht parens in rot. Es hat den Nebeneffekt, der Beseitigung aller Hervorhebung in Klammern. Ich nicht bekommen, meine Hervorhebung zurück, bis ich das Gleichgewicht zwischen den Klammern. Es ist ein guter Anfang. Können wir verbessern?
InformationsquelleAutor Brian Carper
Haben Sie versucht, mit matchit.vim? Es unterstützt alle Arten von Spiele, und es sollte Arbeit in Python.
InformationsquelleAutor Nathan Fellman
Als eine Abhilfe, die ich gefunden dieser Gedankenstrich-Skript auf der vim-website, die angeblich macht einen besseren job, der Einrücken Python-code. Wenn Sie am Ende eine Zeile mit unsymmetrische parens, es rückt die nächste Zeile um Zeile mit der öffnenden Klammer.
InformationsquelleAutor Michael Kristofik
Das plugin vim-matchopen tut, was Sie suchen
Die Farbe für die Hervorhebung von änderungen basierend auf Ihrem colorscheme
InformationsquelleAutor Bryce Guinta