2012-07-25 27 views
11

Tôi có một tập tin xml định dạng đúng, và sau lệnh đưa ra là một câu trả lời ở đây:Vim định dạng sử dụng gg = G với xml

How can I autoformat/indent C code in vim?

Tôi cố gắng để tự động thụt lề tập tin của tôi để hiển thị làm tổ đúng .

Trước khi tôi cố gắng sử dụng lệnh này tôi đặt loại tập tin để xml sử dụng :set ft=xml như file tôi bắt đầu với có một phần mở rộng của .mm, và cũng :set nowrap.

Đây là tập tin ~/vimrc của tôi:

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

Tại sao khi tôi phát hành gg=G, tôi nhận được một thông báo nói 54 lines indented, tuy nhiên tập tin của tôi vẫn chưa lồng nhau?

+1

Không phải là câu trả lời trực tiếp, nhưng bạn đã thử [xmllint] (http://xmlsoft.org/xmllint.html) --format? – ephemient

+0

Không, tôi không có, tôi không thực sự có nhu cầu vốn có để định dạng tệp tại thời điểm này - tôi thực sự chỉ tìm kiếm lý do tại sao lệnh này không làm những gì tôi mong đợi trong vim. Nhờ đề nghị mặc dù. – grimetime

Trả lời

19

trong trường hợp bạn muốn thử điều indenter XML riêng của Vim, bạn có thể ...

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

này sẽ được tải vimscript tại $ VIMRUNTIME/indent/xml .vim

sau đó khi bạn làm

:set indentexpr?   

... nó sẽ nói indentexpr = XmlIndentGet (v: lnum, 1)

.210

~~

xmllint là tốt hơn mặc dù, nhìn thấy ... http://vim.wikia.com/wiki/VimTip349

tôi có keybinding tiện dụng như thế này cho nó trong vimrc của tôi!

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

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

Tôi tò mò tại sao bạn cảm thấy xmllint là tốt hơn. Theo kinh nghiệm của tôi, nó là quá tích cực trong việc cắt tỉa các dòng mới và các bình luận trống, trong khi đó trình tạo XML tích hợp của Vim _only_ thụt vào khoảng trắng hàng đầu như mong đợi. Đối với những người quan tâm: Tôi gặp vô số rắc rối khi sử dụng trình định dạng XML tích hợp của Vim để làm việc, cho đến khi tôi chấp nhận [vim-sensible] của tpope (https://github.com/tpope/vim-sensible) mặc định, tại thời điểm đó mọi thứ "chỉ hoạt động" bao gồm toán tử bằng (=) của vim. Xem thêm http://stackoverflow.com/a/28365920/1207769 – ctrueden

5

Thử nhập: :set equalprg?. Nếu nó nói equalprg= nó có nghĩa là bạn không có một chương trình thiết lập cho xent indentation, do đó, nó có thể làm một số hành động mặc định câm. Đây là hướng dẫn để thiết lập xmllint như định dạng của bạn: http://ku1ik.com/2011/09/08/formatting-xml-in-vim-with-indent-command.html

+0

Cảm ơn! Điều đó làm việc tuyệt vời. Tôi đã xem một trong những [Derek Wyatt's vim Screencasts] (http://vimeo.com/15443936) và chỉ giả định rằng vim biết cách làm tổ xml trên chính nó. – grimetime

+2

Tham chiếu tuyệt vời cho hướng dẫn về thiết lập xmllint làm trình định dạng. Định dạng XML có thể là một điều rất cá nhân hóa ... ví dụ, bạn có thể không muốn thụt lề mọi thẻ trong mọi tình huống hoặc bạn có thể muốn gói văn bản cho các nút văn bản dài(). Vì vậy, một thay thế cho xmllint có thể là [xmlformat] (http://www.kitebird.com/software/xmlformat/)! – darcyparker

Các vấn đề liên quan