"set"명령은 활성 버퍼에만 영향을 줍니까?


14

vim에는 두 개의 버퍼가 있습니다.

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

위에서 본 것처럼, 나는 첫 번째 버퍼에 있습니다. 이제 :set softtabstop=16명령을 실행하면 두 버퍼 모두에 영향을 줄 것으로 예상됩니다. 그러나 이것은 사실이 아닙니다- sts첫 번째 버퍼 의 값이 실제로 변경되고 Tab키가 네 개의 탭 문자 ( ts=4)를 삽입 한 다음 두 번째 버퍼의 경우 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

옵션이 될 수 있습니다 글로벌 , 윈도우 로컬 또는 버퍼 로컬 .

글로벌 옵션은 새로운 값은 글로벌 .: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'.
Antony

함수 호출로 버퍼 ID와 옵션 값으로 로컬 함수를 설정하는 방법이 vimscript있습니까?
St.Antario

setbufvar이를 달성하기 위해 사용할 수 있는 기능 이 있습니다. 처음에는 찾지 못했습니다.
St.Antario

2

@Martin 전문가는 아니지만 읽기 에서 각 버퍼 :help set의 로컬 값을 "설정 해제"하여 sts해당 버퍼가 새로운 전역 값을 가져 오도록해야합니다. setlocal sts= (또는 부울 플래그의 경우 setlocal flag<) Kinda는 로컬 설정이 열려있을 때 현재 전역 값으로 초기화 된 다음 의미가있을 때까지 로컬 값을 유지합니다. 연극에서 로컬 설정이없는 경우, 그것은 해야 새로운 글로벌 값을 선택하십시오.

다시 말하지만 전문가가 아니라면 두 번째 버퍼가 나중에 로컬에 명시 적으로 설정되어 있다고 추측 할 수 set있습니다. 더 많은 50 분의 50 이상 나는 아직도 차이 사이에 무엇에 불분명 해요 나의 이해는 잘못이라고 set하고 setglobal있다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.