¿Por qué parpadea vim al azar cuando estoy navegando por el código?

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

Estoy empezando a editar highcharts ejemplo htm:

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

animación del problema

Estoy navegando a través de código y estoy usando sólo las teclas de flecha y los Home, Page Up, Page Down, y Endllaves.

Después de 2 minutos se produce este problema visual; La mitad de la pantalla debajo de mi cursor pierde su resaltado de sintaxis y se convierte en un color. Si presiono Page Downo Page Up, se restablece el resaltado de sintaxis.

Cualquier código html con javascript dentro está afectado.

austronaut2123
fuente
¿Esto sucede con otros terminales que has probado, o solo con uno?
fruglemonkey
En la película, es desnudo xterm. Esto también está sucediendo en la pantalla dentro de xterm. ¿Qué más? konsole? No, todavía no intenté esto.
austronaut2123
¿Ocurre también en konsole, entonces? Deberías probar
fruglemonkey
Si. Hace ...
austronaut2123
¿Aumenta la minlinesconfiguración de su resaltado de sintaxis actual? Es decir, :syn sync minlines=800(ajustar según sea necesario).
Zilk

Respuestas:

1

Esto podría ser un problema con el sistema de vim para reconocer y luego resaltar las "palabras clave" sintácticas que no obtienen suficiente contexto para reconocer las palabras clave.

Los conceptos básicos del sistema de sintaxis de vim (encontrar y etiquetar elementos de sintaxis básicos) se explican en :h usr_44

Básicamente, vim usa expresiones regulares para reconocer elementos sintácticos en un archivo, una vez que se identifican, luego se aplican reglas de resaltado para colorear esas construcciones de código (es decir, para hacer "resaltado de sintaxis"), pero como se explica en :h 44.10vim no comienza a analizar desde el al comienzo del archivo, comienza un número de líneas (por ejemplo, 10 o 100 líneas) hacia arriba desde la parte superior de su ventana gráfica actual.
Si una construcción sintáctica, por ejemplo, una etiqueta HTML de apertura o una definición de función, etc., comienza más alto que el punto en que vim comienza a analizar, la sintaxis de vims se rompe.

Por lo general, para solucionar esto, aumenta el punto en que vim comienza a analizar.
Para saber cuántas líneas sobre la línea superior de la ventana gráfica de visualización está comenzando su uso de análisis:

:syntax sync

Aquí está mi salida al ver un archivo HTML:

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

si tuviera un problema con la sincronización, solo para ese archivo, aumentaría las minlines con

:syntax sync minlines=200

Si en repetidas ocasiones se soluciona este problema, es un poco más difícil. Esto se debe a que el valor de sincronización a menudo se establece en un archivo de sintaxis dedicado al tipo de archivo que está editando, por ejemplo, para mí, los syntax sync minlinestipos de archivo html se configuran en el archivo de sintaxis

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

el análisis sintáctico y los valores de configuración para archivos CSS están en

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

Shell está adentro sh.vimy así sucesivamente.
Estas secuencias de comandos de sintaxis sólo se ejecutan en el momento de abrir un archivo del tipo foo.css, bar.html, baz.shetc, por lo que establecer una línea en su vimrc no funcionará porque estas secuencias de comandos serían soplar sus ajustes de distancia, una solución es utilizar un autocmd que desencadena cuando se ingrese el archivo

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

Los consigo con CMakeList.txtarchivos. Es parte del mecanismo de resaltado de sintaxis. También lo obtengo en HTML "largo" (algunas páginas realmente) donde tengo JavaScriptcódigo. Para estos, utilizo el siguiente comando:

:syn sync fromstart

Y en la mayoría de los casos resuelve el problema.

Tenga en cuenta que el comando hará que vim sea muy lento si edita un archivo realmente grande. En la mayoría de los casos, para mí la "lentitud" es más que soportable.

Alexis Wilke
fuente