Textmates CTRL + ALT + wを模倣したいと思います。これにより、同じ行に新しい開始と終了のHTMLタグのペアが作成されます。
VIMサラウンドでは、これに編集モードでCTRL + stを使用していますが、タグを設定した後、常にインデントして新しい行を作成するため、次のようになります(* =カーソル位置)。
<p>
*
</p>
これを達成する方法はありますか?:
<p>*</p>
あなたの問題は、選択された領域が「ラインワイズ」であるということだと思います。たとえば、いくつかのライブを選択しV
てタグで囲むと、タグは選択した行の1行上と1行下に配置されます。
v
おそらく、それを囲む前に、「文字ごとの」選択を作成したいと思うでしょう。
とにかく、作成したマップを投稿してください。これをデバッグするのに役立ちます。
コメントでいくつかの説明をした後、サラウンドプラグインは最良のオプションではないことをお伝えします。その名前が示すように、それは囲まれたコンテンツを処理するために作成されました。そのため、囲むコンテンツが必要になる場合があります。
あなたの場合は、HTMLAutoCloseTagを確認することをお勧めします。このプラグインは、を入力するとhtmlタグを閉じます>
。それは確かにより適切であり、サラウンドよりも少ないキーストロークを使用します。
<p <--- Now when you type ">", if becomes:
<p>|</p> <--- Where "|" is the cursor.
明らかに、すべてのタグでこの動作が得られます。しかし、あなたがそれを好きなら、それは便利かもしれません。
通常モードから、vstp>
入力してビジュアルモードに入り<p>
、現在のカーソル位置の同じ行に開始タグと終了タグを出力します。現在のインデントレベルを維持するには、大文字のSを使用します。
これは、説明するようにタグの間にカーソルを置きませんが、TextmateのCtrlWショートカットも置きません(後者はひし形の記号を出力するだけなので、CTRL + ALT + wではなく、CTRL + Shift + wを意味したと思います)。
私の答えはおそらく遅くなるでしょうが、私は助けようとします。Vimsurroundプラグインでも同様の問題が発生しました。ctrl + Vを使用して文(1行)を選択し、それを何かで囲んでみるたびに、次のようになります。
{
var myVar
}
これの代わりに:
{ var myVar } // what I wanted
私は簡単な解決策を見つけました:通常モードからvisコマンドで行を選択し、次に大文字のC(私のvimサラウンドマッピング)を入力し、囲むブラケットを選択します。次に、1つの行がうまく囲まれます。
質問のタイトルは、作者が実際に探していたものに基づいて技術的に誤ったラベルが付けられていますが、私は実際にタイトルで尋ねられた質問に対する答えを探していたので、私もそれに答えを提供する必要があると思います。
ブロック単位の選択(例:)を使用するときにVimSurroundが使用する自動インデントなしで要素を囲む新しいタグを作成するには、VysS代わりに次のようにすることができます。
^ys$
このコマンドは、カーソルを行の最初の空白以外の文字に移動し、「サラウンド」を使用するコマンドを発行して、行の終わりに移動します。次に、タグの入力を開始します。
結果は次のとおりです。
<input type="email" name="email">
このようなものになる可能性があります:
<li><input type="email" name="email"></li>
このコマンドは.、他のすべての通常のVimの良さと同様に繰り返すことができます。
私もこれを疑問に思っていたので、この質問に出くわしました-これを行う最も簡単な方法は次のとおりです:
yss<p>
(yss
行をインデントせずに何かで囲みます-ここを参照してください:http://www.catonmat.net/blog/vim-plugins-surround-vim/)
これは、関連するテキストオブジェクトを選択することで実行できます。:h text-objects
...そして、ビジュアルラインの選択を囲む代わりにそれを囲みます。
私が遭遇した最も一般的な例は、あるタグを別のタグで囲もうとしたときでした。そのような状況では、it
およびat
テキストオブジェクトは非常に便利です。
*v_at* *at*
at "a tag block", select [count] tag blocks, from the
[count]'th unmatched "<aaa>" backwards to the matching
"</aaa>", including the "<aaa>" and "</aaa>".
See |tag-blocks| about the details.
When used in Visual mode it is made characterwise.
*v_it* *it*
it "inner tag block", select [count] tag blocks, from the
[count]'th unmatched "<aaa>" backwards to the matching
"</aaa>", excluding the "<aaa>" and "</aaa>".
See |tag-blocks| about the details.
When used in Visual mode it is made characterwise.
たとえば、ある段落にカーソルがあり、同じ行のdivでカーソルを囲みたい場合は、それをysat<div>
実行できます。