Por que o vim pisca aleatoriamente quando estou navegando no 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

Estou começando a editar highcharts example htm:

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

animação do problema

Eu estou navegando através do código e eu estou usando apenas as setas e os Home, Page Up, Page Down, e Endteclas.

Após 2 minutos, essa falha visual ocorre; metade da tela sob o cursor perde o destaque da sintaxe e se torna uma cor. Se eu pressionar Page Downou Page Up, o realce da sintaxe será restaurado.

Qualquer código html com javascript dentro é afetado.

austronaut2123
fonte
Isso acontece com outros terminais que você tentou ou apenas com um?
precisa saber é o seguinte
No filme, é um xterm vazio. Isso também está acontecendo na tela dentro do xterm. O quê mais? konsole? Não, eu não tentei isso ainda.
precisa saber é o seguinte
Isso acontece também no konsole, então? Você deve testar
fruglemonkey 20/01
Sim. Ele faz ...
austronaut2123 21/01
Aumentar a minlinesconfiguração do realce de sintaxe atual ajuda? Ou seja, :syn sync minlines=800(ajuste conforme necessário).
Zilk

Respostas:

1

Isso pode ser um problema no sistema do vim para reconhecer e destacar as "palavras-chave" sintáticas, não tendo contexto suficiente para reconhecer as palavras-chave.

Os conceitos básicos do sistema de sintaxe do vim (localizando e identificando elementos básicos de sintaxe) são explicados em :h usr_44

Basicamente, o vim usa o regex para reconhecer elementos sintáticos em um arquivo, uma vez identificados, e as regras de destaque são aplicadas para colorir essas construções de código (ou seja, para fazer o "realce da sintaxe"), mas, conforme explicado no :h 44.10vim, não começa a analisar a partir do arquivo. No início do arquivo, ele inicia um número de linhas (por exemplo, 10 ou 100 linhas) para cima a partir do topo da sua janela atual.
Se uma construção sintática, por exemplo, uma tag HTML de abertura ou uma definição de função, etc, for iniciada mais alto do que o ponto em que o vim começa a analisar, a sintaxe do vims será interrompida.

Normalmente, para corrigir isso, você aumenta o ponto em que o vim começa a analisar.
Para descobrir quantas linhas acima da linha superior do viewport vim estão iniciando seu uso de análise:

:syntax sync

Aqui está minha saída ao visualizar um arquivo HTML:

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

se eu tivesse um problema com a sincronização - apenas para esse arquivo - aumentaria as minlines com

:syntax sync minlines=200

Se você repetidamente resolver esse problema, será um pouco mais difícil. Isso ocorre porque o valor da sincronização geralmente é definido em um arquivo de sintaxe dedicado ao tipo de arquivo que você está editando, por exemplo, para mim, os syntax sync minlinestipos de arquivo html são definidos no arquivo de sintaxe.

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

análise de sintaxe e valores de configuração para arquivos css

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

shell está dentro sh.vime assim por diante.
Esses scripts de sintaxe só correr no momento em que você abre um arquivo do tipo foo.css, bar.html, baz.shetc, assim, definir uma linha em seu vimrc não vai funcionar porque esses scripts iria explodir suas configurações de distância, uma solução é usar um autocmd que desencadeia quando você insira o arquivo

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

Eu os recebo com CMakeList.txtarquivos. Faz parte do mecanismo de destaque da sintaxe. Eu também o recebo em HTML "longo" (algumas páginas, na verdade), onde tenho JavaScriptcódigo. Para estes, eu uso o seguinte comando:

:syn sync fromstart

E, na maioria dos casos, resolve o problema.

Observe que o comando tornará o vim muito lento se você editar um arquivo muito grande. Na maioria dos casos, para mim a "lentidão" é mais do que suportável.

Alexis Wilke
fonte