我正在尝试为vim做一个小插件,以便让我浏览文件的清晰案例历史记录,但是上手起来很麻烦。我需要设置暴露给用户的映射方面的帮助。
这是我所做的工作的最低限度版本
function! s:DefineLeftKeyMaps()
echom 'in defineLeft'
nnoremap <leader>k <Plug>MinimalDoSomething
endfunction
noremap <script> <Plug>MinimalDoSomething <SID>DoSomething
noremap <SID>DoSomething :call <SID>DoSomething()<CR>
function! s:DoSomething()
echom 'In DoSomething'
endfunction
command! InitCCTTSample call s:DefineLeftKeyMaps()
我需要在函数中设置暴露给用户的最终映射,因为它将用于拆分中,在该拆分中我打开不同的文件(最终使用所述映射)。由于它是一个缓冲区本地映射,我认为我每次都需要重置它。
编辑: 上述解决方案的问题在于,即使您进行映射也没有任何作用。
:map
报告:
....
....
\k * <Plug>MinimalDoSomething
....
....
原因是我使用noremap
而不是map
,因此后续到函数调用的映射被忽略了
欢呼
答案 0 :(得分:2)
<plug>
映射很难定义为缓冲区本地映射。实际上,最终用户无法在其.vimrc
中定义它们,而无法在ftplugin中定义它们,这意味着您需要将文件类型与拆分缓冲区相关联。
您需要为最终用户提供一个挂钩。我看到了两种解决方案
提供一项功能,使最终用户能够在其.vimrc
中注册她/他的偏好。
" .vimrc
call your#plug#tune_mappings({'<Plug>MinimalDoSomething': '<localleader>left'})
从插件触发事件时,向用户公开用户事件以供用户执行操作(例如定义映射)。
" .vimrc
augroup YourPlugUser
au!
au User TuneKeyBindings let b:maplocalleader = ',,'
au User TuneKeyBindings nmap <buffer> <localleader><left> <Plug>MinimalDoSomething
aug END
" your plugin
split yourplug://foobar
doautocommand User TuneKeyBindings
if !hasmapto('<Plug>MinimalDoSomething, 'n')
nmap <buffer> <leader>k <Plug>MinimalDoSomething
endif
答案 1 :(得分:0)
它不起作用的原因是因为我使用了nnoremap <leader>k <Plug>MinimalDoSomething
而不是nmap <leader>k <Plug>MinimalDoSomething
欢呼