gpt4 book ai didi

vim - 如何配置 matchit.vim 以使用 而不是 %?

转载 作者:行者123 更新时间:2023-12-04 23:11:21 27 4
gpt4 key购买 nike

我是 matchit.vim 的 super 粉丝插件,但我更喜欢在与 <tab> 匹配的分隔符之间跳转 key 。然而,matchit 似乎被硬编码为在按下 % 键时激活。

我的第一个想法是将这一行简单地放在我的 .vimrc 中,然后更改 '% ' 到 ' <tab> ',从而将 Match_wrapper 调用绑定(bind)到 Tab 键:

nnoremap <silent> %  :<C-U>call <SID>Match_wrapper('',1,'n') <CR>

然而,这似乎行不通;我猜它与 <SID> 有关(据我所知,这是脚本唯一的 ID?)或者 Match_wrapper 是脚本本地的事实。 (我是 Vimscript 的新手)

到目前为止,我已经设法通过映射 <tab> 获得了至 %使用“nmap”,但这是一个非常脆弱的 hack。

无论如何,我们将不胜感激! :)

最佳答案

好吧,如果你知道 %总是被重新映射,然后使用

map <Tab> %

是安全的(前面没有 n 是有意的:%:map 涵盖的所有模式中定义)。但是你总是可以做的是替换 <SID><SNR>{N}_其中 {N}:scriptnames 的输出中 matchit 脚本的编号.在较新的 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

在这种情况下

for s:mode in ['n', 'v', 'o']
execute s:mode.'noremap <Tab> '.maparg('%', s:mode)
endfor

也是可以接受的,因为 maparg 的“旧”(没有第四个参数)行为是扩展 <SID> .

关于vim - 如何配置 matchit.vim 以使用 <tab> 而不是 %?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9184397/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com