Warum blinkt vim zufällig, wenn ich durch Code navigiere?

8
# vim --version
VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Mar 31 2015 23:36:07)
# cat /root/.vimrc 
map <F2> :w\|!sh % <cr>
map <F3> :w\|!bash % <cr>
map <F4> :w\|!python % <cr>
map <F5> :w\|!python % &<cr>

highlight RedundantWhitespace ctermbg=DarkBlue guibg=red
match RedundantWhitespace /\s\+$\|\t/

syntax on
highlight Comment ctermfg=green

Ich fange an, Highcharts zu bearbeiten. Beispiel htm:

# vi /var/www/js/highcharts/examples/dynamic-master-detail/index.htm

Animation des Problems

Ich bin durch den Code navigieren und ich verwende nur die Pfeiltasten und die Home, Page Up, Page Downund EndTasten.

Nach 2 Minuten tritt dieser visuelle Fehler auf; Die Hälfte des Bildschirms unter meinem Cursor verliert seine Syntaxhervorhebung und wird einfarbig. Wenn ich Page Downoder Page Updrücke, wird die Syntaxhervorhebung wiederhergestellt.

Jeder HTML-Code mit Javascript ist betroffen.

austronaut2123
quelle
Passiert dies bei anderen Terminals, die Sie ausprobiert haben, oder nur bei einem?
Fruglemonkey
Im Film ist es nackt xterm. Dies geschieht auch im Bildschirm innerhalb von xterm. Was sonst? konsole? Nein, das habe ich noch nicht versucht.
austronaut2123
Kommt es dann auch in der Konsole vor? Sie sollten testen
fruglemonkey
Ja. Es tut ...
austronaut2123
Hilft es, die minlinesEinstellung für Ihre aktuelle Syntaxhervorhebung zu erhöhen ? Dh :syn sync minlines=800(nach Bedarf anpassen).
Zilk

Antworten:

1

Dies könnte ein Problem mit dem vim-System zum Erkennen und anschließenden Hervorheben syntaktischer "Schlüsselwörter" sein, die nicht genügend Kontext zum Erkennen von Schlüsselwörtern erhalten.

Die grundlegenden Konzepte des Syntaxsystems von vim (Suchen und Kennzeichnen grundlegender Syntaxelemente) werden in erläutert :h usr_44

Grundsätzlich verwendet vim Regex, um syntaktische Elemente in einer Datei zu erkennen. Sobald diese identifiziert sind, werden Hervorhebungsregeln angewendet, um diese Codekonstrukte einzufärben (dh "Syntaxhervorhebung" durchzuführen), aber wie in :h 44.10vim erläutert, beginnt das Parsen nicht mit dem Am Anfang der Datei werden einige Zeilen (z. B. 10 oder 100 Zeilen) vom oberen Rand Ihres aktuellen Ansichtsfensters nach oben gestartet.
Wenn ein syntaktisches Konstrukt, z. B. ein sich öffnendes HTML-Tag oder eine Funktionsdefinition usw., höher beginnt als der Punkt, an dem vim mit dem Parsen beginnt, wird der reguläre Ausdruck der vims-Syntax unterbrochen.

Um dies zu beheben, erhöhen Sie normalerweise den Punkt, an dem vim mit dem Parsen beginnt.
Um herauszufinden, wie viele Zeilen über der obersten Zeile des Ansichtsfensters vim mit der Analyse beginnt, verwenden Sie Folgendes:

:syntax sync

Hier ist meine Ausgabe beim Anzeigen einer HTML-Datei:

:syntax sync
--- Syntax sync items ---
syncing on items; minimal 10, maximal 100 lines before top line
[lots of other output here...]

Wenn ich ein Problem mit der Synchronisierung hätte - nur für diese Datei - würde ich die Minlines mit erhöhen

:syntax sync minlines=200

Wenn Sie dieses Problem wiederholt beheben, ist es etwas schwieriger. Dies liegt daran, dass der Synchronisierungswert häufig in einer Syntaxdatei festgelegt wird, die dem von Ihnen bearbeiteten syntax sync minlinesDateityp zugeordnet ist , z. B. für mich, dass HTML-Dateitypen in der Syntaxdatei festgelegt sind

/usr/share/vim/vim74/syntax/html.vim

Syntaxanalyse und Konfigurationswerte für CSS-Dateien sind in

/usr/share/vim/vim74/syntax/css.vim 

Shell ist in sh.vimund so weiter.
Diese Syntax - Skripten nur zu dem Zeitpunkt Sie eine Datei des Typs öffnen laufen foo.css, bar.html, baz.shusw., also eine Zeile in Ihrer vimrc Einstellung wird nicht funktionieren , weil diese Skripte würden davon entfernt Ihre Einstellungen blasen, eine Lösung ist eine autocmd welche Auslöser , wenn Sie verwenden Geben Sie die Datei ein

autocmd BufEnter *.html :syntax sync minlines=200
the_velour_fog
quelle
0

Ich bekomme diese mit CMakeList.txtDateien. Es ist Teil des Syntaxhervorhebungsmechanismus. Ich bekomme es auch in "langem" (ein paar Seiten wirklich) HTML, wo ich JavaScriptCode habe. Für diese verwende ich den folgenden Befehl:

:syn sync fromstart

In den meisten Fällen wird das Problem dadurch behoben.

Beachten Sie, dass der Befehl vim sehr langsam macht, wenn Sie eine wirklich große Datei bearbeiten. In den meisten Fällen ist die "Langsamkeit" für mich mehr als erträglich.

Alexis Wilke
quelle