2012-07-25 13 views
11

Ho un file xml formattato correttamente, e dopo il comando dato come risposta qui:Vim formattazione utilizzando gg = G con XML

How can I autoformat/indent C code in vim?

Sto cercando di indentazione automatica mio file da visualizzare corretta nidificazione .

Prima ho cercato di utilizzare questo comando ho impostato il tipo di file XML utilizzando :set ft=xml del file ho iniziato con ha un'estensione di .mm, e anche :set nowrap.

Ecco il mio file ~/.vimrc:

syntax on 
set history=1000 
set smartindent 
set tabstop=2 
set shiftwidth=2 
set expandtab 

Come mai quando emetto gg=G, ricevo un messaggio che dice 54 lines indented, eppure il mio file rimane non-nested?

+1

Non una risposta diretta, ma hai provato [xmllint] (http://xmlsoft.org/xmllint.html) --format? – ephemient

+0

No, non ho, non ho davvero bisogno intrinseco di avere il file formattato in questo momento - sto solo cercando il motivo per cui questo comando non sta facendo ciò che mi aspetto che vim. Grazie per il suggerimento però. – grimetime

risposta

19

nel caso in cui si vuole provare cosa propria penetratore XML di Vim, è possibile ...

:filetype indent on   (load indent files for specific file types etc.) 
:e       (to reload the current buffer) 

questo caricherà il vimscript a $ VIMRUNTIME/trattino/xml .vim

poi quando lo fai

:set indentexpr?   

... si dirà indentexpr = XmlIndentGet (v: lnum, 1)

.210

~~

xmllint è meglio, però, vedere ... http://vim.wikia.com/wiki/VimTip349

ho scorciatoia a portata di mano in questo modo per nel mio Vimrc!

" one or more lines: 
vmap ,px !xmllint --format -<CR> 

" pretty-print current line 
nmap ,px !!xmllint --format -<CR> 
+1

Sono curioso perché pensi che xmllint sia migliore. Secondo la mia esperienza, è eccessivamente aggressivo nell'eliminare righe e commenti vuoti, mentre l'indent XML incorporato di Vim _only_ indenta gli spazi bianchi iniziali come previsto. Per gli interessati: ho avuto un sacco di problemi a far funzionare il formattatore XML incorporato di Vim fino a quando non ho adottato tpope's [vim-sensible] (https://github.com/tpope/vim-sensible) default, a quel punto tutto "ha funzionato" incluso l'operatore vim's equals (=). Vedi anche http://stackoverflow.com/a/28365920/1207769 – ctrueden

5

Provare a digitare: :set equalprg?. Se dice equalprg= significa che non hai un programma impostato per il rientro xml, quindi probabilmente sta facendo qualche azione stupida di default. Ecco una guida per l'impostazione xmllint come formattatore: http://ku1ik.com/2011/09/08/formatting-xml-in-vim-with-indent-command.html

+0

Grazie! Ha funzionato alla grande Stavo guardando uno dei [Screencast di Derek Wyatt] (http://vimeo.com/15443936) e ho appena pensato che vim sapesse come nidificare xml su se stesso. – grimetime

+2

Grande riferimento alla guida sulla configurazione di xmllint come formattatore. La formattazione dell'XML può essere una cosa molto personalizzata ... ad esempio, potresti non voler indentare ogni tag in tutte le situazioni o potresti volere il text wrapping per i nodi long text(). Quindi un'alternativa a xmllint potrebbe essere [xmlformat] (http://www.kitebird.com/software/xmlformat/)! – darcyparker

Problemi correlati