Vim에서 HTML 태그를 어떻게 빨리 닫을 수 있습니까?


117

에서 HTML과 유사한 코드를 작성해야했던 Vim지 오래되었지만 최근에 다시이 문제를 발견했습니다. 내가 간단한 글을 쓰고 있다고 해보자 HTML.

<html><head><title>This is a title</title></head></html>

제목, 헤드 및 HTML에 대한 닫는 태그를 어떻게 빠르게 작성합니까? 하나 하나 적어 두지 않는 정말 간단한 방법을 놓치고있는 것 같습니다.

물론 CtrlP개별 태그 이름을 자동 완성하는 데 사용할 수 있지만 랩톱 키보드에서 실제로 괄호와 슬래시를 올바르게 사용하는 것입니다.

답변:


38

이것 좀 봐..

closetag.vim

Functions and mappings to close open HTML/XML tags

https://www.vim.org/scripts/script.php?script_id=13

비슷한 것을 사용합니다.


나는 이것을 설치했다. 태그 닫기가 자동으로 완료되지 않는데 단축키가 무엇인가요? 나는 시도 Ctrl-_하지만 이것은 내 터미널의 작은 글꼴을 만듭니다.
— alhelal

74

xmledit 플러그인을 사용하면 매우 유용합니다. 두 가지 기능을 추가합니다.

  1. 태그를 열면 ( 예 : type <p>) 닫기 >를 입력하자마자 태그가 확장 <p></p>되고 삽입 모드에서 태그 내부에 커서가 배치됩니다.
  2. 그런 다음 즉시 다른 것을 입력하면 >( 예 : 입력 <p>>)

    <p>

    </p>

삽입 모드에서 한 번 들여 쓴 태그 안에 커서를 놓습니다.

XML 정력 플러그인은 이러한 기능 코드 폴딩 및 중첩 된 태그 매칭을 추가합니다.

물론, Markdown 에서 HTML 콘텐츠를 %!작성하고 원하는 Markdown 프로세서를 통해 Vim 버퍼를 필터링 하는 데 사용 한다면 태그를 닫는 것에 대해 전혀 걱정할 필요가 없습니다. :)


이 플러그인은 '</'를 입력하면 태그를 자동으로 닫을 수 있습니까? 아니면 키 입력으로 닫는 태그를 삽입 하시겠습니까? 때때로 당신은 ... 닫는 태그를 삭제하고 나중에 삽입합니다
— bzx

7
이 플러그인은 커서가 생성 된 태그를 지나칠 수있는 쉬운 방법을 제공하지 않기 때문에 마음에 들지 않습니다. 예를 들어 "Have a <b> nice </ b> day"를 작성하려면 "Have a <b> nice | </ b"로 렌더링되는 "Have a <b> nice"를 입력하여 시작합니다. > ". 그런 다음 나머지 문장을 계속하려면 오른쪽 화살표를 가로 지르거나 삽입 모드를 종료해야합니다. 그렇기 때문에 키를 눌러 종료 태그를 삽입하는 솔루션이 더 좋습니다.
— 2011 년

1
@exclipy Vim에는이를 수행 할 수있는 많은 내장 방법이 있습니다. 우선 'E', 'f', 'A'명령을 사용해보십시오.
— user456584 2013

3
.NET과 함께 xmledit 플러그인을 설치했습니다 git clone https://github.com/sukima/xmledit.git ~/.vim/bundle/xmledit. 그러나 .xml 파일을 편집 할 때만 작동합니다. ext 파일이 .html 또는 .htm이면 작동하지 않습니다.
— Chad

2
@Chad 현재, 내 해결책은 동일한 디렉토리에 파일을 복사하여 붙여 넣는 것이 었습니다. 정확히 이름을 "html.vim"으로 바꾸어 HTML 파일에도 영향을줍니다. 이제 ~ / .vim / ftplugin (xml.vim 및 html.vim)에 정확히 동일한 두 개의 파일이 있습니다.
— user2719875

56

나는 최소한의 것을 좋아합니다.

imap ,/ </<C-X><C-O>

4
<CX> <CO>는 무엇을합니까? 그것은 나를 위해 아무것도하지 않습니다.
— 2011 년

8
", /"를 쓰고 싶은 경우가 있으므로 다른 단축키를 사용하고 싶습니다. 또 다른 세부 사항은 추가 입력을 기다리지 않고 전체 완성을 닫아야한다는 것입니다. 그래서 :imap <silent> <C-c> </<C-X><C-O><C-X>

1
아주 멋지다. 또한 <Esc>F<i이 끝에 추가 되어 커서를 태그 안에 다시 넣습니다.
— mVChr

이 명령은 삽입 모드로 사용하려면 다음 공격 ,/태그 닫습니다
— thedanotto

위의 솔루션에는 많은 찬성표가 있지만 특히 저와 같은 초보자에게는 설명이 부족합니다. 어떻게 작동하며 어떻게 사용합니까?
— Phemelo Khetho

50

vim이 닫는 태그 대신 여는 태그와 닫는 태그를 모두 작성하도록하는 것이 더 편리합니다. Tim Pope의 우수한 ragtag 플러그인 을 사용할 수 있습니다 . 사용법은 다음과 같습니다 (let | 커서 위치 표시).

스팬 |

CTRL+ 누르기x SPACE

그리고 당신은 얻는다

<span> | </ span>

당신은 또한 사용할 수 있습니다 CTRL+ x ENTER대신 CTRL+ x SPACE, 당신은 얻을

<span>
|
</ span>

Ragtag는 그 이상을 수행 할 수 있습니다 (예 :이 %> 또는 DOCTYPE 주위에 <% = 물건 삽입). ragtag , 특히 서라운드 작성자의 다른 플러그인을 확인하고 싶을 것입니다 .


+1 대단해! BTW, 이것은 지금으로 알려져있다 ragtag: vim.org/scripts/script.php?script_id=1896
— neezer

이것은 확실히 가장 간단합니다. Textmate는 좋았지 만 Vim은 Krzysiek에게 감사합니다.
— josemota

23

정교한 작업을한다면 스파크 업 이 아주 좋습니다.

해당 사이트의 예 :

ul > li.item-$*3 확장 :

<ul>
    <li class="item-1"></li>
    <li class="item-2"></li>
    <li class="item-3"></li>
</ul>

A를 <C-e>.

질문에 주어진 예를 수행하려면

html > head > title{This is a title}

수확량

<html>
  <head>
    <title>This is a title</title>
  </head>
</html>

sooooo 많이 감사합니다! 이것은 Vim뿐만 아니라 다른 편집자들 중에서 내가 본 것보다 더 멋지다! 감독자!
— 크리스

이것은 훌륭한 플러그인입니다
— DenniJensen

이 플러그인은 젠 코딩에서 발전했습니다. 후자는 이제 emmet으로 알려져 있으며 약간 더 큰 기능 세트를 가지고 있습니다.
— chb

17

zencoding vim 플러그인도 있습니다 : https://github.com/mattn/zencoding-vim

튜토리얼 : https://github.com/mattn/zencoding-vim/blob/master/TUTORIAL


업데이트 : 이제 Emmet 이라고합니다 : http://emmet.io/


튜토리얼에서 발췌 :

1. Expand Abbreviation

  Type abbreviation as 'div>p#foo$*3>a' and type '<c-y>,'.
  ---------------------
  <div>
      <p id="foo1">
          <a href=""></a>
      </p>
      <p id="foo2">
          <a href=""></a>
      </p>
      <p id="foo3">
          <a href=""></a>
      </p>
  </div>
  ---------------------

2. Wrap with Abbreviation

  Write as below.
  ---------------------
  test1
  test2
  test3
  ---------------------
  Then do visual select(line wize) and type '<c-y>,'.
  If you request 'Tag:', then type 'ul>li*'.
  ---------------------
  <ul>
      <li>test1</li>
      <li>test2</li>
      <li>test3</li>
  </ul>
  ---------------------

...

12. Make anchor from URL

  Move cursor to URL
  ---------------------
  http://www.google.com/
  ---------------------
  Type '<c-y>a'
  ---------------------
  <a href="http://www.google.com/">Google</a>
  ---------------------

워, 루비 제작자가 만든 건가요?
— tjklemz

13

매핑

나는 블록 태그 (인라인이 아닌)를 즉시 닫고 가능한 한 간단한 단축키를 CTRL사용 closetag.vim하는 것을 좋아합니다 (인라인 태그를 닫기 위해 사용하지만 가능한 경우 와 같은 특수 키는 피하는 것을 좋아 합니다.) 나는 이것을 사용하고 싶습니다. 태그 블록을 시작할 때의 지름길 (@kimilhee에게 감사합니다. 이것은 그의 대답을 요약 한 것입니다) :

inoremap ><Tab> ><Esc>F<lyt>o</<C-r>"><Esc>O<Space>

샘플 사용법

유형-

<p>[Tab]

결과-

<p>
 |
</p>

어디에서 |커서 위치를 나타냅니다.

설명

  • inoremap 삽입 모드에서 매핑을 생성하는 것을 의미 합니다.
  • ><Tab> 닫는 꺾쇠 괄호와 탭 문자를 의미 합니다. 이것이 일치하는 것입니다
  • ><Esc> 첫 번째 태그를 끝내고 삽입에서 일반 모드로 탈출하는 것을 의미 합니다.
  • F< 수단은 지난 개방 각도 브래킷을 찾을 수
  • l 커서를 오른쪽으로 이동하는 것을 의미 합니다 (여는 꺾쇠 괄호를 복사하지 마십시오).
  • yt> 다음 닫는 꺾쇠 괄호 (예 : 태그 내용 복사) 이전까지 커서 위치에서 위로 잡아 당기는 것을 의미합니다.
  • o</ 삽입 모드에서 새 줄을 시작하고 여는 꺾쇠 괄호와 슬래시를 추가하는 것을 의미 합니다.
  • <C-r>" 기본 레지스터 ( ") 에서 삽입 모드로 붙여 넣기를 의미합니다.
  • ><Esc> 닫는 태그를 닫고 삽입 모드에서 벗어나는 것을 의미 합니다.
  • O<Space> 수단은 커서 위 삽입 모드에서 새 줄을 시작하고 공백을 삽입

@wds 와우, 예, l"왼쪽"이 아니라 "오른쪽" 을 의미한다는 사실에 대해 생각해 본 적이 없습니다. 하하 ... 정말 재미있는 오류입니다. 내 게시물에 대해 어떻게 생각하십니까? 나는 당신이 찬성하지 않았다는 것을 알았습니다.
— Keith Pinson 2012-08-23

물론 좋습니다. 최근에 xml.vim 플러그인을 사용했습니다 (아주 훌륭하게 작동합니다). 파일 au filetype html inoremap <buffer> ...
— 유형별

1
마지막으로 정확히 작동하는 Autoclose 명령-간단히!
— cnp

태그 사이에 커서를두고 싶습니다. 그래서 필요에 맞게 수정했습니다. inoremap ><Tab> ><Esc>F<lyt>o</<C-r>"><Esc>kJxi나는 제거 0<Space>하고 추가했다 kJxi. 한 단계 위로 이동하고 두 줄을 연결하고 한 문자를 제거한 다음 삽입 모드로 이동합니다.
— Samundra

9

체크 아웃 vim-closetag

vundle(X) HTML 태그를 닫는 정말 간단한 스크립트 ( 플러그인 으로도 사용 가능 )입니다. 그것에서 README:

이것이 현재 콘텐츠 인 경우 :

<table|

이제를 누르면 >내용은 다음과 같습니다.

<table>|</table>

이제 >다시 누르면 내용은 다음과 같습니다.

<table>
   |
</table>

참고 : |여기에 커서가 있습니다.


6

allml (현재 Ragtag) 및 Omni-completion (<CX> <CO>)은 .py 또는 .java와 같은 파일에서 작동하지 않습니다.

해당 파일에서 태그를 자동으로 닫으려면 다음과 같이 매핑 할 수 있습니다.

imap <Cj> <ESC> F <lyt> $ a </ ^ R ">

(^ R은 Contrl + R :이 Control + v 다음에 Control + r을 입력 할 수 있습니다)

(|는 커서 위치) 이제 입력하면 ..

<p> abcde |

^ j를 입력합니다.

다음과 같이 태그를 닫습니다 ..

<p> abcde </ p> |


imap <Cj> <ESC> mfF <lyt>`fa </ <CR> ">를 사용하면 복제 태그는 줄 끝 ($) 대신 ^ j를 입력했을 때 커서가 있던 위치입니다.
— Pietro

5

다음은 쉽게 찾을 수있는 웹 작성을 기반으로 한 또 다른 간단한 솔루션입니다.

  1. HTML 태그 자동 닫기

    :iabbrev </ </<C-X><C-O>

  2. 완료 켜기

    autocmd FileType xml set omnifunc=xmlcomplete#CompleteTags


1
굉장한 반응 !!! 플러그인없이 !!! (두 번째 항목에는 linkrot이 있습니다) 플러그인을 처리하는 것보다 .vimrc를 수정하는 것이 더 빠르기 때문에 여전히 최선의 대답 일 것입니다. 게다가 대부분의 미니멀 응답
— nilon

이렇게하면 닫힌 태그 뒤에 공백이 추가됩니다. (
— Vitaly Zdanevich

4

@KeithPinson의 훌륭한 답변을 기반으로 (미안하지만 아직 답변에 대한 평판 포인트가 충분하지 않습니다)이 대안은 자동 완성이 html 태그 내부에있을 수있는 추가 항목 (예 : 클래스, ID 등)을 복사하는 것을 방지합니다. .) 닫는 태그에 복사해서는 안됩니다.

업데이트filename.html.erb 파일 작업을 위해 내 응답을 업데이트했습니다 .
내 원래 응답은 some_file.html.erb내가 임베디드 루비 (예 :)를 사용할 때 와 같이 Rails 뷰에서 일반적으로 사용되는 파일에서 작동하지 않는다는 것을 알았습니다 <p>Year: <%= @year %><p>. 아래 코드 는.html.erb 파일에서 작동 합니다.

inoremap ><Tab> ><Esc>?<[a-z]<CR>lyiwo</<C-r>"><Esc>O

샘플 사용법

유형:

<div class="foo">[Tab]

결과:

<div class="foo">
  |
<div>

어디에서 |커서 위치를 나타냅니다

블록 스타일 대신 인라인으로 닫는 태그를 추가하는 예 :

inoremap ><Tab> ><Esc>?<[a-z]<CR>lyiwh/[^%]><CR>la</<C-r>"><Esc>F<i

샘플 사용법

유형:

<div class="foo">[Tab]

결과:

<div class="foo">|<div>

어디에서 |커서 위치를 나타냅니다

그것은 위의 예제 모두에 의존하는 것은 사실이다 >[Tab](당신이 선택해야 할 것입니다 의미 닫는 태그 신호를 하나 의 인라인 또는 블록 스타일). 개인적으로 나는 블록 스타일과 >[Tab]인라인 스타일을 >>.

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