我做了一个小函数,通过调用matchadd()函数以指定的颜色突出显示当前选择。加上地图以便于使用。
除了仅在当前缓冲区中执行(或者是窗口?)之外,此方法行之有效
我尝试在映射中的调用之前使用bufdo和windo(请参见下文),但收到“无效地址”错误。
app.Use(async (context, next) =>
{
if (!context.User.Identity.IsAuthenticated)
{
await context.ChallengeAsync();
}
else
{
await next();
}
});
其中MatchYellow等是我定义的突出显示组
我想拥有什么,它的行为与*命令相同。在我查看的每个文件中,所有匹配项都会突出显示
答案 0 :(得分:0)
无效地址错误是由与:call
语法一起提供 count 引起的。映射的执行就像键入命令一样,因此9:
变成了:.,.+8
,并且您的call
被执行了多次,每行一次。如果范围不存在,则会出现此错误。有一个简单的解决方法:当您通过v:count
引用计数并且只需要调用一次时,就不需要范围,而<C-u>
命令(在命令行模式下)会清除范围:
map mm :<C-u>call Mymatch(v:count)<CR>
您是对的,matchadd()
仅添加当前窗口的匹配项。如果您有多个窗口,则需要使用:windo
。如果还有其他标签页,则还需要:tabdo
。如果您添加了其他窗口,并且还希望在其中显示突出显示(而不必重新执行映射),则需要:autocmd
,例如在WinNew
上。
:noremap
;它使映射不受重新映射和递归的影响。:
内的命令前面不需要:function
。*
),它应在正常模式下使用当前单词(通过expand('<cword>')
),并且仅在可视模式下使用所选文本。call matchadd('Match' . ['None', 'Yellow', 'Green', 'Red'][a:sel], @")
到现在应该很清楚,将您的映射转换为可靠的解决方案需要花费很多工作。幸运的是,这个想法并不新鲜,并且存在几个可供选择的插件。我的Mark plugin就是这样一种解决方案。 (插件页面上有许多替代插件的链接。)