13

ほとんどの IDE と最新のテキスト エディター (Sublime Text 3) では、html タグの間に改行を挿入した後 (別名、タグを「展開」)、カーソルが正しくインデントされます。

前:

<div>|</div>

CRを押した後:

<div>
    |
</div>

しかし、Vimでは、これが得られます:

<div>
|</div>

Vim で他のほとんどのエディターと同じ動作を得るにはどうすればよいですか (上記参照)。

4

4 に答える 4

3

この小さなスニペットは、挿入モードで再マップして、カーソルが と の間にEnterあるかどうかをテストし、そうであればそれに応じて動作します。インデントの設定によっては、削除する必要がある場合があります。><\<Tab>

キーをマッピングしいる可能性のある他のプラグインとはうまくEnter機能しないため、互換性が必要な場合は、おそらくさらに多くの作業が必要になることに注意してください.

function EnterOrIndentTag()
  let line = getline(".")
  let col = getpos(".")[2]
  let before = line[col-2]
  let after = line[col-1]

  if before == ">" && after == "<"
    return "\<Enter>\<C-o>O\<Tab>"
  endif
   return "\<Enter>"
endfunction

inoremap <expr> <Enter> EnterOrIndentTag()

単純なケース (行頭、行末、 の内側と外側><) のみをテストしましたが、おそらくこれがキャッチできないエッジ ケースがあります。

于 2013-08-05T20:06:04.687 に答える
2

@RandyMorris と @romainl は、正確な問題に対する適切な解決策を投稿しています。

これらのタグを自分で入力する場合は、他にも興味深い可能性があります。HTML/XML 編集用のragtag.vimプラグインがあります。

ragtag.vimを使用して、これを入力して「前」の状況を (挿入モードで) 作成します。

div<C-X><Space>

「後」の状況を作成するには、代わりに次のように入力します。

div<C-X><Enter>

したがって、タグを「展開」することが事前にわかっている場合は、要素名とコンボを入力するだけCtrlXEnter十分です。

ZenCoding.vimSparkupなど、HTML を編集するときにキーストロークを節約するための他の高度なプラグインもあります。

于 2013-08-05T19:52:32.120 に答える