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