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