Tip #1456: A set of two commands and one function to provide user-preferred options setting
tip karma |
Rating 1/1, Viewed by 842
|
Read and edit this tip on the
Vim tip wiki.
The wiki may have a more recent version of this tip.
created: |
|
January 5, 2007 5:42 |
|
complexity: |
|
basic |
author: |
|
Cache user-preferred option values for later reset |
|
as of Vim: |
|
|
Some plugins inadvertently(?) set global options. I have the following code at the top of my vimrc file and set all options to my preferred values using the SetOption command. Whenever I want to reset options I do :ResetOptions which resets all user-defined options previously set by SetOption.
let s:option_preferences = []
fun! ResetOption(options)
if empty(a:options)
let options = s:option_preferences
else
let options = a:options
endif
for name in options
let name0 = 'g:'. name .'_default'
if exists(name0)
exec 'let &'. name .' = '. name0
endif
endfor
endf
command! -nargs=* ResetOption :call ResetOption([<f-args>])
command! -nargs=+ SetOption let s:tmlargs=[<f-args>]
\ | for arg in s:tmlargs[1:-1]
\ | if arg =~ '^[+-]\?='
\ | exec 'set '.s:tmlargs[0] . arg
\ | else
\ | exec 'let &'.s:tmlargs[0] .'='. arg
\ | endif
\ | call add(s:option_preferences, s:tmlargs[0])
\ | endfor
\ | exec 'let g:'. s:tmlargs[0] .'_default = &'. s:tmlargs[0]
\ | unlet s:tmlargs
Examples:
Add and remove specific options:
:SetOption cpo +=my -=M
Set the value:
:SetOption ts 4
:SetOption ts =4
Just cache the predefined value so that it can be restored later on (in this example a later reset would be the same as :set tw&):
:SetOption tw
Reset specific options:
:ResetOption ts tw
Reset all user-set options:
:ResetOption
In order to monitor the options setting, I display changed values in &statusline.; (The following code is based on some tip by somebody else or a vimrc I found years ago on the web. Don't know who originally came up with this.)
set statusline=%1*[%{winnr()}:%02n]%*\ %2t\ %(%M%R%H%W%k%)\ %=%{TmlStatusline()}\ %3*<%l,%c%V,%p%%>%*
fu! TmlStatusline()
let opt = "<". &syntax; ."/". &fileformat; .">"
if !&backup; | let opt=opt." no-bak" |endif
if !&et; | let opt=opt." no-et" |endif
if &list; | let opt=opt." list" |endif
if &paste; | let opt=opt." paste" | endif
if !&expandtab; | let opt=opt." tab" | endif
if &ts; != g:ts_default | let opt=opt.' ts='.&ts; | endif
if &sw; != g:sw_default | let opt=opt.' sw='.&sw; | endif
if &tw; != g:tw_default | let opt=opt.' tw='.&tw; | endif
if &wm; != g:wm_default | let opt=opt.' wm='.&wm; | endif
if &enc; != g:enc_default | let opt=opt.' enc='.&enc; | endif
if &ve; != g:ve_default | let opt=opt.' ve='. &ve; | endif
if &fo; != g:fo_default | let opt=opt.' fo='. &fo; | endif
if &cpo; != g:cpo_default | let opt=opt.' cpo='. &cpo; | endif
if &bin; | let opt=opt.' [bin]' | endif
if &foldlevel; != s:foldlevel | let opt=opt.' F'.&foldlevel; | endif
let opt=opt." | ".strftime("%d-%b-%Y %H:%M")
return opt
endf
It could have been this one by Thomas Bader:
http://www.trash.net/~thomasb/files/vim/dotvimrc.html
<< Jumps to a local/global definition by same key |
motion on steroids >>
Additional Notes
Anonymous,
January 5, 2007 5:43
|
Okay, the author's name is Thomas and the tip's title is: Cache user-preferred option values for later reset.
|
Anonymous,
January 5, 2007 5:49
|
The line reading "call add(s:option_preferences, s:tmlargs[0])" has to be below the "endfor" of course.
|
Anonymous,
January 5, 2007 6:39
|
Here a slightly modified version:
let s:options = {}
fun! ResetOption(options)
if empty(a:options)
let options = keys(s:options)
else
let options = a:options
endif
for name in options
exec 'let &'. name .' = s:options[name]'
endfor
endf
command! -nargs=* ResetOption :call ResetOption([<f-args>])
command! -nargs=+ SetOption let s:tmlargs=[<f-args>]
\ | for arg in s:tmlargs[1:-1]
\ | if arg =~ '^[+-]\?='
\ | exec 'set '.s:tmlargs[0] . arg
\ | else
\ | exec 'let &'.s:tmlargs[0] .'='. arg
\ | endif
\ | endfor
\ | exec 'let s:options[s:tmlargs[0]] = &'. s:tmlargs[0]
\ | unlet s:tmlargs
let s:option_labels = {'fdl': 'F'}
fun! TmlStatusline()
let opt = "<". &syntax; ."/". &fileformat; .">"
if !&backup; | let opt=opt." no-bak" |endif
if !&et; | let opt=opt." no-et" |endif
if &list; | let opt=opt." list" |endif
if &paste; | let opt=opt." paste" | endif
if !&expandtab; | let opt=opt." tab" | endif
for [o, v] in items(s:options)
exec 'let oo = &'.o
if oo != v
let opt .= ' '. (has_key(s:option_labels, o) ? s:option_labels[o] : o.'=') . oo
endif
endfor
if &bin; | let opt=opt.' [bin]' | endif
if exists('b:compressed') | let opt=opt.' ['.b:compressed.']' | endif
let opt=opt." | ".strftime("%d-%b-%Y %H:%M")
return opt
endf
|
|