web-dev-qa-db-ja.com

vimでは、一致する中括弧/括弧を後方検索します

ほとんどの人が知っていると思いますが、%行の前方を検索して、次の対のブレース/ブラケット/括弧を見つけ、一致するパートナーに移動します。

|a|rray[index] = value;
" |e| is the cursor; hit %:
array[index|]| = value;

行を逆方向に検索する同様のキーがあることを願っています。例:

array[index] = value|;|
" |;| is the cursor again, hit the key I'm looking for:
array|[|index] = value;

ほとんどのvimコマンドには逆方向と順方向の両方があるので、そうする必要があるようです。パートナーはいませんか?もしそうなら、それはonのペアの文字になると、それらは同じように機能するからですか?

9
Kevin

reallyで一致する一般的な文字を後方検索する場合は、次のvim固有のコマンドのいずれかを使用できます。

  • [( ...(前の一致しない(文字に移動)
  • [{ ...(前の一致しない{文字に移動)

これらの2つのコマンドには、一致する転送パートナーがあります。

  • ]) ...(次の一致しない)文字に移動)
  • ]} ...(次の一致しない}文字に移動)

#ifdefとCコメントには、他にも同様のコマンドがあります。

コマンド:help %を使用すると、vimで詳細を見つけることができます。

4
Mei

%一致するブラケットを見つけます。したがって、(または{の場合、前方に検索されます。

}または)を使用している場合は、逆方向に検索されます。

%は方向性がなく、一致するブラケットを見つけるだけです。

3

:map ^] ^%%を試しました(^]Ctrl+vCtrl+5 ここでは、% =との類比として Shift+5)。

与えられた特定のケースで機能しますが、カーソルから後方に検索しないため、常に行の最初の左括弧を選択し、一致が見つからない場合はカーソルを行の先頭に残します。


これはより良いソリューションです。それは醜く、おそらく単純化する余地はたくさんありますが、セマンティクスは正確だと思います(開いている括弧がない場合はカーソルを移動せず、現在の列の前にfirst開いている括弧に移動します) )。

:map ^] ^[:call search("[({[]", "bes", line("."))^M

for

  • ^]Ctrl+vCtrl+5
  • ^[Ctrl+vEsc
  • ^MCtrl+vReturn
2
Useless