2012-07-25 30 views
11

我有一個格式正確的XML文件,並給出一個答案這裏的命令如下:Vim的使用GG用XML格式= G

How can I autoformat/indent C code in vim?

我想自動縮進我的文件,以顯示正確的嵌套。

之前,我試圖用這個命令我設置文件類型使用:set ft=xml 我開始有.mm的擴展名的文件,以XML,也:set nowrap

這裏是我的〜/ .vimrc文件:

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

爲什麼當我發出gg=G,我得到一個消息說54 lines indented,但我的文件保持不嵌套?

+1

不是一個直接的答案,但你嘗試過[xmllint(http://xmlsoft.org/xmllint.html)--format? – ephemient 2012-07-25 17:42:15

+0

不,我沒有,我現在並沒有真正需要格式化文件的內在需求 - 我只是在尋找這個命令沒有達到我期望的vim的原因。 (還是)感謝你的建議。 – grimetime 2012-07-25 17:50:03

回答

19

的情況下,你想嘗試Vim的自己的XML壓頭的事情,你可以...

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

這將在$ VIMRUNTIME /縮進/ XML加載的Vimscript vim的

然後你做

:set indentexpr?   

...它會說indentexpr = XmlIndentGet(v:lnum緩衝區裏,1)

~~

xmllint是更好不過,看到... http://vim.wikia.com/wiki/VimTip349

我有方便的按鍵綁定這樣它在我的vimrc!

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

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

我很好奇爲什麼你覺得xmllint更好。根據我的經驗,在刪除空白的換行符和註釋方面過於積極,而Vim的內置XML壓縮器_only_按照預期壓縮了主要空格。除了那些感興趣的人之外,我還有許多麻煩讓Vim的內置XML格式化工作,直到我採用了tpope的[vim-sensible](https://github.com/tpope/vim-sensible)默認情況下,在這一點上,一切「剛剛工作」,包括vim的等於(=)運算符。另見http://stackoverflow.com/a/28365920/1207769 – ctrueden 2015-02-06 12:39:49

5

試試打字::set equalprg?。如果它說equalprg=這意味着你沒有爲xml縮進設置的程序,所以它可能會做一些愚蠢的默認操作。下面是設置xmllint爲您格式化指南:http://ku1ik.com/2011/09/08/formatting-xml-in-vim-with-indent-command.html

+0

謝謝!這很好。我正在觀看[Derek Wyatt的vim Screencasts](http://vimeo.com/15443936)之一,並假設vim知道如何自己嵌套xml。 – grimetime 2012-07-25 18:29:18

+2

關於將xmllint設置爲格式化程序的指南很有參考價值。格式化XML可以是一種非常個性化的事情......例如,您可能不想在所有情況下縮進每個標籤,或者您可能想要爲長文本()節點換行。所以xmllint的替代方案可能是[xmlformat](http://www.kitebird.com/software/xmlformat/)! – darcyparker 2012-07-25 23:19:50