Hi Bram! On Mi, 03 Okt 2012, Bram Moolenaar wrote:
> > Christian Brabandt wrote: > > > On Mi, 03 Okt 2012, Bram Moolenaar wrote: > > > > > > > > Christian Brabandt wrote: > > > > > > > On Mon, October 1, 2012 13:16, Marcin Szamotulski wrote: > > > > > On 09:20 Sun 23 Sep , Marcin Szamotulski wrote: > > > > >> Hello > > > > >> > > > > >> The c_CTRL-\_e (<C-\>e) maps inside expression register are not > > > > >> working. > > > > >> There is a very nice emacscommandline > > > > >> (http://www.vim.org/scripts/script.php?script_id=3554) > > > > >> plugin which defines lots of nice maps in this way, but then when one > > > > >> tries to write to expression register one gets errors. The minimal > > > > >> setup > > > > >> to reproduce this is: > > > > >> > > > > >> fun X() > > > > >> return 'echo "X"' > > > > >> endfun > > > > >> cnoremap X <C-\>eX()<CR> > > > > >> > > > > >> Now please try in insert mode: > > > > >> <c-r>=X > > > > >> and after pressing X I get the following error: > > > > >> E15: invalid expression: ^eX() > > > > >> E15: invalid expression: ^eX() > > > > >> > > > > >> I got it twice. I think it would be nice to have the <C-\>e maps > > > > >> working inside expression register (and in this case it would be > > > > >> nice of > > > > >> vim script knew it, for example through including the '=' into to > > > > >> getcmdline()) or to disable the <C-\>e maps inside the expression > > > > >> register. > > > > >> > > > > >> Best regards, > > > > >> Marcin > > > > > > > > > > In case somebody will stumble across this post, the solution that > > > > > I found for this is to define another map: > > > > > cnoremap <C-b> <C-R> > > > > > etc ... . It will not trigger the emacscommand line maps. One just has > > > > > to remember to not to use <C-W> while entering things into the > > > > > expression register (which is used rarely, so there is not much > > > > > opportunity to learn it, and lots of chances to forget it ;) > > > > > > > > > > But this is far from perfect. > > > > > > > > Would it be enough to simply disallow mappings in expression evalution > > > > mode? > > > > > > Would this not stop other mappings from working, e.g.: > > > > > > cnoremap <C-Y> yank() > > > > Yes, in Expression evaluation mode (i.e. when doing <c-r>=) > > Well, that's not nice, users should be able to type the expression with > their favorite mappings. Okay, this seems to fix it: diff --git a/src/ex_getln.c b/src/ex_getln.c --- a/src/ex_getln.c +++ b/src/ex_getln.c @@ -668,8 +668,7 @@ --no_mapping; --allow_keys; /* CTRL-\ e doesn't work when obtaining an expression. */ - if (c != Ctrl_N && c != Ctrl_G - && (c != 'e' || ccline.cmdfirstc == '=')) + if (c != Ctrl_N && c != Ctrl_G && c != 'e') { vungetc(c); c = Ctrl_BSL; regards, Christian -- Ein junger Igel verirrt sich im Botanischen Garten. Er hat schreckliche Angst und fragt jeden Kaktus: "Bist du es, Mami?" -- You received this message from the "vim_dev" maillist. Do not top-post! Type your reply below the text you are replying to. For more information, visit http://www.vim.org/maillist.php
