2010-07-03 31 views
2

我想阻止*noremap命令从重新映射现有的序列,但前提是这个序列是本地的缓存:防止重新定义现有的缓冲区映射

noremap a b 
" Will fail, must succeed 
noremap <buffer> <unique> a c 

noremap <buffer> a b 
" Will fail, OK 
noremap <unique> <buffer> a c 

noremap a b 
noremap <buffer> a c 
" Will fail, OK 
noremap <unique> <buffer> a d 

回答

1

对于较新的VIM可以使用maparg()与第四个参数:

let oldmap=maparg('a', '', 0, 1) 
if empty(oldmap) || !oldmap.buffer 
    noremap <buffer> a c 
endif 

,或者更好的(也支持旧的VIM),但需要frawor

execute frawor#Setup('0.0', {'@/mappings': '0.0'}) 
let oldmap=s:_r.map.maparg('a', 'n', 0) 
if empty(oldmap) || !oldmap.buffer 
    noremap <buffer> a c 
endif