代码之家  ›  专栏  ›  技术社区  ›  ZyX

阻止重新定义现有缓冲区映射

  •  2
  • ZyX  · 技术社区  · 14 年前

    我想阻止 *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 回复  |  直到 14 年前
        1
  •  1
  •   ZyX    13 年前

    有了新的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