Vim 'cpp' Marcador de sintaxe finaliza prematuramente as macros no meio da palavra

0

EDIÇÃO FINAL: Eu "migrei manualmente" esta questão para o novo site do Vi (m) SE: link

Meu marcador de sintaxe do Vim para ft=cpp está finalizando prematuramente algumas macros no meio da linha. Por exemplo:

(Aitálicapodetornaresteexemploumpoucodifícildeentender;ocaracterefinalnasegundalinhaé\.)

Issofazpartedeumamacromultilinha;notequeatransiçãodeazul(oestilo"macro") para cinza e itálico (o estilo "comentário") ocorre mid-word (está na 12ª linha da macro, mas eu já vi outros casos em que isso acontece em uma linha diferente).

Alguém tem alguma ideia do que está acontecendo aqui? Eu tentei googling para ver se este era um problema conhecido, mas eu não vi ninguém afirmando que eles tinham esse problema específico.

Estou usando vim-gtk (Vim 7.4) do repositório Wheezy-Backports.

Editar: parece que o estilo de realce da macro termina assim que o primeiro 0 é encontrado em qualquer lugar que não seja no início de um token. Por exemplo, o número 0 em si não termina a macro, nem a palavra 0DIAGNOSTIC , mas DIAGNOSTIC0 faz (independentemente do que segue o 0 ).

Editar 2: Como o problema é reproduzível mesmo com -N -u NONE (veja comentários sobre a resposta de Ingo Karkat), aqui está a saída completa de vim --version , caso seja útil:

VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Dec 14 2014 15:36:29)
Included patches: 1-488
Modified by [email protected]
Compiled by buildd@
Huge version with GTK2 GUI.  Features included (+) or not (-):
+acl             +farsi           +mouse_netterm   +syntax
+arabic          +file_in_path    +mouse_sgr       +tag_binary
+autocmd         +find_in_path    -mouse_sysmouse  +tag_old_static
+balloon_eval    +float           +mouse_urxvt     -tag_any_white
+browse          +folding         +mouse_xterm     +tcl
++builtin_terms  -footer          +multi_byte      +terminfo
+byte_offset     +fork()          +multi_lang      +termresponse
+cindent         +gettext         -mzscheme        +textobjects
+clientserver    -hangul_input    +netbeans_intg   +title
+clipboard       +iconv           +path_extra      +toolbar
+cmdline_compl   +insert_expand   +perl            +user_commands
+cmdline_hist    +jumplist        +persistent_undo +vertsplit
+cmdline_info    +keymap          +postscript      +virtualedit
+comments        +langmap         +printer         +visual
+conceal         +libcall         +profile         +visualextra
+cryptv          +linebreak       +python          +viminfo
+cscope          +lispindent      -python3         +vreplace
+cursorbind      +listcmds        +quickfix        +wildignore
+cursorshape     +localmap        +reltime         +wildmenu
+dialog_con_gui  +lua             +rightleft       +windows
+diff            +menu            +ruby            +writebackup
+digraphs        +mksession       +scrollbind      +X11
+dnd             +modify_fname    +signs           -xfontset
-ebcdic          +mouse           +smartindent     +xim
+emacs_tags      +mouseshape      -sniff           +xsmp_interact
+eval            +mouse_dec       +startuptime     +xterm_clipboard
+ex_extra        +mouse_gpm       +statusline      -xterm_save
+extra_search    -mouse_jsbterm   -sun_workshop    +xpm
   system vimrc file: "$VIM/vimrc"
     user vimrc file: "$HOME/.vimrc"
 2nd user vimrc file: "~/.vim/vimrc"
      user exrc file: "$HOME/.exrc"
  system gvimrc file: "$VIM/gvimrc"
    user gvimrc file: "$HOME/.gvimrc"
2nd user gvimrc file: "~/.vim/gvimrc"
    system menu file: "$VIMRUNTIME/menu.vim"
  fall-back for $VIM: "/usr/share/vim"
Compilation: gcc -c -I. -Iproto -DHAVE_CONFIG_H -DFEAT_GUI_GTK  -pthread -I/usr/include/gtk-2.0 -I/usr/lib/i386-linux-gnu/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/pango-1.0 -I/usr/include/gio-unix-2.0/ -I/usr/include/glib-2.0 -I/usr/lib/i386-linux-gnu/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng12     -g -O2 -fPIE -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1     -I/usr/include/tcl8.5  -D_REENTRANT=1  -D_THREAD_SAFE=1  -D_LARGEFILE64_SOURCE=1  
Linking: gcc   -L. -Wl,-z,relro -rdynamic -Wl,-export-dynamic -Wl,-E  -fPIE -pie -Wl,-z,relro -Wl,-z,now -Wl,--as-needed -o vim   -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgio-2.0 -lpangoft2-1.0 -lpangocairo-1.0 -lgdk_pixbuf-2.0 -lcairo -lpango-1.0 -lfreetype -lfontconfig -lgobject-2.0 -lglib-2.0   -lSM -lICE -lXpm -lXt -lX11 -lXdmcp -lSM -lICE  -lm -ltinfo -lnsl  -lselinux  -lacl -lattr -lgpm  -L/usr/lib -llua5.2 -Wl,-E  -fstack-protector -L/usr/local/lib  -L/usr/lib/perl/5.14/CORE -lperl -ldl -lm -lpthread -lcrypt -L/usr/lib/python2.7/config -lpython2.7 -lpthread -ldl -lutil -lm -Xlinker -export-dynamic -Wl,-O1 -Wl,-Bsymbolic-functions  -L/usr/lib -ltcl8.5 -ldl -lpthread -lieee -lm -lruby-1.9.1 -lpthread -lrt -ldl -lcrypt -lm  -L/usr/lib   

Editar 3: estou usando o plug-in SyntaxAttr para obter informações sobre o último caractere realçado em macro e o primeiro caractere realçado para comentários.

Último caractere de macro: group: cDefine->PreProc guifg=5(5) guibg=-1(-1) Primeiro caractere não macro: cCppOut2->Comment guifg=6(6) guibg=-1(-1)

Editar 4: A saída de :scriptnames :

1: /usr/share/vim/vim74/menu.vim
2: /usr/share/vim/vim74/autoload/paste.vim
3: /usr/share/vim/vim74/syntax/syntax.vim
4: /usr/share/vim/vim74/syntax/synload.vim
5: /usr/share/vim/vim74/syntax/syncolor.vim
6: /usr/share/vim/vim74/filetype.vim
7: /usr/share/vim/vim74/syntax/cpp.vim
8: /usr/share/vim/vim74/syntax/c.vim
    
por Kyle Strand 09.02.2015 / 19:00

1 resposta

1

Eu não consigo reproduzir o problema, não com o último 7.4.608, nem com 7.4, ou 7.0. Eu acho que você tem extensões de sintaxe personalizadas que causam isso.

Tente com $ vim -N -u NONE ; o problema provavelmente desapareceu então.

Você deve verificar suas extensões de sintaxe ( ~/.vim/after/syntax/cpp.vim , ~/.vim/syntax/cpp/*.vim , etc.). Você precisa descobrir qual grupo de sintaxe causa o destaque. :syn list mostra todos os grupos ativos, mas é mais fácil quando você instala os SyntaxAttr.vim - Mostrar os atributos de destaque da sintaxe de caractere sob o cursor . Quando você tem o nome do grupo de sintaxes ofensivas, pode investigar de onde vem; (as últimas linhas de) :scriptnames podem ajudar.

    
por 11.02.2015 / 09:15