Vim에서 일치하는 XML 태그로 이동


140

Vim %연산자는 일치하는 괄호, 주석 끝 및 기타 몇 가지로 이동합니다. 그러나 XML 태그 (또는 다른 태그)는 필자가 아는 한 일치하지 않습니다.

Vim을 사용하여 일치하는 XML 태그로 이동하는 가장 좋은 방법은 무엇입니까?

참고 : 나는 무엇 정말 하고 싶은 수동으로 일치하는 태그를 찾고없이 XML 파일의 섹션을 중복입니다.


4
원래의 질문을 해결에서합니다 (명확히 앞의 주 : )는 V + A + t 조합은 시각적 선택의 바닥에 당신을 드롭 보인다. 이것의 다른 쪽은 비주얼 모드 내에서 "o"명령 인 것 같습니다.이 옵션을 사용하면 현재 선택 항목의 다른 끝으로 이동합니다. 이것은 XML 문서뿐만 아니라 PHP / HTML을 편집 할 때도 효과적입니다 (자신의 경우처럼).
저스틴 벨

답변:


73

matchit.vim이라는 vim 플러그인이 있습니다. http://www.vim.org/scripts/script.php?script_id=39에서 찾을 수 있습니다 . 그것은 당신이 묘사하는 정확한 목적과 거의 비슷합니다.

이를 설치하고 커서를 태그의 본문에 놓고 (<>가 아니라면 일치) 다른 태그로 이동하려면 %를 누르십시오. 스크립트 페이지를 참조하여 일치하는 내용을 찾으십시오.


4
좋은데 항상 내 하드 디스크에 앉아있었습니다.
innaM

34
Vim이 이미 btw와 함께 제공되는 matchit의 일부 버전이 있습니다. runtime macros/matchit.vim활성화하고 %XML 태그를 일치시킬 수 있어야합니다.
Svend

1
mtchit.vim은 NeoVim에서 기본적으로 활성화 된 것으로 보입니다.
James

이미 일치하는 것일 수 있지만 기본적으로 사용하도록 설정되어 있지 않습니다. 추가 packadd! matchit.vimrc기능을 활성화. 더 읽기:help matchit
ruuter

242

추가 플러그인없이이 작업을 수행 할 수 있습니다.

  • 태그 위에 커서 놓기
  • vat -(외부) 태그를 선택하고 끝에 커서를 놓습니다.
  • 당신이 당신의 선택을했으면 당신은 상단과 하단으로 전환 할 수 있습니다 o( 마이클 그루버 주에 기반 업데이트 )
  • c- y시각 모드를 떠나기 위해 변경 또는 복사 또는 탈출 ...

또 다른 유용한 작업은 다음과 같습니다 vit.-태그의 내용을 선택합니다 (내부).

업데이트 (@elrado 덕분에) 예 : vito태그의 내부 내용을 선택하고 선택한 텍스트의 시작 부분에 커서를 놓습니다.

참조 : /superuser/182355/how-can-i-select-an-html-tags-content-in-vim

Vim 참조 (이 사실을 지적한 @Geek 덕분에) :

:help visual-operators

당신은 얻을 것이다:

4. Operating on the Visual area             *visual-operators*

The objects that can be used are:
    ...
    at  a <tag> </tag> block (with tags)        |v_at|
    it  inner <tag> </tag> block            |v_it|
    ...

1
동봉 된 컨텐츠를 "선택"하지 않고 태그로 이동하고 싶습니다. 그리고 1 또는 2 키 스트로크로 할 수 있다면 왜 태그를 선택할 때마다 5 키 누르기를합니까? (실제로 여러 번 발생 함)
kumarharsh

2
접힌 태그로 넘어가는 복잡한 방법이 있지만 내장 방법이 있다는 점이 좋습니다. 비주얼 모드를 통해 우회하는 유일한 방법입니까?
Mu Mind

2
홀리 몰리, 당신은 항상 Vim으로 새로운 것을 배웁니다! 배워야 할 것이 너무 많습니다. 감사합니다.
gosukiwi

23
참고 사항 : 선택을
마치면

3
@Geek, 't'는 'tag'입니다. 'a'를 이해하려면 먼저 'i'를 이해해야합니다. cit변경 그냥 내용 - nterior 태그를. cat변경 내용 및 - 태그 LL LSO 태그 자체, 개폐 모두.
Edward

37

OP는 그가 실제로하고 싶은 것은 일치하는 태그를 찾을 필요없이 XML의 섹션을 복사하는 것이라고 밝혔다. 이는 일반 모드에서 쉽게 수행됩니다 yat<motion>p.이 태그는 텍스트를 일치시키고 일치하는 태그를 포함시킨 다음 붙여 넣습니다. yit<motion>p거의 동일하지만 외부 태그는 포함되지 않습니다.

문자열에서 'y'는 물론 일반 모드 "yank"명령입니다. ( :help y)

a또는 시각적 선택 i과 같이 y또는 내부에서 조작자 후에 오브젝트 선택에 사용될 수 있습니다 . 뒤의 기호 a또는 i선택해야 할 항목을 지정합니다. t여기에 사용 된 객체 유형 은 SGML 태그를 나타냅니다. ( :help object-select).

물론 <motion>당신이 선택한 수단으로 어딘가로 이동 p하고 그 위치에 구부러진 텍스트를 넣는 것을 의미합니다 .


i"내부"(또는 "내부")를 나타냅니다. a"a"를 의미합니까?
nilon

@nilon a은 "all"을 나타냅니다.
Codie CodeMonkey 2016 년

내가 사용하는 니모닉은 그 주위a의미합니다 . 나에게 더 의미가 있습니다.
키트 존슨

5

"yank", "object-select"(태그 선택) 및 "마지막으로 기울어 진 텍스트로 건너 뛰기"를 사용하는 비결입니다.

yit`] 

태그를 닫기 전에 오른쪽으로 이동

yit

태그를 연 후 바로 점프

참고 : 이것은 기본 레지스터의 내용을 변경합니다

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