73

自動インデントがオンのときにvimがスペースをタブに置き換えないようにするにはどうすればよいですか?

例:行の先頭に2つのタブと7つのスペースがあり、tabstop=3Enterキーを押すと、次の行の先頭に4つのタブと1つのスペースがありますが、それは望ましくありません...

4

6 に答える 6

83

タブをまったく使用しないことをお勧めします。

:set expandtab

ファイル内のすべてのタブを3つのスペースに置き換えたい場合(これは非常によく似ていますtabstop=3):

:%s/^I/   /

(キャラクターはどこ^IですかTAB

VIMオンラインヘルプから:

'tabstop' 'ts'      number  (default 8)
        local to buffer
Number of spaces that a <Tab> in the file counts for.  Also see
|:retab| command, and 'softtabstop' option.

Note: Setting 'tabstop' to any other value than 8 can make your file
appear wrong in many places (e.g., when printing it).

There are four main ways to use tabs in Vim:
1. Always keep 'tabstop' at 8, set 'softtabstop' and 'shiftwidth' to 4
   (or 3 or whatever you prefer) and use 'noexpandtab'.  Then Vim
   will use a mix of tabs and spaces, but typing <Tab> and <BS> will
   behave like a tab appears every 4 (or 3) characters.
2. Set 'tabstop' and 'shiftwidth' to whatever you prefer and use
   'expandtab'.  This way you will always insert spaces.  The
   formatting will never be messed up when 'tabstop' is changed.
3. Set 'tabstop' and 'shiftwidth' to whatever you prefer and use a
   |modeline| to set these values when editing the file again.  Only
   works when using Vim to edit the file.
4. Always set 'tabstop' and 'shiftwidth' to the same value, and
   'noexpandtab'.  This should then work (for initial indents only)
   for any tabstop setting that people use.  It might be nice to have
   tabs after the first non-blank inserted as spaces if you do this
   though.  Otherwise aligned comments will be wrong when 'tabstop' is
   changed.
于 2008-09-16T07:23:38.113 に答える
51

TABあなたはすべてに変換することができますSPACE

:set et
:ret!

SPACEまたはすべてをに変換しますTAB

:set et!
:ret!
于 2011-04-26T13:20:11.563 に答える
41

私が望むのは、自動インデントされた行が前の行とまったく同じインデント文字を持つことだけです。

:help copyindent

'copyindent' 'ci' ブール値 (デフォルトはオフ); バッファーにローカル。{Vi にはない}

新しい行を自動インデントするときに、既存の行のインデントの構造をコピーします。通常、新しいインデントは、必要に応じてスペースが続く一連のタブによって再構築されます ( 「expandtab」が有効になっている場合を除きます。この場合、スペースのみが使用されます)。このオプションを有効にすると、既存の行のインデントに使用された文字が新しい行にコピーされます。新しいインデントが既存の行よりも大きい場合、残りのスペースは通常の方法で埋められます。

注: 「互換性」が設定されている場合、 「copyindent」はリセットされます。'preserveindent' も参照してください。

:help preserveindent

'preserveindent' 'pi' ブール値 (デフォルトはオフ); バッファーにローカル。{Vi にはない}

現在の行のインデントを変更するときは、できるだけ多くのインデント構造を維持してください。通常、インデントは、必要に応じてスペースが続く一連のタブに置き換えられます ( 'expandtab'が有効になっている場合を除きます。この場合、スペースのみが使用されます)。このオプションを有効にすると、インデントで可能な限り多くの既存の文字が保持され、必要に応じてタブまたはスペースのみが追加されます。

注: ">>" を複数回使用すると、結果のインデントはタブとスペースが混在します。あなたはこれが好きではないかもしれません。
注: 「互換性」が設定されている場合、 「preserveindent」はリセットされます。'copyindent' も参照してください。 :retab を使用して、空白をクリーンアップします。

于 2008-09-16T11:35:56.777 に答える
27

これが私の一部です.vimrc

set autoindent
set expandtab
set softtabstop=4
set shiftwidth=4

ソースコードにタブが絶対に必要ないので、これは私にとってうまく機能します。あなたの質問から、次の行に2つのタブと7つのスペースを残したいようですが、vimにそのスタイルに対応するように教える方法があるかどうかはわかりません。

于 2008-09-16T07:24:37.863 に答える
1

多分これの底はあなたを助けることができますか?

標準のviはタブキーを文字通り解釈しますが、vimのように、よりスマートな一般的なviから派生した代替手段があります。vimにタブをinsert-a-tabコマンドではなく「インデント」コマンドとして解釈させるには、次のようにします。

set softtabstop=2
于 2008-09-16T07:20:46.403 に答える
1

'ts'の設定に基づいてすべてのタブをスペースに置き換える場合は、:retabを使用できます。逆もできます。

于 2008-10-01T18:50:37.553 に答える