On Wed, Nov 15, 2006 at 08:11:42PM -0600, Manfred Georg wrote:
> Hi,
>
> Apparently this isn't a very popular thing to do, but I remap g
> to help me do indentation. There are two problems with this.
> In gvimrc_example.vim , there is some code (which has been copied
> all sorts of places) which does automatic
> jump to last position when file was closed. This uses the command g'"
> Unfortunately when g has been remapped it triggers this mapping.
>
> To fix this the line with
> \| exe "normal g'\"" | endif
> should read
> \| exe "normal! g'\"" | endif
>
> the ! stops it from remapping g to the local mapping.
The patch at the end of this e-mail implements this change. The
file is vimrc_example.vim, not gvimrc_example.vim . (You can probably
do this yourself. See my tip at
http://www.vim.org/tips/tip.php?tip_id=618 .)
> Also, some plugins create some mappings that start with g .
> The problem is that I don't want to wait for the disambiguation delay
> before triggering my mapping. So I want to unmap those mappings in
> the user .vimrc . The problem is that plugins are sourced after
> the user .vimrc . This makes it impossible to countermand the
> mappings created by the plugins automatically (barring using even more
> magical techniques like autocmd). It really seems to me like the
> .vimrc should be sourced after the plugins, it should have the final say.
>
> Thank you,
>
> Manfred
The following function could use some more testing, but the idea is
that
:call Mapclear('g')
should :unmap any mapping that starts with "g". If you do this in your
after/plugin/ directory (maybe after/plugin/zzz.vim ) and then define
your mapping for "g", then you should be in good shape.
fun! Mapclear(init)
redir => mapstr
execute "silent! map" a:init
redir END
let maplist = split(mapstr, '\n')
if len(maplist) == 1 && maplist[0] == 'No mapping found'
return
endif
for mapline in maplist
let parts = split(mapline)
let mode = mapline[0]
let lhs = parts[mode == ' ' ? 0 : 1]
echo mode . "unmap" lhs
endfor
endfun
There is a chicken-and-egg problem: you want to be able to
enable/disable plugins in your vimrc file, so it has to be read before
the plugins are loaded. There are other surprises, too: you might
expect command-line options to override vimrc settings, but they do not.
(Maybe they do not *always* override vimrc settings.) I think we are
stuck with the current system for reasons of backwards compatibility.
It may even be a question of vi-compatibility.
:help design-compatible
HTH --Benji Fisher
*** /usr/local/share/vim/vim70/vimrc_example.vim 2006-05-08
10:42:46.000000000 -0400
--- temp/vimrc_example.vim 2006-11-15 23:30:24.792231281 -0500
***************
*** 69,75 ****
" (happens when dropping a file on gvim).
autocmd BufReadPost *
\ if line("'\"") > 0 && line("'\"") <= line("$") |
! \ exe "normal g`\"" |
\ endif
augroup END
--- 69,75 ----
" (happens when dropping a file on gvim).
autocmd BufReadPost *
\ if line("'\"") > 0 && line("'\"") <= line("$") |
! \ exe "normal! g`\"" |
\ endif
augroup END