1. :mkexrc
Der einfachste Weg ist die Verwendung eines :mkexrc
Befehls. Mit diesem Befehl können wir alle geänderten Optionen in einer Datei speichern. Wenn Sie alle gespeicherten Optionen aus der Datei wiederherstellen müssen, nur :source
diese.
mkexrc snapshot
source snapshot
2. :set
und:redir
Der :mkexrc
Befehl verwendet notwendigerweise eine Datei, um alle Optionen zu speichern. (Und er speichert auch aktuelle Schlüsselzuordnungen.) Wenn wir keine Datei verwenden möchten, können wir die Ausgabe des :set
Befehls in die vim-Variable mit umleiten :redir
.
redir => snapshot
silent set
redir END
Anschließend können wir alle Optionen aus dem Snapshot wie folgt wiederherstellen.
for opt in split(snapshot,'\n')[1:]
exe "silent set " . opt
endfor
Der obige Ansatz ist schnell und einfach anzuwenden. Der Ansatz hat jedoch zwei Probleme. Zuerst müssen wir einige Zeichen, einschließlich Leerzeichen, aus dem Schnappschuss ( :help option-backslash
) entfernen . Andernfalls können Fehler auftreten, wenn diese Zeichen nicht maskiert werden. Zum Beispiel,
set breakat=@ !+=
löst den Fehler 'E518' aber aus,
set breakat=@\ \!+=
funktioniert gut.
Und das zweite Problem ist, dass alle Sonderschlüssel in normale Zeichen geändert werden, wenn wir die Ausgabe auf den Schnappschuss umleiten. Zum Beispiel wird ^I
(tab) buchstäblich in ^
und geändert I
. Die Problemumgehung könnte etwas kompliziert sein.
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
Wir können eine Wiederherstellungsoption auch manuell mit speichern :setlocal
.
:setlocal
wirkt sich nur auf den aktuellen Puffer oder das aktuelle Fenster aus. Wenn wir Optionen ändern mit :setlocal
, :setlocal {option}<
oder :set {option}<
können die geänderten Optionen wiederherstellen zurück. Ersteres setzt den lokalen Wert von {Option} von seinem globalen Wert und letzteres entfernt alle lokalen Optionen, sodass alle Optionswerte zu ihren globalen Werten zurückkehren. Zum Beispiel,
setlocal ts=16
set ts<