L'evidenziatore di sintassi Vim `cpp` termina prematuramente le macro a metà parola


0

MODIFICA FINALE: ho "migrato manualmente" questa domanda sul nuovo sito Vi (m) SE: https://vi.stackexchange.com/q/2219/1060


L'evidenziatore di sintassi di Vim per ft=cppsta terminando prematuramente alcune macro a metà linea. Per esempio:

evidenziando esempio di errore

(Il corsivo può rendere questo esempio un po 'difficile da capire; il carattere finale nella seconda riga è \.)

Questo fa parte di una macro multilinea; nota che la transizione dal blu (lo stile "macro") al grigio e in corsivo (lo stile "commento") avviene a metà parola (si trova sulla dodicesima riga della macro, ma ho visto altri casi in cui accade su un linea diversa).

Qualcuno ha qualche idea di cosa sta succedendo qui? Ho provato a cercare su Google se questo fosse un problema noto, ma non ho visto nessuno affermare che avevano questo particolare problema.

Sto usando vim-gtk(Vim 7.4) dal repository Wheezy-Backports.


Modifica: sembra che lo stile di evidenziazione delle macro termina non appena 0si incontra il primo in un punto diverso dall'inizio di un token. Ad esempio, il numero 0stesso non termina la macro, né la parola 0DIAGNOSTIC, ma lo DIAGNOSTIC0 fa (indipendentemente da ciò che segue il 0).


Modifica 2: Poiché il problema è riproducibile anche con -N -u NONE(vedi commenti sulla risposta di Ingo Karkat), ecco l'output completo di vim --version, nel caso in cui sia utile:

VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Dec 14 2014 15:36:29)
Included patches: 1-488
Modified by pkg-vim-maintainers@lists.alioth.debian.org
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   

Modifica 3: sto usando il plugin SyntaxAttr per ottenere informazioni sull'ultimo carattere evidenziato in macro e sul primo carattere evidenziato in commento.

Ultimo carattere macro: group: cDefine->PreProc guifg=5(5) guibg=-1(-1) Primo carattere non macro:cCppOut2->Comment guifg=6(6) guibg=-1(-1)


Modifica 4: l'output di :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

Includi una macro di esempio completa che mostri il problema.
Ingo Karkat,

@IngoKarkat Ho sostituito l'immagine originale. La caratterizzazione che ho dato nella mia modifica sembra essere abbastanza completa / accurata.
Kyle Strand,

Risposte:


1

Non riesco a riprodurre il problema, non con l'ultimo 7.4.608, né con 7.4 o 7.0. Penso che tu abbia estensioni di sintassi personalizzate che causano questo.

Prova con $ vim -N -u NONE; il problema probabilmente è andato allora.

Si dovrebbe quindi controllare le estensioni di sintassi ( ~/.vim/after/syntax/cpp.vim, ~/.vim/syntax/cpp/*.vim, ecc). Devi scoprire quale gruppo di sintassi provoca l'evidenziazione. :syn listmostra tutti i gruppi attivi, ma è più semplice quando si installa SyntaxAttr.vim - Mostra la sintassi evidenziando gli attributi del carattere nel plugin cursore . Quando si ha il nome del gruppo di sintassi offensivo, è possibile verificare da dove proviene; (le ultime righe di) :scriptnamespossono essere d'aiuto.


No, il problema persiste anche con -N -u NONEgrande sorpresa. Ho aggiunto l'output vim --versionalla domanda originale, nel caso in cui qualcosa potrebbe esserci un suggerimento.
Kyle Strand,

Proverò il plugin SyntaxAttr e ti farò sapere cosa vedo.
Kyle Strand,

Ho ora aggiunto informazioni dal plugin SyntaxAttr.
Kyle Strand,

Grazie per aver effettuato questi preziosi controlli; Sono sconcertato sul perché questo accade con la semplice vaniglia Vim. Si potrebbe ricontrollare :scriptnamesche in realtà non viene caricato alcun file al di fuori del runtime di Vim.
Ingo Karkat,

Ho deciso di "migrare manualmente" questa domanda sul nuovo sito Vi / Vim SE. Sentiti libero di migrare anche la tua risposta. vi.stackexchange.com/q/2219/1060
Kyle Strand
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.