On 2007-04-19, "John R. Culleton" <[EMAIL PROTECTED]> wrote:
> I want a single F key assignment via user's gvimrc to activate several
> commands in order, e.g.:
> %s/^"/``/
> %s/ "/ ``/g
> %s/"$/''/
> %s/" /'' /g
> (The left hand part contains an inch sign and the right hand part
> contains either two back ticks or two apostrophes.) I may add more
> such commands to the same F key.
>
> Can I string them all together in a gvimrc command or would it be
> handier to have the F key call a script somehow? This will be for a
> naive user. (I am pretty naive myself :)
You can certainly string them together in a single mapping using
<bar> as a separator and <CR> as a terminator, e.g.,
nmap <F2> :%s/^"/``/ <bar> %s/ "/ ``/g <bar> %s/"$/''/ <bar> %s/" /'' /g<CR>
However, that mapping will fail as soon as one of the substitutions
fails, so a better mapping would include the 'e' flag at the end of
each substitution, e.g.,
nmap <F2> :%s/^"/``/e <bar> %s/ "/ ``/ge <bar> %s/"$/''/e <bar> %s/" /''
/ge<CR>
That mapping will leave the command visible in the command line
after the user presses the function key, and if the command is long
or the window is narrow, the user will also get the "Press ENTER or
type a command to continue" prompt when the command is done. To
avoid that, you can add <silent> to the mapping, e.g.,
nmap <silent> <F2> :%s/^"/``/e <bar> %s/ "/ ``/ge <bar> %s/"$/''/e <bar>
%s/" /'' /ge<CR>
Such a long mapping can be difficult to maintain. One way to make
that easier is to put the commands in a function and have the
mapping just call that function, e.g.,
nmap <silent> <F2> :call DoSub()<CR>
function DoSub()
%s/^"/``/e
%s/ "/ ``/ge
%s/"$/''/e
%s/" /'' /ge
endfunction
See also
:help :bar
:help map_bar
:help :s_flags
:help map-<silent>
:help user-functions
HTH,
Gary
--
Gary Johnson | Agilent Technologies
[EMAIL PROTECTED] | Mobile Broadband Division
| Spokane, Washington, USA