let과 set의 차이점은 무엇입니까?


29

나는 Vim의 이론을 많이 모른다. 마치 set변수와 let다른 변수 처럼 보입니다 . 차이점은 무엇이며 언제 다른 것이 필요할까요?

또한, 태양 광 vim 색상 표는 이 경우 let g:blabla...의 의미 가 무엇 이라고 말 g:합니까?

답변:


35

let변수 set에 값을 할당하고 Vim의 내부 옵션 중 하나에 값을 할당합니다.

예를 들어

:let mystring='Hello!'

새로운 변수를 선언하기 위해 사용하지만

:set tabstop=4

또는

:set expandtab

Vim의 옵션 중 하나를 설정합니다.

참조 : :help let, :help set.

g:단순히 전역 변수를 나타냅니다. 다음과 같은 "가변 네임 스페이스"가 있습니다 :help internal-variables.

        (nothing) In a function: local to a function; otherwise: global
|buffer-variable|    b:   Local to the current buffer.
|window-variable|    w:   Local to the current window.
|tabpage-variable|   t:   Local to the current tab page.
|global-variable|    g:   Global.
|local-variable|     l:   Local to a function.
|script-variable|    s:   Local to a |:source|'ed Vim script.
|function-argument|  a:   Function argument (only inside a function).
|vim-variable|       v:   Global, predefined by Vim.

8
다음 let을 수행 하여 vim의 내부 옵션을 설정할 수 있습니다.let &{option name}=value
EvergreenTree

11

:set내부 옵션에 사용되며 옵션 유형을 처리합니다. 부울 옵션의 반전 (예 :)을 :set invpaste목록에서 추가 및 제거 (예 :)하는 것을 허용 :set dictionary-=/tmp/myfile합니다.

:let한편, 대신과 같은 간단한 값 등 일반적인 변수, 옵션, 레지스터 및 가치 세트를 포함 정력 변경 것들의 과다에 액세스 식의 계산 결과 인 허용 :set하는 수단 :let수학, 문자열 조작 및 함수에 액세스 할 수 있습니다.

예를 들어, :let &dictionary=/tmp/myfile옵션 'dictionary'/tmp/myfile다음과 같이 설정할 수 있습니다 (따라서 :set예 에서 위에 표시된 것과 동일한 옵션 수정 )

로 전역 변수를 설정할 수 있습니다 :let g:myvar=42. 요청한 접두사는 범위를 제공합니다. Doorknob의 답변 은 범위를 매우 잘 다루고 있습니다.

당신은 할 수 :let @a="Some text"A가 포함하는 레지스터의 내용을 변경하려면 Some text나중에 페이스트 수있는, "ap예를 들어.

:let $PATH = $PATH . ":/home/me/bin"자신의 bin 디렉토리를 PATH환경 변수 에 추가 할 수 있습니다 . 환경 변수는 Vim에 의해 실행되는 외부 명령으로 전달됩니다 (이것은 모든 환경 변수에서 작동합니다).

환경 변수를 현재 버퍼의 파일 이름으로 설정하는 let것과 같이 꽤 강력한 기능이 있지만 :let $MYFILE = @%설정이 부울인지 알지 못하므로 멋진 액세스 또는 오류 검사 기능을 제공 :set하지 않습니다.

결국 작업에 가장 적합한 도구를 사용하는 것입니다. 단순히 옵션을 수정하려면 :set도구가 필요합니다. 레지스터, 옵션, 변수 사이에서 정보를 이동하거나 표현식의 결과에 따라 값을 설정하려면 :let도구가 필요합니다.

명시 적으로 빔에 대해 질문했지만, 참고 또 다른 것은 즉 :set이 VI / 빔 가족, 더 일반적이다 :let덜 일반적이다 (예를 들어, NVI는없는 let명령을하고, viemu를 통해 레지스터에 대한 액세스를 제공하지 않습니다 let) .

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