Vim은 적중 교체 HTML 태그를 검색하고 재사용합니다.

Vim은 적중 교체 HTML 태그를 검색하고 재사용합니다.

vim에서 html 태그를 교체하고 싶지만 찾은 내용을 재사용하고 싶습니다. 즉, 교체하고 싶습니다.

<div class="subSectionTitle">
   Title 1 
</div>

그리고

<h1>
   Title 1 
<h1>

사용해 보았지만 s/pattern/replacement/왠지 문자열이 삽입되지 않습니다. 달리고 난 후

:%s/<div class="subSectionTitle">\_.\{-}<\/div>/<h1>\1<\/h1>/g

단지 얻을

<h1></h1>

vim에서 와일드카드가 작동하는 방식과 이것이 \1내가 원하는 텍스트가 아닌 이유를 설명할 수 있는 사람이 있습니까?

답변1

  • 일반 문자 만 일치 .하고 개행 문자는 일치하지 않습니다. HTML 태그가 여러 줄에 걸쳐 있으므로 일치하는 항목이 없습니다. 대신 원자를 사용하십시오 \_.(:help /\_.).
  • \1교체 내부 텍스트를 참조했지만 실제로는 그렇지 않았습니다.포착그것. 이렇게 하려면 다음을 첨부하세요 \(...\).
  • 이것탐욕스러운일치를 통해 *일치합니다.첫 번째시작 태그와마지막종료 태그, 캡처 그룹의 다른 태그는 무시되므로 이는 단일 발생에만 작동합니다. 변화모두발생, 사용욕심이 없다*로 대체하여 일치시킵니다 \{-}. (또는 두 번째 옵션을 사용하십시오.)
:%s/<div class="subSectionTitle">\(\_.\{-}\)<\/div>/<h1>\1<\/h1>/g

또는 여는 태그와 닫는 태그를 별도로 일치시킬 수도 있습니다. (어쨌든 중첩 태그의 경우 원래 단일 일치 항목이라도 해당 닫는 태그를 대체할 수 없습니다.) 여는 태그와 닫는 태그의 서로 다른 시작 부분을 캡처하는 대신 실제로는 특수한 여는 태그를 사용하여 일치시킵니다./\zs원자.

:%s/<\zsdiv class="subSectionTitle">\|<\/zsdiv>/h1>/g

관련 정보