【问题标题】:in vimscript, how can I highlight the whole text when losing focus?在 vimscript 中,如何在失去焦点时突出显示整个文本?
【发布时间】:2022-06-11 03:16:10
【问题描述】:

在vimscript中,我想在失去焦点时突出显示整个文本;以下命令不起作用,而是将光标移到下一行。

autocmd FocusLost * execute '/.'

告诉我正确的方法。


我将我的代码包含在@Ry- 回答的内容中。

代码在失去焦点时使缓冲区的整个文本变暗,并在获得焦点时将其恢复为语法高亮。

augroup dimbuf
  autocmd!
  autocmd FocusLost * execute 'highlight Search cterm=none guifg=#555555 guibg=NONE
  autocmd FocusLost * call matchadd('Search', '.', 0, 1843991912)
  autocmd FocusGained * call matchdelete(1843991912)
  autocmd FocusGained * execute 'highlight Search none' | execute 'highlight Search cterm=reverse'
augroup END

【问题讨论】:

    标签: vim


    【解决方案1】:

    来自:help autocmd-searchpat

    自动命令不会改变当前的搜索模式。 Vim 在执行自动命令之前保存当前的搜索模式,然后在自动命令完成后恢复它们。这意味着自动命令不会影响使用 'hlsearch' 选项突出显示的字符串。在自动命令中,您仍然可以正常使用搜索模式,例如,使用 n 命令。

    如果您希望自动命令设置搜索模式,以便在自动命令完成后使用,请使用 :let @/ = 命令。

    无法在自动命令中使用:nohlsearch 关闭搜索突出显示。在启动 Vim 时使用 'shada' 选项中的 'h' 标志来禁用搜索突出显示。

    所以,你可以直接设置最后一个搜索寄存器:

    autocmd FocusLost * let @/ = '.'
    

    但是,如果您正在寻找视觉效果,您是否考虑过添加匹配?它不会破坏您的最后一次搜索。

    augroup blur-highlight
      autocmd!
      autocmd FocusLost * call matchadd('Search', '.', 0, 1843991912) " random integer
      autocmd FocusGained * call matchdelete(1843991912)
    augroup END
    

    【讨论】:

    • 嗨,Ry-,谢谢你的回答。你提出的正是我想要的。我试图在失去焦点时将整个文本调暗为深灰色,并在获得焦点时将其恢复为语法高亮。我在我的代码中包含了您的建议。效果很好。
    猜你喜欢
    • 2013-08-18
    • 2017-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多