在netrw下,按qb
(查询书签)将列出书签等。但此键被q
记录抢占。注册 b 变成录音。
你有什么建议来处理这个问题?
TL;博士
只需将以下内容放入您的.vimrc
文件中。
autocmd FileType netrw noremap <buffer>q <Nop>
我没有在其中找到任何命令,help netrw
但您始终可以输入tabe . | :nnoremap qb
并获取输出:
n qb *@:<C-U>call <SNR>75_NetrwBookHistHandler(2,b:netrw_curdir)<CR>
如果您只是将其nnoremap
设置为 a ,您将是错误的,qb
因为脚本 id (75) 将来可能会更改。所以以下是错误的,不要这样做:
autocmd FileType netrw noremap <buffer><silent>qb :call <SNR>75_NetrwBookHistHandler(2,b:netrw_curdir)<CR>
正如netrw
帮助文件所说,有一个选项g:Netrw_UserMaps
允许我们绑定用户功能help netrw-usermaps
。
解决方案#1
function! NetrwBookHistHandler(isLocal)
return "call <SID>NetrwBookHistHandler(2, b:netrw_curdir)"
endfunction
let g:Netrw_UserMaps = [["qb", "NetrwBookHistHandler"]]
函数返回的字符串,如果不为空,将在netrw
脚本上下文中执行,从而可以访问实际<SID>
的 .
更新
解决方案 #2
如果您键入:call netrw#<C-D>
,您将看到有一个名为netrw#Call
. 所以解决方案变得容易一点:
autocmd FileType netrw noremap <buffer><silent>qb :call netrw#Call("NetrwBookHistHandler", 2, b:netrw_curdir)
更新 2
netrw
不幸的是,插件代码中有一个错误。
" /usr/share/nvim/runtime/autoload/netrw.vim
fun! netrw#Call(funcname,...)
" call Dfunc("netrw#Call(funcname<".a:funcname.">,".string(a:000).")")
if a:0 > 0
exe "call s:".a:funcname."(".string(a:000).")"
else
exe "call s:".a:funcname."()"
endif
" call Dret("netrw#Call")
endfun
当我们调用netrw#Call("NetrwBookHistHandler", 2, b:netrw_curdir)
函数本身时,调用NetrwBookHistHandler([2, b:netrw_curdir])
whileNetrwBookHistHandler
需要 2 个参数。使用第二种也是最简单的解决方案。
解决方案 #2
autocmd FileType netrw noremap <buffer>q <Nop>