4

Vim で次の異なるインデント レベルに移動する方法はありますか?

たとえば、ここからあちらへ:

-> var a = 1;
   var b = 2;
   var func = function(){
->     return a + b;
   }
4

1 に答える 1

4

これは、スペース (タブではない) で構成されるインデントに対して機能するはずです。

call search('^ \{0,'.eval(indent(".")-1).'}\S\|^ \{'.eval(indent(".")+1).',}\S')

これは、次の 2 つの正規表現で構成されています。

  • ^ \{0,'.eval(indent(".")-1).'}\S前のスペースのfrom からtoに\{n,m}一致する構造を使用して、より小さいインデントに一致します。nm
  • ^ \{'.eval(indent(".")+1).',}\S'\{n,}少なくともn前のスペースに一致する構造を使用して、より大きなインデントに一致します。

^正規表現はとの間に挟まれ\Sて、行の先頭の空白にのみ適用されます。次に、それらは\|('OR') 演算子によって結合されます。

もちろん、search()便宜上、呼び出しをキーの組み合わせにマップすることもできます。

編集

Chris Johnsen は、 の呼び出しは不必要であると指摘しているeval()ため、コマンドは次のように短縮できます。

call search('^ \{0,'.(indent(".")-1).'}\S\|^ \{'.(indent(".")+1).',}\S')
于 2013-01-16T12:04:29.110 に答える