タブを4つのスペースとして再定義


1094

現在の設定では8つのスペースを想定しています。どうすれば再定義できますか?


4
さらに、4つのスペースに設定し、同時に自動インデントを有効にします。タブ幅を4つのスペースに設定した自動インデント
solid_liq

7
@ heinrich5991わかりません。行がインデントされていることを理解するのに8つのスペースは必要ありません。必要以上に、長いテキスト行で表示できる文字を制限します(少なくとも折り返す前に)。しかし、彼自身に。:)
weberc2 14

40
@ heinrich5991私の主張は、「インデントされた行を簡単に特定するためにできるだけ使用しない」です。私の推定では、インデントを簡単に特定する能力は3スペース未満で急速に低下し、4スペースで増加を停止します。したがって、4スペースを超えるインデントは、私の経験では無駄です。
weberc2 14

7
@ weberc2これ以上同意することはできませんでした。そのため、インデントに2つのスペースを使用するRubyまたは「現代のJavaScript」を非常に閉所恐怖症のように読んでいます。深くネストされた構造を追跡しようとするとき、それは合法的に私に眼精疲労を与えます。いまいましい勝利のためのハードタブ。

回答:


1616

それはあなたが何を意味するかによる。ファイル内の実際のタブ文字を4スペース幅で表示しますか、それとも「タブ」でインデントを意味しますかはタブキーを押して生成され入力する各「タブ」?

答えに応じて、次の設定セットのいずれかが機能します。

  • 4スペース幅で表示されるタブ文字の場合

    set tabstop=4
    

    ソースコードで実際のタブ文字を使用している場合は、おそらくこれらの設定も必要です(これらは実際にはデフォルトですが、防御的に設定することもできます)。

    set softtabstop=0 noexpandtab
    

    最後に、インデントを単一のタブに対応させたい場合は、次も使用する必要があります。

    set shiftwidth=4
    
  • 4つの空白文字で構成されるがタブキーで入力されるインデントの場合

    set tabstop=8 softtabstop=0 expandtab shiftwidth=4 smarttab
    

上記の設定を永続的にするには、これらの行をvimrcに追加します。

調整が必要な場合、またはこれらのオプションの意味を理解したい場合は、各オプションの意味を以下に示します。

tabstop

「スペース」で測定されたハードタブストップの幅-実際には、実際のタブ文字の(最大)幅。

shiftwidth

「インデント」のサイズ。また、スペースで測定されるため、コードベースがタブ文字でインデントしshiftwidthている場合は、タブ文字の数と同じにする必要がありますtabstop。これは=><コマンドなどでも使用されます。

softtabstop

これを以外のゼロ以外の値に設定tabstopすると、タブキー(挿入モードの場合)がスペース(およびタブ)の組み合わせを挿入して、この幅でタブストップをシミュレートします。

expandtab

これを有効にすると、タブキー(挿入モード)でタブ文字の代わりにスペースが挿入されます。これは、retabコマンドの動作にも影響します。

smarttab

これを有効にすると、カーソルが行の先頭にあるときに(挿入モードで)タブキーがスペースまたはタブを挿入して次のタブストップの次のインデントに移動します(つまり、先行する文字のみが空白です)。

これらの詳細については、vim(eg )を参照してください。:help 'optionname':help 'tabstop'


18
Makefileが常にハードタブ文字を使用することを確認することも重要です。そうしないと、ビルドが失敗します。stackoverflow.com/questions/234564/…で
Shervin Emami 2014年

29
@Undefinedシステムのvim設定です。~/.vimrcユーザーのvim設定です。ほとんどの人は、システム設定をそのままにして、ユーザー設定を編集するだけです。~/.vimrcほとんどのシステムで作成するまで存在しないことに注意してください。
ローレンスゴンサルベス2014年

4
Vimユーザーはこのset softtabstop=4機能に注意してください!(システムの残りの部分で別の方法が考えられている場合でも)タブを任意の数のスペースに再定義したため、奇妙なインデントを確認するためにless、またはを除く他のエディターでコードを読み込もうとすることにうんざりしていますvim!:-)
Ogre Psalm33 2014

6
誰かがこの回答tabstop=84つのスペースで構成されるインデントに使用するように言っている理由を理解するのを手伝ってくれませんか?各種設定の説明を読んでも理由がわかりませんでした。別の答えはtabstop=4、私にはもう少し理にかなっている使用することです。
Kodos Johnson、

5
@KodosJohnsonこのtabstopオプションは、ハードタブ文字の幅を制御します。インデントを4幅の単一のタブ文字ではなく4つのスペース文字で構成する場合、タブ文字の幅は問題ではありません-のようなものです。実際には、タブ文字が適切なインデントになりすます可能性を減らすために、タブ文字の幅をインデントの幅とは異なるようにする必要があります。(list+ expandtabここでも役立ちます)また、8文字幅のタブは「標準」です。ターミナル、Python、およびその他の多くのツールは、デフォルトで8文字幅のタブに設定されています。
ローレンスゴン

745

これを現在のユーザーに対して永続的に定義するには、.vimrcファイルを作成(または編集)します。

$ vim ~/.vimrc

次に、以下の構成をファイルに貼り付けます。vimを再起動すると、タブ設定が適用されます。

set tabstop=4       " The width of a TAB is set to 4.
                    " Still it is a \t. It is just that
                    " Vim will interpret it to be having
                    " a width of 4.

set shiftwidth=4    " Indents will have a width of 4

set softtabstop=4   " Sets the number of columns for a TAB

set expandtab       " Expand TABs to spaces

〜/ .vimrcがない場合は、/ etc / vim / vimrcで試してください。私の場合、Ubuntu 16.04の設定ファイルはそこにあります。ただし、このファイルを変更すると、設定がグローバルに使用されることに注意してください。
Todor Todorov 2016年

4
もう1つ、:retab既存のものをに変換するtabために使用しspacesます。 vim.wikia.com/wiki/Converting_tabs_to_spaces
DawnSong

57

またはvimモードラインの省略表現:

vim :set ts=4 sw=4 sts=4 et :

28

スペースとタブのどちらを使用するかを定義する設定はほとんどありません。

~/.vimrcファイルに定義できる便利な関数は次のとおりです。

function! UseTabs()
  set tabstop=4     " Size of a hard tabstop (ts).
  set shiftwidth=4  " Size of an indentation (sw).
  set noexpandtab   " Always uses tabs instead of space characters (noet).
  set autoindent    " Copy indent from current line when starting a new line (ai).
endfunction

function! UseSpaces()
  set tabstop=2     " Size of a hard tabstop (ts).
  set shiftwidth=2  " Size of an indentation (sw).
  set expandtab     " Always uses spaces instead of tab characters (et).
  set softtabstop=0 " Number of spaces a <Tab> counts for. When 0, featuer is off (sts).
  set autoindent    " Copy indent from current line when starting a new line.
  set smarttab      " Inserts blanks on a <Tab> key (as per sw, ts and sts).
endfunction

使用法:

:call UseTabs()
:call UseSpaces()

ファイル拡張子ごとに使用するには、次の構文を使用できます(に追加.vimrc):

au! BufWrite,FileWritePre *.module,*.install call UseSpaces()

参照:タブからスペースへの変換


タブとスペース切り替えるために使用できるWikiaの別のスニペットを次に示します

" virtual tabstops using spaces
set shiftwidth=4
set softtabstop=4
set expandtab
" allow toggling between local and default mode
function TabToggle()
  if &expandtab
    set shiftwidth=8
    set softtabstop=0
    set noexpandtab
  else
    set shiftwidth=4
    set softtabstop=4
    set expandtab
  endif
endfunction
nmap <F9> mz:execute TabToggle()<CR>'z

タブごとに4つのスペースを使用しF9、設定を切り替えるためのマッピングを使用できます。


27

これをコピーして.vimrcファイルに貼り付けました。

" size of a hard tabstop
set tabstop=4

" always uses spaces instead of tab characters
set expandtab

" size of an "indent"
set shiftwidth=4

最初の2つの設定は、Tabキーを押すと4つのスペースができることを意味します。3番目の設定は、私が行うV>(つまり、視覚的およびインデント)ときに4つのスペースも取得することを意味します。

受け入れられた回答ほど包括的ではありませんが、何かをコピーして貼り付けたいだけの人には役立つかもしれません。


14

〜/ .vimrcに希望の設定を入れますファイルに -ガイドラインとベストプラクティスについては、以下を参照してください。

Vimでタブを使用するには、主に4つの方法があります。

  1. 「tabstop」を常に8に保ち、「softtabstop」と「shiftwidth」を4(または3または好きなもの)に設定し、「noexpandtab」を使用します。その後、Vimはタブとスペースの組み合わせを使用しますが、入力すると、4(または3)文字ごとにタブが表示されるように動作します。

    注: 'tabstop'を8以外の値に設定すると、多くの場所(たとえば、印刷時)でファイルが正しく表示されない場合があります。

  2. 「tabstop」と「shiftwidth」を好きなように設定し、「expandtab」を使用します。このようにして、常にスペースを挿入します。'tabstop'が変更されても、フォーマットがめちゃくちゃになることはありません。

  3. 「tabstop」と「shiftwidth」を好きなように設定し、|モードライン|を使用します ファイルを再度編集するときにこれらの値を設定します。Vimを使用してファイルを編集する場合にのみ機能します。

  4. 「tabstop」と「shiftwidth」を常に同じ値に設定し、「noexpandtab」を設定します。これは、人々が使用するすべてのタブストップ設定で(最初のインデントのみ)機能するはずです。ただし、これを行う場合は、最初の非空白文字の後にタブをスペースとして挿入するとよいでしょう。そうしないと、 'tabstop'が変更されたときに位置合わせされたコメントが間違ってしまいます。

ソース:


タブストップ!= 8の設定が悪い理由を説明するための+1!
Ogre Psalm33 2014年

3
これはすばらしいことですが、これはvimdoc.sourceforge.net/htmldoc/options.html#'tabstop ' からそのまま、または:help tabstopvimであることに注意してください。
belacqua




2

コメント付きの基本的な〜/ .vimrc:

set number " show line number                                                                                           
set tabstop=2 " set display width of tab; 1 tab = x space with                                                           
set expandtab " transform tab to x space (x is tabstop)                                                               
set autoindent " auto indent; new line with number of space at the beginning same as previous                                                                      
set shiftwidth=2 " number of space append to lines when type >> 

0

すべてのユーザーに対して永続的(サーバー上で一人でいる場合):

# echo "set tabstop=4" >> /etc/vim/vimrc

通常、新しいサーバーapt-get purge nano mcと他のすべてのサーバーで時間を節約します。それ以外の場合はgitcrontabなどでエディターを再定義します


1
EDITORを設定すると、ほとんどのプログラムはそれを尊重します。
D.ベンノーブル

@ D.BenKnobleあなたは正しいです。私はもう試した。とりあえず、時間と神経を節約したいと思います。で何が正確に実行さF10れているかを確認することはできませんnanoが、常にsaveを使用していくつかのトリックを実行します(おそらくF10解決策です)。またはそれは動作しませんscreenか?思い出せません、ただ嫌いです)
Vasilii Suricov

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