我需要一种简单(或复杂)的方法来确定用户所处的模式。我需要知道用户是否处于正常、插入、可视、替换、更改等状态。
我知道这个mode()
函数,但是我不知道如何让它输出一个完整的字符串而不是一个字符。
mode()
我的计划是创建一个函数,根据返回的字符串动态更改状态行的背景和前景色。基本上是一个带有一堆 ifs 和 elseifs 的函数,可以为我做这件事。但是这种方法有一个缺陷,我不知道默认情况下主题设置是哪种颜色。
所以基本上,我需要一些关于如何制作执行以下功能的提示/帮助:
- 知道用户处于哪种模式。每次更改时,其余功能都会做出不同的反应。
fg
使用和值设置一些变量,这些变量bg
反映了当前主题为它们设置的内容。- 根据这些值更改状态行的前景和背景。
我试过这样做,但这是一种非常粗暴的做法,根本不起作用。它只设置了一次颜色,之后每次更改时它都没有反应。
谢谢你的帮助!:)
编辑:
很确定我之前尝试过的没有奏效是这样的:
function! StatuslineModeColor()
let s:StatuslineMode=mode()
if s:StatuslineMode == 'n'
hi Statusline ctermbg=blue guibg=blue
elseif s:StatuslineMode == 'i'
hi Statusline ctermbg=red guibg=red
endif
endfunc
在状态行中,我输入了以下内容:
let &stl.='%{StatuslineModeColor()}'
编辑2:
我发现基本上我需要做的是找到一种方法来获取主题之前使用的任何颜色。那就是如果我使用这个解决方案:http ://www.reddit.com/r/vim/comments/gexi6/a_smarter_statusline_code_in_comments/c1n2oo5
然而,这个解决方案在我的标准中并不理想,因为它不干净,或者因为它造成了很多混乱,所以尽可能干净。:/