Обновить строку заголовка в Vim, когда я вхожу / покидаю командную строку - PullRequest
0 голосов
/ 11 февраля 2019

Правильная настройка: добавить |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 командной строки.Он обновляется, когда я LEAVE режим командной строки.
    • Кроме того, флаг &l: не ограничивал нативную настройку буфера: я получаю постоянную строку заголовка как «CommandlineMode» для новых файлов, открытых в новых буферах / вкладках.(Один конкретный файл открывается с помощью сопоставления nnoremap <> <Plug>VimwikiMakeDiaryNote, без операций с командной строкой.)
  2. Кроме того, я не могу просто «добавить» настраиваемую строку в конец titlestring.Это должно быть проблемой синтаксиса
    • Также связано: строка в augroup, которая была закомментирована, должна вызвать следующую ошибку, когда я фактически ВЫХОДЮ из командной строки.Пожалуйста, также посоветуйте, как восстановить настройки titlestring, когда я покидаю командную строку.

enter image description here

Вдохновение и кредиты :

  • Науманн в этот пост , я уже могу titlestring рассказать о текущем режиме Vim.

Спецификация машины : сообщенная проблема произошла на Gvim, работающем через X11 на WSL-Linux-оболочке на машине с Windows 10.«Переменная» %{mode()} обновляется, когда я переключаюсь между режимом Normal и режимом Insert.Скорее всего, это может быть проблемой Синмин?Будет выполнено тестирование путем обновления Gvim.exe, который изначально установлен на компьютере с Windows 10.

1 Ответ

0 голосов
/ 12 февраля 2019

Если вы посмотрите на :help 'titlestring', вы заметите, что это глобальная опция .Поскольку для экземпляра Vim есть только один заголовок окна, локальные параметры не имеют смысла.Вы можете обновить содержимое на основе текущего окна / буфера / чего угодно (используя :autocmd).


Vim пытается избежать ненужных обновлений экрана.Для принудительного обновления в определенный момент времени можно использовать :redraw.Следующее работает для меня:

autocmd CmdlineEnter * set titlestring=CommandlineMode|redraw

Относительно вашей синтаксической ошибки: Поскольку вы используете синтаксис :let &option, правая часть должна быть выражением Vim (здесь: интерпретируется как строка), поэтому вы должны заключить его в (одинарные или двойные) кавычки.Экранирование пробелов с обратной косой чертой для команды :set.Это легко спутать: -)

...