2010-07-03 33 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