输入/离开命令行时,在Vim中更新标题字符串

时间:2019-02-11 19:09:51

标签: vim xming

正确的设置:在末尾添加|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

存在多个问题:

  1. titlestring和/或Gvim窗口的标题不更新 当我 ENTER 命令行时。当我离开命令时刷新 线路模式。
    • 此外,&l:标志并没有限制缓冲区的本机设置:对于在新缓冲区/选项卡中打开的新文件,我得到的常量标题字符串为“ CommandlineMode”。 (通过nnoremap <> <Plug>VimwikiMakeDiaryNote映射打开一个特定文件,不涉及任何命令行操作。)
  2. 此外,我不能简单地将定制的字符串“追加”到 titlestring。这应该是语法问题
    • 也相关:augroup中已注释掉的行应带 我实际上离开命令行时遇到以下错误。请 还建议我离开菜单后如何恢复titlestring设置 命令行。

enter image description here

灵感和功劳

  • Naumann在this post中,我已经可以告诉titlestring Vim的当前模式。

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

1 个答案:

答案 0 :(得分:1)

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


Vim尝试避免不必要的屏幕更新。要在某个特定时间点强制进行更新,可以使用:redraw。以下对我有用:

autocmd CmdlineEnter * set titlestring=CommandlineMode|redraw

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