tags:

views:

45

answers:

2

I have a list of vim long option names as strings (e.g. ["tabstop","shiftwidth"]). What would be the best way to convert it into a list containing only short names (e.g. ["ts,"sw"]). What about if the original list is a mix of short and long names?

+3  A: 

I don't believe there's a straightforward way to do this. My best suggestion is to use this little python script to generate a Vim hash:

#!/usr/bin/python
# Assumes the vim source code is available in ./vim_src
# save this as vimoptions.py
import re
import os
vim_src_dir = './vim_src'
matcher = re.compile(r'^\s*{"(?P<longname>[^"]+)",\s*"(?P<shortname>[^"]+)",')
fh = open(os.path.join(vim_src_dir, 'src/option.c')
option_dict = {}
for line in fh:
    m = matcher.match(line)
    if m is not None:
        option_dict[m.group('longname')] = m.group('shortname')
fh.close()
print "let option_dict = {"
for key, value in option_dict.iteritems():
    print '\t\t\t\\ "%s": "%s",' % (key, value)
print '\t\t\t\\ }'

Run it with python vimoptions.py > vimoptions.vim

Then open vim and :source vimoptions.vim. You can then do something like this to convert your list (assuming the list is a variable rather than text: edit as appropriate if this isn't true):

for index in range(len(optlist))
    if has_key(option_dict, optlist[index])
        let optlist[index] = option_dict[optlist[index]]
    endif
endfor

The python code is a bit flaky (it assumes a fairly rigid syntax in the options.c file). If I wanted this to be more robust and maintainable, I'd use the python C API to compile options.c into a python module and import the table into some python code for parsing. That may be a lot more hassle than you really need right now though.

Al
+5  A: 
:help options.txt
:" retaining lines with a tag surrounded by quotes
:g/^\s*\(\*'\w\+'\*\s*\)\+$/y A
:winc n
"ap

Result:

aleph al aleph Aleph
allowrevins ari 
noallowrevins noari
altkeymap akm 
noaltkeymap noakm
ambiwidth ambw
antialias anti 
noantialias noanti
autochdir acd 
noautochdir noacd
arabic arab 
noarabic noarab
arabicshape arshape
noarabicshape noarshape
autoindent ai 
noautoindent noai
autoread ar 
noautoread noar
autowrite aw 
noautowrite noaw
autowriteall awa 
noautowriteall noawa
background bg
backspace bs
backup bk 
nobackup nobk
backupcopy bkc
backupdir bdir
backupext bex
backupskip bsk
balloondelay bdlay
ballooneval beval 
noballooneval nobeval
balloonexpr bexpr
binary bin 
nobinary nobin
bioskey biosk 
nobioskey nobiosk
bomb 
nobomb
breakat brk
browsedir bsdir
bufhidden bh
buflisted bl 
nobuflisted nobl
buftype bt
casemap cmp
cdpath cd
cedit
charconvert ccv
cindent cin 
nocindent nocin
cinkeys cink
cinoptions cino
cinwords cinw
clipboard cb
cmdheight ch
cmdwinheight cwh
columns co
comments com
commentstring cms
compatible cp 
nocompatible nocp
complete cpt
completefunc cfu
completeopt cot
concealcursor cocu
conceallevel cole
confirm cf 
noconfirm nocf
conskey consk 
noconskey noconsk
copyindent ci 
nocopyindent noci
cpoptions cpo
cryptmethod cm
cscopepathcomp cspc
cscopeprg csprg
cscopequickfix csqf
cscopetag cst 
nocscopetag nocst
cscopetagorder csto
cscopeverbose csverb
nocscopeverbose nocsverb
cursorbind crb 
nocursorbind nocrb
cursorcolumn cuc 
nocursorcolumn nocuc
cursorline cul 
nocursorline nocul
debug
define def
delcombine deco 
nodelcombine nodeco
dictionary dict
diff 
nodiff
dex diffexpr
dip diffopt
digraph dg 
nodigraph nodg
directory dir
display dy
eadirection ead
ed edcompatible 
noed noedcompatible
encoding enc
endofline eol 
noendofline noeol
equalalways ea 
noequalalways noea
equalprg ep
errorbells eb 
noerrorbells noeb
errorfile ef
errorformat efm
esckeys ek 
noesckeys noek
eventignore ei
expandtab et 
noexpandtab noet
exrc ex 
noexrc noex
fileencoding fenc
fe
fileencodings fencs
fileformat ff
fileformats ffs
filetype ft
fillchars fcs
fkmap fk 
nofkmap nofk
foldclose fcl
foldcolumn fdc
foldenable fen 
nofoldenable nofen
foldexpr fde
foldignore fdi
foldlevel fdl
foldlevelstart fdls
foldmarker fmr
foldmethod fdm
foldminlines fml
foldnestmax fdn
foldopen fdo
foldtext fdt
formatoptions fo
formatlistpat flp
formatprg fp
formatexpr fex
fsync fs
gdefault gd 
nogdefault nogd
grepformat gfm
grepprg gp
guicursor gcr
guifont gfn
guifontset gfs
guifontwide gfw
guiheadroom ghr
guioptions go
guipty 
noguipty
guitablabel gtl
guitabtooltip gtt
helpfile hf
helpheight hh
helplang hlg
hidden hid 
nohidden nohid
highlight hl
hlsearch hls 
nohlsearch nohls
history hi
hkmap hk 
nohkmap nohk
hkmapp hkp 
nohkmapp nohkp
icon 
noicon
iconstring
ignorecase ic 
noignorecase noic
imactivatekey imak
imcmdline imc 
noimcmdline noimc
imdisable imd 
noimdisable noimd
iminsert imi
imsearch ims
include inc
includeexpr inex
incsearch is 
noincsearch nois
indentexpr inde
indentkeys indk
infercase inf 
noinfercase noinf
insertmode im 
noinsertmode noim
isfname isf
isident isi
iskeyword isk
isprint isp
joinspaces js 
nojoinspaces nojs
key
keymap kmp
keymodel km
keywordprg kp
langmap lmap
langmenu lm
laststatus ls
lazyredraw lz 
nolazyredraw nolz
linebreak lbr 
nolinebreak nolbr
lines
linespace lsp
lisp 
nolisp
lispwords lw
list 
nolist
listchars lcs
lpl 
nolpl loadplugins noloadplugins
macatsui 
nomacatsui
magic 
nomagic
makeef mef
makeprg mp
colorcolumn cc
matchpairs mps
matchtime mat
maxcombine mco
maxfuncdepth mfd
maxmapdepth mmd
maxmem mm
maxmempattern mmp
maxmemtot mmt
menuitems mis
mkspellmem msm
modeline ml 
nomodeline noml
modelines mls
modifiable ma 
nomodifiable noma
modified mod 
nomodified nomod
more 
nomore
mouse
mousefocus mousef 
nomousefocus nomousef
mousehide mh 
nomousehide nomh
mousemodel mousem
mouseshape mouses
mousetime mouset
mzquantum mzq
nrformats nf
number nu 
nonumber nonu
numberwidth nuw
omnifunc ofu
opendevice odev 
noopendevice noodev
operatorfunc opfunc
osfiletype oft
paragraphs para
paste 
nopaste
pastetoggle pt
pex patchexpr
patchmode pm
path pa
preserveindent pi 
nopreserveindent nopi
previewheight pvh
previewwindow 
nopreviewwindow
pvw 
nopvw
printdevice pdev
printencoding penc
printexpr pexpr
printfont pfn
printheader pheader
printmbcharset pmbcs
printmbfont pmbfn
printoptions popt
prompt 
noprompt
pumheight ph
quoteescape qe
readonly ro 
noreadonly noro
redrawtime rdt
relativenumber rnu 
norelativenumber nornu
remap 
noremap
report
restorescreen rs 
norestorescreen nors
revins ri 
norevins nori
rightleft rl 
norightleft norl
rightleftcmd rlc
ruler ru 
noruler noru
rulerformat ruf
runtimepath rtp vimfiles
scroll scr
scrollbind scb 
noscrollbind noscb
scrolljump sj
scrolloff so
scrollopt sbo
sections sect
secure 
nosecure
selection sel
selectmode slm
sessionoptions ssop
shell sh
shellcmdflag shcf
shellpipe sp
shellquote shq
shellredir srr
shellslash ssl 
noshellslash nossl
shelltemp stmp 
noshelltemp nostmp
shelltype st
shellxquote sxq
shiftround sr 
noshiftround nosr
shiftwidth sw
shortmess shm
shortname sn 
noshortname nosn
showbreak sbr
showcmd sc 
noshowcmd nosc
showfulltag sft 
noshowfulltag nosft
showmatch sm 
noshowmatch nosm
showmode smd 
noshowmode nosmd
showtabline stal
sidescroll ss
sidescrolloff siso
smartcase scs 
nosmartcase noscs
smartindent si 
nosmartindent nosi
smarttab sta 
nosmarttab nosta
softtabstop sts
spell 
nospell
spellcapcheck spc
spellfile spf
spelllang spl
spellsuggest sps
splitbelow sb 
nosplitbelow nosb
splitright spr 
nosplitright nospr
startofline sol 
nostartofline nosol
statusline stl
suffixes su
suffixesadd sua
swapfile swf 
noswapfile noswf
swapsync sws
switchbuf swb
synmaxcol smc
syntax syn
tabline tal
tabpagemax tpm
tabstop ts
tagbsearch tbs 
notagbsearch notbs
taglength tl
tagrelative tr 
notagrelative notr
tags tag
tagstack tgst 
notagstack notgst
term
termbidi tbidi
notermbidi notbidi
termencoding tenc
terse 
noterse
textauto ta 
notextauto nota
textmode tx 
notextmode notx
textwidth tw
thesaurus tsr
tildeop top 
notildeop notop
timeout to 
notimeout noto
ttimeout 
nottimeout
timeoutlen tm
ttimeoutlen ttm
title 
notitle
titlelen
titleold
titlestring
toolbar tb
toolbariconsize tbis
ttybuiltin tbi 
nottybuiltin notbi
ttyfast tf 
nottyfast notf
ttymouse ttym
ttyscroll tsl
ttytype tty
undodir udir
undofile udf
undolevels ul
undoreload ur
updatecount uc
updatetime ut
verbose vbs
verbosefile vfile
viewdir vdir
viewoptions vop
viminfo vi
virtualedit ve
visualbell vb 
novisualbell novb beep
warn 
nowarn
weirdinvert wiv 
noweirdinvert nowiv
whichwrap ww
wildchar wc
wildcharm wcm
wildignore wig
wildmenu wmnu 
nowildmenu nowmnu
wildmode wim
wildoptions wop
winaltkeys wak
window wi
winheight wh
winfixheight wfh 
nowinfixheight nowfh
winfixwidth wfw 
nowinfixwidth nowfw
winminheight wmh
winminwidth wmw
winwidth wiw
wrap 
nowrap
wrapmargin wm
wrapscan ws 
nowrapscan nows
write 
nowrite
writeany wa 
nowriteany nowa
writebackup wb 
nowritebackup nowb
writedelay wd

Happy vimming!

Benoit
Awesome! Is there some way to do this all in the background without opening windows visible to the user?
pafcu
You will notice new options in vim 7.3: concealcursor, cryptmethod, and some others
Benoit