If there are many values for the enum then I will generally jump to the tag and do as you do; copy the values and do an :s on them. What I was wondering though was basically "can I make vim insert every entry from the ^N popup menu?", which is listing all the values that I want to enter.
Salman, your macros were certainly interesting, but they didn't seem to actually save any time. I can type "case:" as quickly as I can type ",case" :) Thanks! Max > -----Original Message----- > From: Tim Chase [mailto:[EMAIL PROTECTED] > Sent: Thursday, June 22, 2006 7:44 PM > To: Max Dyckhoff > Cc: vim@vim.org > Subject: Re: Script to create automatic case statements > > > What I would really like is to just do the ^N on the initial > > "_some_root", see that the popup menu shows the correct four > > values, and press some key combo to insert them all on > > consecutive lines like above. I'm not even fussy if it inserts > > the "case" and the ":", I can very easily do them myself with > > a couple of key presses. > > I'm not sure how to go about pulling in the list of > auto-completion possibilities (such as one gets with ^N and ^P as > you describe). I *usually* have all such items I want in a switch > statement defined in an enum somewhere, so I just copy the > contents of that enum and then perform a :s across them, such as > > typedef enum { > TAPIOCA, > SPATULA, > CATALOG, > MYOPIC > } RandomStuff; > > I then copy those contents to my switch() statement: > > switch (foo) > { > TAPIOCA, > SPATULA, > CATALOG, > MYOPIC > } > > and then, selecting the lines with "vi{", I can run > > :'<,'>s/,/ > :'<,'>s/.*/ case &: break; > > or if you prefer in a mappable one-liner > > :'<,'>s/^\s*\(.\{-}\),\=$/case \1: break; > > You'd then have to adjust indentation accordingly, but if you've > got scads of items in your enum, it's an easy way to go about it. > > Alternatively, if they're not in an enum, and you have to gather > them from around the document, you can do something like > > ma > > on a blank line where you intend your results to go, and then do > > :g/_some_root/t'a > > which will bring all sorts of lines containing this item into > those braces. You can then tidy them up a bit with something like > > vi{ > :'<,'>s/.*\(_some_root\w*\).*/case \1: break; > :'<,'>!sort -u > > (assuming you have an external "sort" capible of eliminating > duplicate lines with the "-u"nique parameter, such as GNU sort on > most *nix systems...as your email address is at Microsoft, you > might not have GNU tools quite so readily available ;) > > I'm not sure if there are easier ways or more automated ways to > find a unique list of autocompletion-matches...especially if they > span open buffers (as ^N and ^P do) > > Just a few ideas though as you cavort towards a solution, > > -tim > > >