From: "A.J.Mechelynck" <[EMAIL PROTECTED]>
Subject: Re: Mapping of keysequences...
Date: Sun, 01 Oct 2006 19:44:39 +0200
> Meino Christian Cramer wrote:
> [...]
> > Hi Tony !
> >
> > nice to read you again! And thank you very much for your
> > help,help,help... :) <- BIG smiley!
> >
> > Slowly and surely I get my TeX macro working...
> >
> > What I have now is the following:
> >
> > inoremap <C-C><C-F>b {\bf #}<ESC>?#<CR>c/}<CR>
> > inoremap <C-C><C-F>i {\it #}<ESC>?#<CR>c/}<CR>
> > inoremap <C-C><C-F>s {\sl #}<ESC>?#<CR>c/}<CR>
> >
> > which "works". A last wish I would have is: After 'c'hanging the '#'
> > to what I really want to typeset I will press <ESC> to leave
> > 'c'hanging and insert mode. But my cursor still is inside of the {}....
> >
> > Is it possible to let the macros recognize the pressing of '<ESC>'
> > and then jump behind the '}' and may be entering 'i'nsert mode again?
> >
> > Or may be I need a completly different implementation of those macros
> > for that?
> >
> > I often feel, that I am not thinking vim-y enough. ;o)
> >
> > Thanks a lot for all your help!
> >
> > Keep hacking!
> > mcc
> >
> >
>
> The {rhs} (right-hand side) of a mapping is exactly the sequence of keys as
> you would hit them to accomplish the desired action. In Insert mode you can
> move the cursor using <Left> <Right> etc., so instead of <Esc>?#<CR> you can
> use <Left><Left>. This means that you can leave out the # in the first place,
> and just use one <Left> to place the cursor before the }. You then remain in
> Insert mode to insert whatever you want through the keyboard after the
> mapping
> has finished:
>
> :imap <C-C><C-F>b {\bf }<Left>
>
> etc.
>
> If you want the _next_ use of <Esc> to move the cursor after the } then it
> becomes more intricate: you will need to use a function as {rhs} to return
> the
> required string and remap <Esc> as a side-effect; but "what you remap <Esc>
> to" must not only do the required cursor move but also unmap itself. In this
> case I don't think the game is worth the candle, especially if {\bf } {\it }
> {\sl } etc. can be nested. It may be simpler to just hit <Right> to go past
> the right-bracket when you want to close the "{\bf " or similar.
>
> Another possibility is to simply yank these strings (without the closing
> brace) into some registers (which will be saved in your viminfo so you do
> this
> only once, at the command-line):
>
> :let @b = '{\bf '
> :let @i = '{\it '
> :let @s = '{\sl '
>
> (Note the _single_ quotes.) Then, in Insert mode, <C-R>b will insert
> {\bf<Space> and similarly for the other two (even after you close and reopen
> Vim, without the need to reenter them). Hit } to close the (bold?) text area.
>
>
> Best regards,
> Tony.
>
Hi Tony,
as I said...I am currently not thinking vim-y enough ... :)))))))
With "<Left>" it is so much easier to achieve the wanted effect than
jumping betwen the modes and inserting things only for the purpose of
replaceing them with something different...
And the register-trick with @b,@f,@s is even more simpler!
One last question:
Will it hurt or eat up my system resources :) when I insert the 'let'
commands into my .vimrc?
This is to avoid haveing "one part" of a macro in .vimrc and the
other one in .viminfo....not to confuse myself right in the beginning
of learning of vim if not needed.
Thank you very much, Tony !
Keep hacking!
mcc