我是matchit.vim插件的忠实粉丝,但我更喜欢在匹配的分隔符和<tab>密钥之间跳转.但是,似乎matchit在按下%键时被硬编码激活.
我的第一个想法是,我只是将这一行放在我的.vimrc中,并将' %' 更改为' <tab>',从而将Match_wrapper调用绑定到tab键:
nnoremap <silent> % :<C-U>call <SID>Match_wrapper('',1,'n') <CR>
Run Code Online (Sandbox Code Playgroud)
但是,这似乎不起作用; 我猜它与之有关<SID>(据我所知,这是一个脚本独有的ID?)或者事实上Match_wrapper是脚本本地的.(我对Vimscript很新)
到目前为止,我已经设法通过映射<tab>到%'nmap',但它是一个相当脆弱的黑客.
无论如何,任何帮助将不胜感激!:)
好吧,如果你知道%将永远重新映射,那么使用
map <Tab> %
Run Code Online (Sandbox Code Playgroud)
是安全的(n前面缺席是有意的:%在所涵盖的所有模式中定义:map).但是,你总是可以做的是,以取代<SID>与<SNR>{N}_地方{N}是matchit脚本中的产出数量:scriptnames.在较新的vim中你也可以使用maparg('%', 'n', 0, 1)它,它将输出一个字典,其中包含lhs和其他值sid.在这种情况下,代码可能如下所示:
for s:mode in ['n', 'v', 'o']
let s:map=maparg('%', s:mode, 0, 1)
execute s:mode.'noremap <Tab> '.substitute(s:map.lhs, '<SID>', '<SNR>'.s:map.sid.'_', 'g')
endfor
Run Code Online (Sandbox Code Playgroud)
在这种情况下
for s:mode in ['n', 'v', 'o']
execute s:mode.'noremap <Tab> '.maparg('%', s:mode)
endfor
Run Code Online (Sandbox Code Playgroud)
也可以接受为"旧"(没有第四个参数)maparg的行为是扩展<SID>.