1 :mkexrc
A maneira mais fácil é usar o :mkexrc
comando. Com este comando, podemos salvar todas as opções alteradas em um arquivo. Quando você precisar restaurar todas as opções salvas do arquivo, apenas :source
isso.
mkexrc snapshot
source snapshot
2. :set
e:redir
O :mkexrc
comando necessariamente usa um arquivo para conter todas as opções (e também salva os mapeamentos de teclas atuais.) Quando não queremos usar nenhum arquivo, podemos redirecionar a saída do :set
comando para a variável vim com :redir
.
redir => snapshot
silent set
redir END
Em seguida, podemos restaurar todas as opções do instantâneo da seguinte maneira.
for opt in split(snapshot,'\n')[1:]
exe "silent set " . opt
endfor
A abordagem acima é rápida e fácil de usar. Mas a abordagem tem dois problemas. Primeiro, precisamos escapar de alguns caracteres, incluindo espaços em branco da captura instantânea ( :help option-backslash
) . Caso contrário, poderemos encontrar erros quando esses caracteres não estiverem sendo escapados. Por exemplo,
set breakat=@ !+=
gera o erro 'E518' mas,
set breakat=@\ \!+=
funciona bem.
E o segundo problema é que todas as chaves especiais são alteradas para caracteres normais quando redirecionamos a saída para o instantâneo. Por exemplo, ^I
(guia) é literalmente alterado para ^
e I
. A solução alternativa pode ser um pouco complicada.
let g:optionDict = {}
function SaveOpts()
redir => snapshot
" We make a snapshot of options which differ from their default value.
" If we want to make a snapshot of all options, do set all.
silent set
redir END
for opt in split(snapshot, '\W\+')
if strlen(opt) > 3
if exists('&' . opt)
exe 'let g:optionDict.'. opt . '=&' . opt
elseif opt[0:1] == 'no' && exists('&' . opt[2:])
exe 'let g:optionDict.'. opt[2:]. '=&' . opt[2:]
endif
endif
endfor
endfunc
function RestoreOpts()
for [opt, val] in items(g:optionDict)
try
exe 'silent set ' . opt . '=' . escape(val, " \t|\\\"")
catch /:E474/ " Invalid argument, do set {option} or no{option}
if val == '1'
exe 'silent set ' . opt
elseif val == '0'
exe 'silent set no' . opt
endif
endtry
endfor
endfunc
3) :setlocal
Também podemos salvar uma opção de restauração manualmente com :setlocal
.
:setlocal
afeta apenas o buffer ou a janela atual. Se alterarmos as opções com :setlocal
, :setlocal {option}<
ou :set {option}<
podemos restaurar as opções alteradas. O primeiro define o valor local de {option} do seu valor global e o último remove todas as opções locais para que todos os valores das opções retornem aos seus valores globais. Por exemplo,
setlocal ts=16
set ts<