You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vimscript实现缓冲区失焦时高亮全部文本的正确方法

问题描述

在Vimscript中需要实现窗口失去焦点时高亮缓冲区全部文本,最初使用的命令无法达到预期,反而会导致光标向下移动一行:

autocmd FocusLost * execute '/.'
问题原因

上述命令调用的/.是Vim的搜索命令,执行时会自动跳转到下一个匹配位置(即下一行的任意字符),本质不属于高亮操作,因此会出现光标下移的异常表现。

可用实现代码

以下代码可实现窗口失焦时将缓冲区全部文本调暗,窗口重新获得焦点时自动恢复原有语法高亮效果:

augroup dimbuf
  autocmd!
  " 失焦时将Search高亮组设置为暗灰色样式
  autocmd FocusLost * execute 'highlight Search cterm=none guifg=#555555 guibg=NONE'
  " 为缓冲区所有字符添加Search高亮匹配,使用固定ID便于后续精准删除
  autocmd FocusLost * call matchadd('Search', '.', 0, 1843991912)
  " 获得焦点时删除之前添加的全局高亮匹配
  autocmd FocusGained * call matchdelete(1843991912)
  " 恢复Search高亮组默认配置
  autocmd FocusGained * execute 'highlight Search none' | execute 'highlight Search cterm=reverse'
augroup END

注:代码中使用固定数字1843991912作为匹配ID,避免和其他自定义高亮匹配产生冲突。

内容的提问来源于stack exchange,提问作者glenncounty

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 11:51:23