当我 enter/leave 命令行时更新 Vim 中的标题字符串

Update titlestring in Vim when I enter/leave the commandline

正确设置:在末尾添加|redraw

augroup CmdLineStatus_to_Title
    autocmd!
    autocmd CmdlineEnter * set titlestring=CommandlineMode|redraw
    autocmd CmdlineEnter * set titlestring=%F\ %{v:servername}\ %{mode()}
augroup END

原版Post

我尝试了以下auto-command,但没有达到我想要的效果。理想情况下, 我想在移动时在 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

存在多个问题:

  1. titlestring,and/orGvim的标题window不更新 当我 ENTER 命令行时。当我 LEAVE 命令时它会刷新 行模式。
    • 此外,&l: 标志并未限制缓冲区的本机设置:对于在新 buffer/tabs 中打开的新文件,我得到的常量标题字符串为 "CommandlineMode"。 (一个特定的文件是通过 nnoremap <> <Plug>VimwikiMakeDiaryNote 映射打开的,不涉及命令行操作。)
  2. 此外,我不能简单地 "append" 在 titlestring。这个应该是语法问题
    • 另外相关:augroup中被注释掉的那一行应该带上 当我实际离开命令行时出现以下错误。请 还建议我离开时如何恢复 titlestring 设置 命令行。

灵感和学分

机器规格: 报告的故障发生在 Gvim 运行 通过 WSL-Linux-shell 在 Windows 10 机器上的 X11。 %{mode()} "variable" 当我在正常模式和插入模式之间来回切换时会更新 模式。这可能是 Xming 问题吗?将通过更新进行测试 Gvim.exe 本机安装在 Windows 10 机器上。

当您查看 :help 'titlestring' 时,您会注意到这是一个 全局选项 。由于 Vim 实例只有一个 window 标题,因此本地选项没有意义。不过,您可以根据当前 window / 缓冲区 / 任何内容(使用 :autocmd)更新内容。


Vim 尽量避免不必要的屏幕更新。要在某个时间点强制更新,可以使用 :redraw。以下对我有用:

autocmd CmdlineEnter * set titlestring=CommandlineMode|redraw

关于您的语法错误:当您使用 :let &option 语法时,right-hand 端必须是 Vim 表达式 (此处:解释为字符串),因此您必须将其括在(单引号或双引号)中。带反斜杠的空格转义用于 :set 命令。这很容易混淆:-)