Tuesday, May 3, 2011

Re: Temporarily Disabling All imaps and inoremaps

Reply to message «Re: Temporarily Disabling All imaps and inoremaps»,
sent 00:40:33 04 May 2011, Wednesday
by Mathew Brown:

> Thanks ZyX. Unfortunately, it appears that :set paste also resets the
> language. In fact, when :set paste is enabled, you can't even manually
> set the keymap. What I'm currently doing but isn't very effective
> (because some plugins may add their own imaps and inoremaps) is that I
> run I mapped a macro to run :imapclear. When I want my imaps +
> inoremaps back, I source my $MYVIMRC file which contains them. It's not
> elegant at all. I'm looking for a cleaner solution. Is there some way
> for example to copy them into a reg, run imapclear, and then restore
> them? Thanks.
You can construct something using `:redir', output of `:imap' without arguments
and `maparg({lhs}, "i", 0, 1)' (note the last argument, it was added in
vim-7.3.32. Without it you can't restore <expr> (not restoring it will render
mapping useless) and <silent> mapping flags). Also see my savemap[1,2] and
map[3,4] functions: first saves mapping into dictionary, second restores it
(first link points to function definition inside a source file, second to its
description in the documentation). Note that you can't distinguish between
lhs/rhs=<LT>Space> and lhs/rhs=<Space> inside a :*map output (though it is
unlikely that some mapping contains escaped special characters notation in lhs
and rhs returned by :map can be ignored in fawor of `maparg(lhs, mode, abbr, 1)'
where it is always normal) and in `lhs' key of a dictionary returned by
`maparg(lhs, mode, abbr, 1)' (though this does not matter as `rhs' is normal and
lhs is obtained from already corrupted :imap output).

[1]https://bitbucket.org/ZyX_I/frawor/src/e9387e3271f2/plugin/frawor/mappings.vim#cl-175
[2]https://bitbucket.org/ZyX_I/frawor/src/e9387e3271f2/doc/frawor.txt#cl-568
[3]https://bitbucket.org/ZyX_I/frawor/src/e9387e3271f2/plugin/frawor/mappings.vim#cl-256
[4]https://bitbucket.org/ZyX_I/frawor/src/e9387e3271f2/doc/frawor.txt#cl-585

Original message:
> Thanks ZyX. Unfortunately, it appears that :set paste also resets the
> language. In fact, when :set paste is enabled, you can't even manually
> set the keymap. What I'm currently doing but isn't very effective
> (because some plugins may add their own imaps and inoremaps) is that I
> run I mapped a macro to run :imapclear. When I want my imaps +
> inoremaps back, I source my $MYVIMRC file which contains them. It's not
> elegant at all. I'm looking for a cleaner solution. Is there some way
> for example to copy them into a reg, run imapclear, and then restore
> them? Thanks.
>
> On Wed, 04 May 2011 00:12 +0400, "ZyX" <zyx.vim@gmail.com> wrote:
> > Reply to message «Temporarily Disabling All imaps and inoremaps»,
> > sent 23:56:30 04 May 2011, Wednesday
> > by Mathew Brown:
> >
> > I do not know, how your default imaps and inoremaps can prevent you from
> > editing
> > a file using a different character set, but to disable them completely
> > you can
> > use 'paste' option: do `:set paste' when you want them disabled and `set
> > nopaste' when you don't. Note that it will disable automatic indentation,
> > tabs
> > expansion, automatic wrap as well. The only exception is 'pastetoggle'
> > key: you
> > will still be able to unset paste using it without leaving insert mode if
> > you
> > set this option somewhere.
> >
> > Original message:
> > > Hi,
> > >
> > > I was wondering if there is any way to temporarily disable all imaps
> > > and inoremaps. I sometimes need to edit a file using a different
> > > character set and my default imaps and inoremaps can get in the way.
> > > So is some way to disable them until I finish this and then enable
> > > them again? Thanks.
> >
> > Email had 1 attachment:
> > + signature.asc
> >
> > 1k (application/pgp-signature)

No comments: