[英]Vim indent xml file
我正在學習 Vim,但我認為這是一項簡單的任務,但我無法讓它發揮作用。 我有瀏覽器,但解決方案對我不起作用。
我正在嘗試正確縮進文件(xml)。 我使用的命令是:
gg=G
或 ggVG= (我自己做了這個可能會做一些不同的事情;))
我的 .vimrc 是:
syntax on
filetype plugin indent on
set nu
我喜歡貝雷的回答。 但是,我認為以下內容更靈活一點,因為您不必更改vimrc
文件。 此外,格式化 XML 文件的選定部分更容易(我經常這樣做)。
首先,突出顯示要格式化的 XML。
然后,在可視模式下,輸入! xmllint --format -
! xmllint --format -
您在底部的命令行將如下所示:
:'<,'>!xmllint --format -
然后點擊進入。
選定的文本被發送到xmllint
命令,然后是--format
'ed, xmllint
的結果將放在 vim 中選定的文本上。 命令末尾的-
用於接收標准輸入 - 在這種情況下,它是 vim 發送給xmllint
的選定文本。
使用外部程序縮進您的xml
文件。 在這種情況下,我選擇xmllint
,因此將命令設置為equalprg
選項:
:set equalprg=xmllint\ --format\ -
現在你可以執行
gg=G
讓xmllint
格式化您的xml
文件。
要在每次使用vim時獲取它,請使用autocommand
來設置它。
來自下面評論的autocommand
au FileType xml setlocal equalprg=xmllint\ --format\ --recover\ -\ 2>/dev/null
我喜歡的一個不需要任何第三方工具的簡單解決方案是在每個開始標記“<...>”之前插入換行符。 然后你可以使用標准的 vim 自動縮進。 簡而言之:
%s/</\r</g
gg=G
自動縮進簡短回答:打開matchit.vim 。 您可以將packadd matchit
添加到您的.vimrc
中,或使用默認啟用它的vim- sensible 。
長答案:我嘗試了許多在 Vim 中自動縮進 XML 的策略,包括Vim wiki 上討論的 xmllint 方法。 xmllint
的問題(以及與其他外部 CLI 工具如xmlformat
和tidy
的相同方法)是它們都堅持擠出空白換行符。 如果您只想縮進您的 XML,而不刪除空行、注釋和/或其他有意的格式,那么xmllint
不是最佳選擇。
事實證明,只要啟用了matchit.vim腳本,Vim 的 equals (=) 命令就已經支持 XML。 啟用它的一種超級簡單的方法是采用 tpope 的vim- sensible 。 另一種是將packadd matchit
添加到您的.vimrc
中。 然后,XML 格式將“開箱即用”。
一旦 ~/.vimrc 設置正確,這很容易實現。
在 ~/.vimrc 中設置以下選項:
filetype indent on
set smartindent
這允許您將光標移動到文件頂部並縮進到末尾:gg=G
您還可以使用可視模式選擇所需的文本,然后按 = 縮進它。
傑西霍根的回答很好,但我寧願更簡單的回答:
當你在 vim 中並且你的 XML 文件被打開時,在正常模式下寫這個:
:%!xmllint --format %
然后按 Enter。 您的所有 XML 文件都將被格式化。
請記住,您之前應該已經安裝了xmllint 。
在 VIM 中,我使用以下命令自動縮進整個文件(使用硬制表符):
:%!XMLLINT_INDENT="^I" xmllint --format -
^I
是您通過以下方式生成的單個字符: CTRL + v , CTRL + i
我有同樣的問題。 原來,這條線
set viewdir=~\.vim\views\
在我的.vimrc
中引起了問題。 只要確保,你沒有它。
對於那些使用coc.nvim
插件的插件,您可以通過:CocInstall coc-xml
安裝coc-xml
-xml ,然后在配置文件中映射格式鍵: nmap <silent> fm <Plug>(coc-format)
。 從現在開始,您不僅可以格式化 xml 文件,還可以很容易地格式化其他文件
由於某些 java 問題,無法使coc-xml
正常工作。 事實證明,鑒於許多現代系統已經帶有 python,使用 python 的 xml 模塊可能是一個快速的解決方案。 將下面添加到您的.vimrc
com! FormatXML :%!python3 -c "import xml.dom.minidom, sys; print(xml.dom.minidom.parse(sys.stdin).toprettyxml())"
現在您可以從命令模式執行:FormatXML
了。 然后設置語法高亮
:set ft=xml
# OR
:set syntax=xml
獎勵:由於我使用 SAML 執行此操作,因此您可以通過選擇 base64 文本(可視模式)並在命令模式下執行!base64 -d
來快速解碼 vim/neovim 中的base64 。 它將在命令中顯示如下:
:'<,'>!base64 -d
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.