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