当我 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
存在多个问题:
titlestring
,and/orGvim的标题window不更新
当我 ENTER 命令行时。当我 LEAVE 命令时它会刷新
行模式。
- 此外,
&l:
标志并未限制缓冲区的本机设置:对于在新 buffer/tabs 中打开的新文件,我得到的常量标题字符串为 "CommandlineMode"。 (一个特定的文件是通过 nnoremap <> <Plug>VimwikiMakeDiaryNote
映射打开的,不涉及命令行操作。)
- 此外,我不能简单地 "append" 在
titlestring
。这个应该是语法问题
- 另外相关:
augroup
中被注释掉的那一行应该带上
当我实际离开命令行时出现以下错误。请
还建议我离开时如何恢复 titlestring
设置
命令行。
灵感和学分:
- Naumann 在 this post 中,我已经可以告诉
titlestring
Vim 当前的模式。
机器规格: 报告的故障发生在 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
命令。这很容易混淆:-)
正确设置:在末尾添加|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
存在多个问题:
titlestring
,and/orGvim的标题window不更新 当我 ENTER 命令行时。当我 LEAVE 命令时它会刷新 行模式。- 此外,
&l:
标志并未限制缓冲区的本机设置:对于在新 buffer/tabs 中打开的新文件,我得到的常量标题字符串为 "CommandlineMode"。 (一个特定的文件是通过nnoremap <> <Plug>VimwikiMakeDiaryNote
映射打开的,不涉及命令行操作。)
- 此外,
- 此外,我不能简单地 "append" 在
titlestring
。这个应该是语法问题- 另外相关:
augroup
中被注释掉的那一行应该带上 当我实际离开命令行时出现以下错误。请 还建议我离开时如何恢复titlestring
设置 命令行。
- 另外相关:
灵感和学分:
- Naumann 在 this post 中,我已经可以告诉
titlestring
Vim 当前的模式。
机器规格: 报告的故障发生在 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
命令。这很容易混淆:-)