>>で次のインデントレベルにインデント


9

時々、インデントのレベルまでインデントされていないコードを使用する必要があります。通常は、ファイルに何かをコピーして貼り付けた後、Vimを(レベルごとに4つのスペース)に設定します。私は通常、<<およびで間に合います>>。問題は、次のインデントレベルにジャンプせず、4つのスペースを追加または削除するだけです。

このようなコードがある場合

if condition:
    do this
   do that

やって>>上のことdo thatになります

if condition:
    do this
       do that

これに行きたい

if condition:
    do this
    do that

上記の行のインデントを簡単に一致させるだけでなく、4つのスペースを追加するのではなく、次のレベルのインデントにジャンプするようにします。

これは、インデントに関する.vimrcにあるものです

:set tabstop=4 shiftwidth=4 expandtab

あなたも持っている場合はfiletype plugin indent on、あなたには.vimrc、ファイルタイプ(およびプラグイン)インデント関連の規則が適用されます。Ieはあなたの何をチェックtabstop値が実際に(でset tabstop?行います。他の設定についても同様)、編集するとき、およびファイル「後」にあなたの行を追加することにより、これらの値を変更する、のようなもの:stackoverflow.com/a/159066/5000478
VanLaser

3
>>そして、<<それぞれあなたが望むものではないインデントを追加および削除します。必要なのはで行われる「フォーマット」==です。
romainl 2016年

:nnoremap >> ^i<tab><esc>タブの動作を本当に必要とする場合にもマップできます>>
Wolfie

@romainl ==は上の行のレベルにジャンプします。知って良いことながら、それは私が興味を持ってるすべてのケースでは動作しません。質問への追加として、私がしたいことのためである>><<にインデント/ DEDENTまでずらし幅の倍数にその方向での国境から。
Dumitru

2
いいえ、またはを==使用して、指定された行を再フォーマットします。equalexprequalprg
romainl 2016年

回答:


12

あなたはのいずれかのコマンドを使用すると{count}>>{count}<<>{motion}または<{motion}すでにインデントされているいくつかの行に、あなたは彼らの新しいインデントレベルは、あなたの倍数になりたい'shiftwidth'オプションの値は、有効にすることができます'shiftround'オプションを、そしてあなたにこの行を追加しますvimrc

set shiftround

2

常に>>次のタブストップまでインデントし<<、最後のタブストップまで削除したい場合は、次のように再バインドできます。

:nnoremap << ^i<BS><esc>
:nnoremap >> ^i<tab><esc>

これによりカーソルが移動しますが、マークトリックを実行してカーソルを戻すことができます。マーク^は残しませんm'が、バインディング内に手動で残すことができます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.