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