Existe uma maneira de definir uma opção para o valor de outra opção?

7

Por exemplo, eu gostaria de definir

set tabstop=4
set shiftwidth=4

Existe uma maneira de fazer algo como

set tabstop=4
set shiftwidth=tabstop

para que eu possa definir os dois valores alterando apenas um único número?

Chad Paradis
fonte

Respostas:

13

Você pode usar o letcomando.

Igual a:

let &shiftwidth = &tabstop

O &especifica que o nome da variável é uma opção do Vim. Você também pode fazer :help let-optionpara saber mais sobre isso:

:let &{option-name} = {expr1}
        Set option {option-name} to the result of the
        expression {expr1}.  A String or Number value is
        always converted to the type of the option.
        For an option local to a window or buffer the effect
        is just like using the |:set| command: both the local
        value and the global value are changed.
akshay
fonte
2
Observe que você provavelmente desejará usar &l:shiftwidthapenas para alterar a variável local do buffer.
jamessan
Vou marcar isso como aceito, já que tecnicamente responde à minha pergunta. Ainda tenho que definir os dois valores separadamente, se eu quiser alterar os valores tabstop / shiftwidth em uma instância em execução do vim.
Chad Paradis
2

Pode ser uma maneira melhor, mas você sempre pode fazer isso:

exec 'set shiftwidth=' . &tabstop

Steve Vermeulen
fonte