Vim 들여 쓰기 xml 파일


101

저는 Vim을 배우고 있지만 이것이 간단한 작업이라고 생각했지만 작동하지 않습니다. 브라우저가 있지만 솔루션이 작동하지 않습니다.

파일 (xml)을 올바르게 들여 쓰려고합니다. 내가 사용하는 명령은 다음과 같습니다.

gg=G 

또는 ggVG = (이것이 아마 다른 일을하도록 만들었습니다.))

내 .vimrc는 다음과 같습니다.

syntax on 
filetype plugin indent on 
set nu 

원본, 결과 및 예상 출력은 무엇입니까?
Ingo Karkat 2014 년

무엇을 :set ft? indentexpr?filetype=xml indentexpr=XmlIndentGet(v:lnum,1)습니까?!
Ingo Karkat 2014 년

filetype = xml indentexpr = XmlIndentGet (v : lnum, 1). Yup
Haagenti 2014 년


1
저는이지도에 약간만 추가하여 만들고 싶습니다. 이렇게 m'ggVG=''하면 현재있는 줄을 저장하고 파일을 다시 들여 쓴 후 다시 이동합니다.
Hovis Biddle

답변:


193

나는 Berei의 대답을 좋아합니다. 그러나 다음은 vimrc파일 을 변경할 필요가 없다는 점에서 좀 더 유연하다고 생각 합니다. 또한 XML 파일의 일부를 선택하는 것이 더 쉽습니다 (내가 많이하는 일).

먼저 형식을 지정할 XML을 강조 표시하십시오.

그런 다음 일반 모드에서 ! xmllint --format -

하단의 명령 줄은 다음과 같습니다.

:'<,'>!xmllint --format -

그런 다음 Enter 키를 누르십시오.

기술적 설명

선택한 텍스트는 xmllint명령 으로 전송 된 다음 --format'ed' 로 전송되고 결과는 xmllintvim에서 선택한 텍스트 위에 배치됩니다. -이 경우, 정력에 보내는 선택한 텍스트이고, - 명령의 끝은 표준 입력을 수신하기위한 것이다 xmllint.


6
물론 이것은 외부 도구 xmllint가 설치되고 경로에 추가 된 경우에만 작동합니다.
Polymorphix

66
명령을 단순화하기 위해 :%!xmllint --format -, %이 XML 파일의 전체 범위를 의미한다.
hakunami

1
왜 모두가 xmllint 도구가 있다고 기대합니까? Ubuntu 15.04에는 없습니다. apt-get도 찾을 수 없습니다.
erikbwork

8
@ erikb85 패키지 및 패키지 내용을 검색 할 때 사용 apt-cache search하지 말고을 사용하십시오 apt-get. libxml2-utils누락 된 도구가 포함되어 있습니다.
ParanoiaPuppy

@hakunami 나는 그 과정을 단순화 해 1000 번 upvote에 수 있으면 좋겠다
niken

69

외부 프로그램을 사용하여 xml파일 을 들여 쓰십시오 . 이 경우 xmllint에는을 equalprg선택 했으므로 명령을 옵션으로 설정하십시오 .

:set equalprg=xmllint\ --format\ -

이제 실행할 수 있습니다.

gg=G

수 있도록 xmllint당신의 포맷 xml파일을.

사용할 때마다 얻으려면 ,를 사용하여 autocommand설정하십시오.

autocommand 아래 댓글에서

au FileType xml setlocal equalprg=xmllint\ --format\ --recover\ -\ 2>/dev/null

확실하지이 따라서 초보자를 작동하지만 내가 밖으로이 하나를 알아낼 이유)는 nows 작동 주셔서 감사합니다;)
Haagenti

8
.vimrc에서 다음을 사용하여 xml 파일을 편집 할 때 활성화 할 수 있습니다 au FileType xml setlocal equalprg=xmllint\ --format\ --recover\ -\ 2>/dev/null. 출처 -ku1ik.com/2011/09/08/…
studgeek

1
감사합니다! 큰 XML 파일과 vim에 매우 실망했습니다. Sublime에서는 매우 빠르게 다시 들여 쓰기 (5000 ~ 10000 줄 및 base64 데이터)하지만 Vim에서는 몇 분 다시 들여 쓰기합니다. 이 솔루션은 큰 XML 파일의 문제를 해결합니다. 다시 Vim에 만족합니다.
Sonique

당신이 우분투에 있다면, 당신은 설치해야합니다 libxml2-utilsxmllint가 얻을 패키지
hoffmanc

33

타사 도구가 필요하지 않은 간단한 솔루션은 각 여는 태그 '<...>'앞에 개행 문자를 삽입하는 것입니다. 그런 다음 표준 vim 자동 들여 쓰기를 사용할 수 있습니다. 요컨대 :

  1. %s/</\r</g
  2. gg=G 자동 들여 쓰기

큰 xml 파일로 시도했지만 처리하는 데 시간이 너무 오래 걸립니다.
Luc M

감사합니다. 이것은 충분히 쉬우 며 외부 도구 없이도 작업을 수행합니다.
공습

6
나는 %s/></>\r</g각 텍스트 요소가 같은 줄에 유지 되도록를 선호 합니다.
Nicola Musatti 2017

2
@NicolaMusatti 또는 가끔, 태그 사이에 공백이있는 경우%s/> *</>\r</g
아서 Tacca에

11

~ / .vimrc가 올바르게 설정되면 쉽게 얻을 수 있습니다.

~ / .vimrc에서 다음 옵션을 설정합니다.

filetype indent on
set smartindent

이렇게하면 커서를 파일의 맨 위로 이동하고 끝까지 들여 쓸 수 있습니다. gg = G

시각적 모드로 원하는 텍스트를 선택하고 =를 눌러 들여 쓰기 할 수도 있습니다.


2
나는 그것이 될 것입니다 생각 .vimrc대신 .bashrc.
Birei

1
이런. 바로 그거죠. 수정했습니다. 감사합니다.
jarederaj

모든 태그가 한 줄에있을 때 작동합니다. XML에 공백이나 끝줄이 없으면 아무 작업도 수행하지 않습니다.
José Ramón 2015

마크 업이 유효한 한 항상 저에게 효과적이었습니다.
jarederaj

마크 업이 (일관 적으로?) 별개의 줄에 있지 않다면 : % s / </ \ r </ g 다음에 : % s / \ n \ n / \ r /
jarederaj

11

짧은 대답 : matchit.vim을 켜십시오 . 당신은 추가 할 수 있습니다 packadd matchit당신에게 .vimrc, 또는 사용 VIM-재치 , 기본적으로 할 수 있습니다.

긴 답변 : 저는 Vim 위키에서 논의 된 xmllint 접근 방식을 포함하여 Vim에서 XML을 자동 들여 쓰기하는 많은 전략을 시도했습니다 . 의 문제 xmllint(와 같은 다른 외부 CLI 도구와 같은 접근 방식 xmlformattidy도)는 모두 빈 줄 바꿈을 압박 주장이다. 빈 줄, 주석 및 / 또는 기타 의도적 인 서식을 제거하지 않고 XML을 들여 쓰는 것 xmllint뿐 이라면 최선의 선택이 아닙니다.

Vim의 같음 (=) 명령은 matchit.vim 스크립트가 활성화 되어있는 한 이미 XML을 지원합니다 . 이를 활성화하는 가장 쉬운 방법 중 하나는 tpope의 vim-sensible 을 채택하는 것입니다 . 또 다른 추가하는 것입니다 packadd matchit당신에게 .vimrc. 그러면 XML 서식이 즉시 "작동"합니다.


1
더 정확하게 말하면 matchit.vim실제 솔루션 처럼 보입니다 . 당신은 그것을 사용할 수 있습니다 vimrc이 줄을 추가하여 :packadd matchit
기독교 론도

1
감사합니다 Christian; 나는 matchit.vim이 문제를 해결한다는 것을 명확히하기 위해 답변을 업데이트했습니다.
ctrueden

이것이 나를 위해 가장 잘 작동했기 때문에 찬성했습니다. 그러나 저는 Christian의 제안 (packadd matchit)을 짧은 대답에 추가하는 것이 좋습니다. 매우 간단하고 작업을 수행하기 때문입니다 (적어도 나를 위해)
mark

@mark 나는 Christian의 제안을 포함하도록 답변을 업데이트했습니다.
ctrueden

4

VIM에서 다음 명령을 사용하여 전체 파일 (하드 탭 사용)을 자동 들여 쓰기합니다.

:%!XMLLINT_INDENT="^I" xmllint --format -

(가) ^I당신을 통해 생성 한 캐릭터입니다 : CTRL+ v, CTRL+i


1

나는 같은 문제가 있었다. 그 라인이

set viewdir=~\.vim\views\

.vimrc문제를 일으켰습니다. 당신은 그것을 가지고 있지 않은지 확인하십시오.


1

Jesse Hogan의 대답은 좋지만 더 간단한 대답을 원합니다.

vim에 있고 XML 파일이 열려있는 동안 일반 모드에서 다음을 작성하십시오.

:%!xmllint --format %

그런 다음 Enter를 누르십시오. 모든 XML 파일의 형식이 지정됩니다.

이전에 xmllint 를 설치 했어야 함을 기억하십시오 .


0

coc.nvim플러그인을 사용하는 경우으로 설치 coc-xml:CocInstall coc-xml 다음 구성 파일에 형식 키를 매핑 할 수 있습니다 nmap <silent> fm <Plug>(coc-format).. 이제부터는 xml 파일뿐만 아니라 다른 파일도 매우 쉽게 포맷 할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.