From: "A.J.Mechelynck" <[EMAIL PROTECTED]>
Subject: Re: Mapping of keysequences...
Date: Sun, 01 Oct 2006 20:34:31 +0200
> Meino Christian Cramer wrote:
> > 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?
>
> well, it will just (after the first time) place into your registers what is
> already there because your viminfo automatically saves it from session to
> session. The "resources" it "eats up" are, I suppose, a few bytes of vimrc
> disk space and a few milliseconds of startup time ;-). Nothing much to worry
> about.
>
> > 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
> >
> >
> >
> >
>
> And if you put these three values in the registers, you don't need anything
> for this in the vimrc -- there is no "other part". Ctrl-R letter (in Insert
> mode) directly invokes the corresponding register. Similarly Ctrl-R + (the
> system clipboard), Ctrl-R / (the latest search pattern), etc.
>
> There are several ways to invoke each register:
>
> "x in Normal mode commands (y, d, p etc.)
> @x in expressions and in :let, :redir, etc.
> x in the argument to :yank, :put etc.
> "x" in the first argument to setreg() etc.
> <C-R>x in Insert/Replace and Command-line modes
>
> In all these cases, the register is the same if the letter is the same. And
> if
> you ever forget what is in your registers, there is always the ":reg[isters]"
> command.
>
>
> Best regards,
> Tony.
>
Thanks for all, Tony!!! :O)
I think Bram should add
:he Tony
-support in vim which prints your email address...
....or may be it is not what you really want, isn't ir ;O)
(just kidding)
Keep hacking!
mcc