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

Reply via email to