1. :mkexrc
Cách dễ nhất là sử dụng :mkexrc
lệnh. Với lệnh này, chúng ta có thể lưu tất cả các tùy chọn đã thay đổi vào một tệp. Khi bạn cần khôi phục lại tất cả các tùy chọn đã lưu từ tệp, chỉ cần :source
nó.
mkexrc snapshot
source snapshot
2. :set
và:redir
Các :mkexrc
lệnh thiết sử dụng một tập tin để giữ tất cả các tùy chọn. (Và nó cũng tiết kiệm ánh xạ chính hiện hành.) Khi chúng ta không muốn sử dụng bất kỳ tập tin, chúng ta có thể chuyển hướng đầu ra của :set
lệnh vào biến vim với :redir
.
redir => snapshot
silent set
redir END
Sau đó, chúng tôi có thể khôi phục lại tất cả các tùy chọn từ ảnh chụp nhanh như sau.
for opt in split(snapshot,'\n')[1:]
exe "silent set " . opt
endfor
Cách tiếp cận trên là nhanh chóng và dễ sử dụng. Nhưng cách tiếp cận có hai vấn đề. Đầu tiên, chúng ta phải thoát một số ký tự bao gồm khoảng trắng từ ảnh chụp nhanh ( :help option-backslash
) . Nếu không, chúng ta có thể gặp lỗi khi các ký tự này không được thoát. Ví dụ,
set breakat=@ !+=
làm tăng lỗi 'E518' nhưng,
set breakat=@\ \!+=
hoạt động tốt
Và vấn đề thứ hai là tất cả các phím đặc biệt được thay đổi thành các ký tự bình thường khi chúng ta chuyển hướng đầu ra thành ảnh chụp nhanh. Ví dụ: ^I
(tab) được thay đổi theo nghĩa đen thành ^
và I
. Cách giải quyết có thể phức tạp một chút.
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
Chúng tôi cũng có thể lưu một tùy chọn khôi phục bằng tay với :setlocal
.
:setlocal
chỉ ảnh hưởng đến bộ đệm hoặc cửa sổ hiện tại. Nếu chúng tôi thay đổi tùy chọn với :setlocal
, :setlocal {option}<
hoặc :set {option}<
có thể khôi phục lại các tùy chọn đã thay đổi. Cái trước đặt giá trị cục bộ của {tùy chọn} từ giá trị toàn cục của nó và cái sau loại bỏ tất cả các tùy chọn cục bộ để tất cả các giá trị tùy chọn trở về giá trị toàn cầu của chúng. Ví dụ,
setlocal ts=16
set ts<