|redraw
augroup CmdLineStatus_to_Title
autocmd!
autocmd CmdlineEnter * set titlestring=CommandlineMode|redraw
autocmd CmdlineEnter * set titlestring=%F\ %{v:servername}\ %{mode()}
augroup END
我尝试了以下自动命令,但未能实现我想要的。理想情况下,
移动时,我想在titlestring
的末尾附加一个标识符
将光标移至命令行(通过按:
键)。
" Global setting
setglobal titlestring=%F\ %{v:servername}\ %{mode()}
" The Auto command group
augroup CmdLineStatus_to_Title
autocmd!
autocmd CmdlineEnter * let &l:titlestring="CommandlineMode"
" autocmd CmdlineLeave * let &l:titlestring=%F\ %{v:servername}\ %{mode()}
augroup END
存在多个问题:
titlestring
和/或Gvim窗口的标题不更新
当我 ENTER 命令行时。当我离开命令时刷新
线路模式。
&l:
标志并没有限制缓冲区的本机设置:对于在新缓冲区/选项卡中打开的新文件,我得到的常量标题字符串为“ CommandlineMode”。 (通过nnoremap <> <Plug>VimwikiMakeDiaryNote
映射打开一个特定文件,不涉及任何命令行操作。)titlestring
。这应该是语法问题
augroup
中已注释掉的行应带
我实际上离开命令行时遇到以下错误。请
还建议我离开菜单后如何恢复titlestring
设置
命令行。灵感和功劳:
titlestring
Vim的当前模式。 机器规格:报告的故障是在运行Gvim时发生的
Windows 10计算机上WSL-Linux-shell上的X11。 %{mode()}
“变量”
当我在“普通”模式和“插入”之间来回切换时,确实会更新
模式。这可能是Xming问题吗?将通过更新进行测试
Windows 10计算机本地安装的Gvim.exe。
答案 0 :(得分:1)
查看:help 'titlestring'
时,您会注意到这是一个全局选项。由于Vim实例只有一个窗口标题,因此本地选项没有任何意义。不过,您可以基于当前窗口/缓冲区/其他内容(使用:autocmd
)来更新内容。
Vim尝试避免不必要的屏幕更新。要在某个特定时间点强制进行更新,可以使用:redraw
。以下对我有用:
autocmd CmdlineEnter * set titlestring=CommandlineMode|redraw
关于语法错误:使用:let &option
语法时,右侧必须是 Vim表达式(此处:解释为字符串),因此必须将其括起来用单引号或双引号引起来。带反斜杠的空格转义用于:set
命令。这很容易混淆:-)