2017-04-07 14 views
1

1)ファイル全体ではなく、行のセットにautoindent/retabがありますか?選択されたテキストのためのvimの自動インデント

set shiftwidth=4 
set expandtab 
set tabstop=4 

は、.vimrcで定義されています。

私が欲しいのは、たくさんの行を選択し、インデントのみを適用することです。これは、ファイルが大きく、私のコード行をきれいにしたいからです。 :retabを実行すると、ファイル全体を強制的に元に戻す必要があります。

例えば自動的

def hello(self): 
line1 
line2 

def hello(self) 
    line1 
    line2 

2に次のコードとインデント再調整を選択)私は、タブを逆にすることができます方法はありますか? EclipseのShift-Tabのようなもの。それは4スペースに戻ります。私が欲しいもの

+0

あなたが 'shifttab = 4'を設定したとしたら、' shiftwidth'を意味すると思いますか? Vimは 'shifttab'設定を持っていません。 – DJMcMayhem

+0

あなたが持っている例がスペースかタブかを明確にすることはできますか? (SOは2つをよく区別しません) – DJMcMayhem

+0

最初の1つのスペースで、2番目のスペースには4つのスペース(1つのタブ)があります。 – infoclogged

答えて

1

は、ラインの束を選択し、

あなたはビジュアルモードで特定の行にインデントを適用することができる唯一のそれらにインデントを適用することです。 、タイピング

  • が + V

  • 移動ダウンシフトを入力して、ビジュアルモードを入力し

    最初の行にカーソルをインデントする

    1. ポジション:これは次の手順に従い行うために、 j最後の行がインデントされるまで(行# + と入力できます。 Gはインデントされる最後の行の行番号を知っている場合)。ここで

      2,5s/\v(.*)/\t\1/g

      ライン範囲はの最初の2つの数字で指定されています>

  • タイプ別の解決策は、コマンドラインモードでの正規表現でこれを行うことです正規表現(この場合は2行目から5行目まで)。

  • +0

    ステップ4: '='と入力します。書式設定関数 – komar

    +1

    を呼び出すステップ4は>またはwith =のいずれかで失敗します。見ての通り、>カーソルを4(shiftwidth = 4)だけ進めます。上記の例では3つのスペースしか必要ありません。 – infoclogged

    +0

    @infoclogged私はあなたのポイントを見て、正規表現: '2,5s/\ v \ s(。*)/ \ t \ 1/g' – Sergio

    0

    両方の質問に同時に回答するには、><演算子を使用できます。 オペレータであるため、y,d,cなどのすべての演算子と同じように動作するため、動作を指定する必要があります。たとえば、>>は現在の行(4つの空白を含む)をインデントし、>jは現在の行と、以下の行をインデントします。 >Gは、バッファの末尾まですべてをインデントします。

    同様に、<は、指定したものをインデントしません。

    特定の例では、私が推奨する2つの異なるアプローチがあります。

    1. 通常モードを使用します。これはあなたの機能の大きさによって異なります。 2行だけの場合は、行1にカーソルを置き、<j>,と入力します。 (もちろん、2行以上の関数がある場合は、調整する必要があります)。残念ながら、再インデントする前にインデントを解除する必要があります。そうしないと、5つのスペースが必要になります。

    2. ビジュアルモードを使用します。これは、.vimrcを変更しない限り、少し都合が悪くなります。>または<をビジュアルモードで呼び出すと、視覚的な選択が失われるためです。私は私の.vimrcに次のように持っている理由です:

      "Make it easier to indent a visual selection several times. 
      xnoremap > >gv 
      xnoremap < <gv 
      

      この設定を使用すると、視覚的にあなたが再調整したい行を選択し、[<>を行うことができます。 IMO、これが最良のソリューションです。私はこの種のワークフローを頻繁に使用します。

    +0

    あなたのポイント番号1にunforunatelyが付いている部分が私にこの質問をしてくれました。 vimにインテリジェントなインデントがないのですか? Eclipseはそれを持っており、例えばshiftwidthが4であってもカーソルを3(4の倍数の境界)だけ進めるのは理にかなっています。 – infoclogged

    0

    Exコマンドは範囲を取るため、視覚的に行を選択して:'<,'>retabを実行することができます。

    または:12,16retab

    または:.,+9retab

    など。

    :help :retabおよび:help :rangeを参照してください。

    +0

    私の質問には私は間違っていました。私がタブを.vimrcのexpandtabを使ってスペースに置き換えたので、Retabは私のコード行ではまったく動作しません。解決策は、インデントの境界線のようなものですが、私はvimがこれを持っているとは思わない。 (私はこれを広範に使用しています) – infoclogged

    関連する問題