【问题标题】:Vim script highlight regex matches on cursor lineVim 脚本突出显示光标行上的正则表达式匹配
【发布时间】:2017-06-11 13:36:54
【问题描述】:

我正在尝试将突出显示应用于仅在光标所在行上的所有正则表达式匹配项。这段代码很接近,但每次光标移动时我都必须重新绘制屏幕,​​这会使光标成为不理想的正则表达式的一部分。

~/.vim/syntax/abc.vim:
同步匹配 abcline "abc\%#" hi def 链接 abcline 待办事项

【问题讨论】:

  • :h conceal
  • 请提供更多背景信息;你的最终目标是什么?当一个问题只是一个很小的技术步骤时,很难提供一个好的答案。如果你不告诉我们为什么你想要这个,很容易屈服于XY problem
  • @IngoKarkat 的目标是突出光标所在行的语法。它仅在光标行上突出显示的原因是因为它经常出现,突出显示会分散注意力,因此用户会丢失细节。

标签: regex vim cursor highlight


【解决方案1】:

您使用特殊 \%# 的方法是正确的。不幸的是,它的:help 明确警告了必要的重绘(出于性能原因,它不会自动完成)。

\%# Matches with the cursor position.
        WARNING: When the cursor is moved after the pattern was used, the
        result becomes invalid.  Vim doesn't automatically update the matches.
        This is especially relevant for syntax highlighting and 'hlsearch'.
        In other words: When the cursor moves the display isn't updated for
        this change.  An update is done for lines which are changed (the whole
        line is updated) or when using the |CTRL-L| command (the whole screen
        is updated).

因此,您需要:autocmd CursorMoved,CursorMovedI 来触发重绘。或者,您可以将当前行号嵌入正则表达式 (\%23l),并在光标移动时更新语法定义(再次通过 :autocmd)。我不喜欢如此频繁的重绘;也许您的用例还允许按需触发突出显示(通过映射),或者仅在使用暂停时更新(CursorHold[I] 事件)。

只对当前行进行语法高亮是不寻常的;还要重新考虑全局突出显示是否会起作用(如果你调低使用过的突出显示组;尤其是Todo 在视觉上非常分散注意力)。

【讨论】:

  • 太棒了!感谢您的解决方案和替代建议!
猜你喜欢
  • 2012-05-30
  • 1970-01-01
  • 2021-01-24
  • 1970-01-01
  • 2012-04-22
  • 2017-05-11
  • 2011-10-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多