1

正确设置:|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 窗口的, 和/或标题不会更新。当我离开命令行模式时它会刷新。
    • 此外,该&l:标志并未将设置本地限制为缓冲区:对于在新缓冲区/选项卡中打开的新文件,我将常量标题字符串作为“CommandlineMode”。(通过nnoremap <> <Plug>VimwikiMakeDiaryNote映射打开一个特定文件,不涉及命令行操作。)
  2. 此外,我不能简单地将自定义字符串“附加”到 titlestring. 这应该是语法问题
    • 还相关:augroup当我实际离开命令行时,已注释掉的行会带来以下错误。titlestring当我离开命令行时,还请告知如何恢复设置。

在此处输入图像描述

灵感和学分

  • Naumann 在这篇文章中,我已经可以说出titlestringVim 的当前模式。

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

4

1 回答 1

2

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


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

autocmd CmdlineEnter * set titlestring=CommandlineMode|redraw

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

于 2019-02-12T09:47:23.977 回答