Estou aprendendo Vim, mas achei que fosse uma tarefa simples, mas não consigo fazer funcionar. Tenho o navegador SO, mas as soluções não estão funcionando para mim.
Estou tentando indentar corretamente um arquivo (xml). O comando que uso é:
gg=G
ou ggVG = (inventado por mim mesmo provavelmente faz algo diferente;))
Meu .vimrc é:
syntax on
filetype plugin indent on
set nu
:set ft? indentexpr?
Será que lêfiletype=xml indentexpr=XmlIndentGet(v:lnum,1)
?!m'ggVG=''
, o que simplesmente salva a linha em que você está e retorna a ela após recuar o arquivo.Respostas:
Gosto da resposta do Berei. No entanto, acho que o seguinte é um pouco mais flexível, pois você não precisa alterar seu
vimrc
arquivo. Além disso, é mais fácil formatar partes selecionadas do arquivo XML (algo que eu faço muito).Primeiro, destaque o XML que deseja formatar.
Então, no modo normal, digite
! xmllint --format -
Sua linha de comando na parte inferior será semelhante a esta:
:'<,'>!xmllint --format -
Em seguida, pressione Enter.
Explicação Técnica
O texto selecionado é enviado para o
xmllint
comando e, em seguida--format
, editado, e os resultadosxmllint
são colocados sobre o texto selecionado no vim. O-
no final do comando é para receber entrada padrão - que, neste caso, é o texto selecionado que o vim enviaxmllint
.fonte
:%!xmllint --format -
,%
significa todo o escopo deste arquivo xml.apt-cache search
, nãoapt-get
, ao pesquisar pacotes e seu conteúdo.libxml2-utils
contém a ferramenta que falta.Use um programa externo para recuar seus
xml
arquivos. Neste caso eu escolhixmllint
, então defina o comando para aequalprg
opção:Agora você pode executar
para deixar
xmllint
formatar seusxml
arquivos.Para obtê-lo sempre que usar vim, use um
autocommand
para defini-lo.autocommand
de um comentário abaixofonte
au FileType xml setlocal equalprg=xmllint\ --format\ --recover\ -\ 2>/dev/null
. Fonte - ku1ik.com/2011/09/08/…libxml2-utils
pacote para obter xmllintUma solução simples que gosto e que não requer nenhuma ferramenta de terceiros é inserir uma nova linha antes de cada tag de abertura '<...>'. Depois, você pode usar o recuo automático padrão do vim. Em resumo:
%s/</\r</g
gg=G
recuar automaticamentefonte
%s/></>\r</g
, de modo que cada elemento de texto permaneça na mesma linha.%s/> *</>\r</g
Isso é fácil de conseguir, uma vez que ~ / .vimrc esteja configurado corretamente.
Defina as seguintes opções em ~ / .vimrc:
Isso permite que você mova o cursor para o topo do arquivo e indente até o final: gg = G
Você também pode selecionar o texto desejado com o modo visual e pressionar = para recuá-lo.
fonte
.vimrc
vez de.bashrc
.Resposta curta: Ligue matchit.vim . Você pode adicionar
packadd matchit
ao seu.vimrc
ou usar o vim-sensible , que o habilita por padrão.Resposta longa: tentei muitas estratégias para indentar XML automaticamente no Vim, incluindo a abordagem xmllint discutida no wiki do Vim . O problema com
xmllint
(e a mesma abordagem com outras ferramentas CLI externas, comoxmlformat
etidy
, também) é que todos eles insistem em espremer novas linhas em branco. Se tudo o que você deseja é indentar seu XML, sem remover linhas em branco, comentários e / ou outra formatação intencional, entãoxmllint
não é a melhor escolha.Acontece que o comando equals (=) do Vim já suporta XML, desde que o script matchit.vim esteja habilitado. Uma maneira super fácil de habilitá-lo é adotar o vim sensível ao tpope . Outra é adicionar
packadd matchit
ao seu.vimrc
. Então, a formatação XML "simplesmente funcionará" fora da caixa.fonte
matchit.vim
é a solução real. Você pode habilitá-lovimrc
adicionando esta linha:packadd matchit
No VIM, eu recuo automaticamente todo o arquivo (usando guias rígidas) usando o seguinte comando:
O
^I
é um único caractere que você gera por meio de: CTRL+ v, CTRL+ifonte
Eu tive o mesmo problema. Descobriu-se que a linha
no meu
.vimrc
causou o problema. Apenas certifique-se de que você não o tem.fonte
A resposta de Jesse Hogan é boa, mas prefiro uma resposta mais simples:
Enquanto você estiver no vim e seu arquivo XML estiver aberto, no modo normal, escreva isto:
em seguida, pressione Enter. Todo o seu arquivo XML será formatado.
lembre-se de que você deve ter instalado o xmllint antes.
fonte
para aqueles que aquele que está usando
coc.nvim
plugin, você pode instalarcoc-xml
por:CocInstall coc-xml
, em seguida, mapear formato chave em seu arquivo de configuração:nmap <silent> fm <Plug>(coc-format)
. De agora em diante, você pode formatar não apenas o arquivo xml, mas outros arquivos muito facilmentefonte