VimでHTMLタグをすばやく閉じるにはどうすればよいですか?


117

HTMLのようなコードをで実行しなければならないのVimは久しぶりですが、最近これに再び遭遇しました。私が簡単なものを書いているとしましょうHTML

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

タイトル、ヘッド、HTMLの終了タグをすばやく書くにはどうすればよいですか?ここにすべてを1つずつ書き留める必要がない、本当に簡単な方法が不足しているように感じます。

もちろん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プラグインを使用すると非常に便利です。2つの機能が追加されます。

  1. あなたがタグ(開くと例えばタイプ<p>)、それはすぐに閉鎖を入力すると、タグを拡張><p></p>と挿入モードでタグ内にカーソルを置きます。
  2. あなたはその後すぐに別のものを入力した場合>例えば、あなたが入力し<p>>)、それはその中を拡大します

    <p>

    </p>

挿入モードでは、カーソルをタグの内側に1回インデントして配置します。

XML vimのプラグインは、これらの機能へのコードの折りたたみおよびネストされたタグマッチングを追加します。

もちろん、Markdownで HTMLコンテンツを記述し%!、選択したMarkdownプロセッサを介してVimバッファをフィルタリングするために使用する場合は、タグを閉じることについてまったく心配する必要はありません:)


このプラグインは、「</」が入力されたときにタグを自動的に閉じることができますか?または、いくつかのキーストロークで終了タグを挿入しますか?終了タグを削除して後で挿入する場合があります...
bzx

7
このプラグインは、生成されたタグをカーソルが通過する簡単な方法を提供しないため、私はこのプラグインが好きではありません。たとえば、「<b> nice </ b>を持っている」と書く場合は、「Have a <b> nice」と入力すると、「Have a <b> nice | </ b」と表示されます。 > "。次に、右向き矢印を押すか、挿入モードを終了して、残りの文を続行する必要があります。そのため、キーを押して終了タグを挿入するソリューションの方が優れています。
11

1
@exclipy Vimには、これを行うための組み込みの方法がたくさんあります。まず、「E」、「f」、「A」コマンドを試してください。
user456584 2013年

3
でxmleditプラグインをインストールしましたgit clone https://github.com/sukima/xmledit.git ~/.vim/bundle/xmledit。ただし、.xmlファイルを編集する場合にのみ機能します。ファイル拡張子が.htmlまたは.htmの場合、機能しません。
チャド

2
@Chad現在、私の解決策は、同じディレクトリにファイルをコピーして貼り付け、「html.vim」に名前を変更して、HTMLファイルにも影響を与えることでした。今、私は〜/ .vim / ftplugin(xml.vimとhtml.vim)に2つのまったく同じファイルを持っています。
user2719875 2015年

56

最小限のものが好きです

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

4
<CX> <CO>は何をしますか?私には何もしません。
11

8
「、/」と書きたい場合があるので、別のショートカットを使いたい。もう1つの詳細は、追加入力を待たずに、オムニ完了を閉じる必要があることです。つまり:imap <silent> <C-c> </<C-X><C-O><C-X>

1
とてもかっこいい。<Esc>F<iこれの最後にも追加され、カーソルがタグ内に戻されます。
mVChr 2017年

このコマンドを使用するには、挿入モードで、次にを,/
押し

上記の解決策には多くの賛成票がありますが、特に私のような初心者には説明がありません。それはどのように機能し、どのように使用しますか?
Phemelo Khetho

49

終了タグだけではなく、開始タグと終了タグの両方をvimに作成させる方が便利だと思います。Tim Popeの優れたragtagプラグインを使用できます。使用法は次のようになります(カーソル位置をマークする)。

スパン|

CTRL+を押すx SPACE

そしてあなたは得る

<span> | </ span>

CTRL+のx ENTER代わりにCTRL+を使用することもできx SPACEます。

<スパン>
|
</ span>

Ragtagはそれ以上のことを実行できます(例:<%= stuff this this%>またはDOCTYPEを挿入します)。おそらく、ragtagの作者、特にサラウンドによって他のプラグインをチェックアウトしたいと思うでしょう。


素晴らしい1 ところで、これは次のように知られていragtagます:vim.org/scripts/script.php
script_id=

これは間違いなく最も簡単です。Textmateはそれで良かったが、Vimはこれで打ち負かした、Krzysiekに感謝。
josemota

23

細かいことをしている場合は、sparkupは非常に優れています。

彼らのサイトの例:

ul > li.item-$*3 展開する:

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

<C-e>

質問の例を実行するには、

html > head > title{This is a title}

収量

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

本当にありがとうございました!これは、Vimだけでなく他の編集者の中で、これまでに見たものよりも格好良いです!素晴らしい!
Chris

これは素晴らしいプラグインです
DenniJensen

このプラグインは禅コーディングから進化しました。後者は現在emmetとして知られており、わずかに大きな機能セットを備えています。
2018

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 2013

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 カーソルを右に1つ移動することを意味します(開始山かっこはコピーしないでください)
  • yt> カーソル位置から次の山形括弧の前までのヤンクを意味します(つまり、タグの内容をコピーします)
  • o</ 挿入モードで改行を開始し、開き山かっことスラッシュを追加することを意味します
  • <C-r>" デフォルトのレジスターから挿入モードで貼り付けることを意味します("
  • ><Esc> 終了タグを閉じて挿入モードを終了することを意味します
  • O<Space> カーソルの上に挿入モードで新しい行を開始し、スペースを挿入することを意味します

@wdsうわー、ええ、l「左」ではなく「右」を意味するという事実については考えたことはありませんでしたね。私の投稿をどう思いましたか?私はあなたが賛成票を投じていないことに気づきました。
キースピンソン2012

確かにいい。私は最近xml.vimプラグインを使用することにしました(かなりうまく動作します)。ファイルタイプ固有の自動コマンドを使用して.vimrcに追加することをお勧めします。例:au filetype html inoremap <buffer> ...
wds

1
最後に、本来あるべきとおりに機能するAutocloseコマンド-単純に!
cnp

タグの間にカーソルを置きたいです。だから私は自分のニーズに合わせてそれを変更しました。inoremap ><Tab> ><Esc>F<lyt>o</<C-r>"><Esc>kJxi削除0<Space>して追加しましたkJxi。1ステップ上に移動し、2行を連結して、1文字を削除してから、挿入モードに入ります。
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

簡単に見つけられるWebライティングに基づくさらに別のシンプルなソリューションを次に示します。

  1. HTMLタグを自動的に閉じる

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

  2. 完了をオンにする

    autocmd FileType xml set omnifunc=xmlcomplete#CompleteTags


1
素晴らしい反応!!! プラグインなし!!! (2番目の項目にはli​​nkrotがあります)プラグインを処理するよりも.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>

where |はカーソル位置を示します

そして、ブロックスタイルの代わりにインラインで終了タグを追加する例として:

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

使用例

タイプ:

<div class="foo">[Tab]

結果:

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

where |はカーソル位置を示します

上記の例は両方とも>[Tab]、終了タグのシグナルに依存していることは事実です(つまりインラインまたはブロックスタイルを選択する必要があります)。個人的には、ブロックスタイルwith >[Tab]とインラインスタイルwithを使用しています>>

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.