「設定」コマンドはアクティブなバッファのみに影響しますか?


14

vimには2つのバッファがあります。

:ls
  1 %a   ".vimrc"                       line 1
  2 #h   "script.sh"                    line 1
Press ENTER or type command to continue

上記のように、私は最初のバッファにいます。ここで:set softtabstop=16コマンドを実行すると、両方のバッファに影響を与えることが予想されます。ただし、これは当てはまりません。sts最初のバッファーの値は実際に変更され、Tabキーは4つのタブ文字(ts=4)を挿入しますが、2番目のバッファーのsts値はそのまま4です。

:ls
  1 #h + ".vimrc"                       line 1
  2 %a + "script.sh"                    line 1
  softtabstop=4
Press ENTER or type command to continue

どうしてこんなことに?それsetはすべてのバッファにsetlocal影響し、アクティブなバッファにのみ影響を与えると思いました。

回答:


25

オプションは、globalwindow-local、またはbuffer-localです。

いつグローバルオプションは、新しい値はグローバル:set

いつグローバルオプションは、新しい値があるローカル:setlocal

いつローカルオプションは、新しい値があるローカル:set

softtabstopバッファローカルなオプション、その値を変更すると、カレントバッファだけに影響します。

オプションの「スコープ」は以下に示されてい:help optionます。

'softtabstop' 'sts'    number    (default 0)
                       local to buffer
                       {not in Vi}
Number of spaces that a <Tab> counts[...]

:help local-options:help :setlocal、そして:help global-localより詳細にすべてのことを説明します。


3
もあり:setglobalます。
佐藤桂

3
また、一部のオプションは、設定方法に関係なくグローバルです。例えば'encoding'
アントニー

vimscript関数呼び出しでバッファIDとオプション値によってローカル関数を設定する方法はありますか?
St.Antario

setbufvarそれを実現するための関数があります。最初は見つかりませんでした。
St.Antario

2

@Martinのエキスパートではありませんが、読み取りから、各バッファの:help setローカル値を「設定解除」stsして、そのバッファが新しいグローバル値を取得するようにする必要があります。 setlocal sts= (またはブールフラグの場合setlocal flag<)。ちょっと意味があり、オープン時にローカル設定が現在のグローバル値に初期化され、特に指示がない限りローカル値を保持します。ローカル設定がない場合は、新しいグローバル値を取得する必要があります。

繰り返しになりますが、エキスパートではないので、2番目のバッファーの前に、2番目のバッファーに明示的なローカル設定があったと思いますsetその他の50/50よりも私の理解は、私が間にどのような違いにまだ不明だとして、間違っているsetsetglobalあります

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