Найти в Дзене
Блокнот математика

Рубрика "Секреты Вим". Заголовок окна

Привет, коллеги. В Вим есть милая и небесполезная возможность: задать заголовок окна, в котором запущен терминал (ну, а в нем Вим). Все зависит от системы, конечно, но у меня в Ubuntu это работает, и заголовок окна еще и дублируется во вкладке, см. скриншот. В KDE почему-то нет, надо разбираться с настройками. Помимо возможности назвать вкладку или окно содержательным именем, можно также вывести туда, в заголовок, ту или иную полезную информацию. Здесь полная аналогия со строкой статуса (она же информационная строка). Только строка статуса относится к окну Вим, а заголовок - к окну системному. Начнем с флага title, который надо выставить: :set title Тогда в заголовке окна будет содержимое опции titlestring либо, если она пуста, некоторая строка по умолчанию (имя файла, признак несохраненности и всё такое). При сбросе флага Вим попытается восстановить исходный заголовок, а если не сможет, то выведет содержимое опции titleold. Вот у меня прямо сейчас там "Благодарим за использование Vim"

Привет, коллеги. В Вим есть милая и небесполезная возможность: задать заголовок окна, в котором запущен терминал (ну, а в нем Вим). Все зависит от системы, конечно, но у меня в Ubuntu это работает, и заголовок окна еще и дублируется во вкладке, см. скриншот. В KDE почему-то нет, надо разбираться с настройками.

Помимо возможности назвать вкладку или окно содержательным именем, можно также вывести туда, в заголовок, ту или иную полезную информацию. Здесь полная аналогия со строкой статуса (она же информационная строка). Только строка статуса относится к окну Вим, а заголовок - к окну системному.

Начнем с флага title, который надо выставить:

:set title

Тогда в заголовке окна будет содержимое опции titlestring либо, если она пуста, некоторая строка по умолчанию (имя файла, признак несохраненности и всё такое). При сбросе флага Вим попытается восстановить исходный заголовок, а если не сможет, то выведет содержимое опции titleold. Вот у меня прямо сейчас там "Благодарим за использование Vim". Это по умолчанию такое значение.

Можно указать, сколько процентов заголовка можно использовать: опция titlelen (по умолчанию 85).

Опция titlestring содержит текст, который надо вывести. Важно, что пробелы надо экранировать. Например:

set title titlestring=I\ love\ Vim
set title titlestring=Climate\ modelling\ project

Как уже сказано выше, можно вывести в заголовок что-нибудь полезное: здесь полное сходство со строкой статуса, те же поля можно добавлять. См. соответствующую заметку. Если кратко, то если в тексте стоит %, то это поле, которое надо заменить какой-то информацией. Есть много предусмотренных полей: %t и $F означают полное имя файла и просто имя, %y — тип файла, %l — номер строки, %p — процент текста выше экана, и многое другое. Можно вывести любую опцию, например, %{&ff}

Вот пример из Справки:

:set titlestring=%<%F%=%l/%L-%P

А вот посложнее:

:set titlestring=%t%(\ %M%)%(\ (%{expand(\"%:~:.:h\")})%)%(\ %a%)

Символы %( и %) позволяют вывести пробел только при необходимости (если, например, поле %a не пусто; а оно содержит список файлов, указанных при вызове Вим). Трюк с функцией expand позволяет использовать операции для работы с именами файлов. Знак % означает "текущий файл"; к нему применяются операции :~, :. и :h, которые, соответственно: переписывают путь в полном имени файла относительно домашнего каталога; переписывают путь в полном имени файла относительно текущего каталога; отцепляют имя файла, оставляя путь. В итоге: поле %t даст имя файла, %M - флажок несохраненности, команда с expand - путь (относительно текущего каталога, если можно, а если нет, то относительно домашнего, если можно, ну или абсолютный путь), и потом список файлов (вроде "5 of 6").

Лучше не использовать спецсимволов, вроде перевода строки.

Еще есть странная пара опций icon и iconstring. Они совершенно аналогично задают некий заголовок в... иконке, но у меня в Убунту это не имеет эффекта и в KDE тоже. Попробуйте, может у вас получится. Судя по справке, это вполне себе терминальная возможность, не для графического интерфейса (или не только для него). Ну у меня вот не поддерживается. В интернете ничего вразумительного не нашел. Либо справка того же Вим, либо человек пишет походя, что стал использовать iconstring вместо titlestring. И есть еще пример вроде

:set titlestring=hi
:set iconstring=there

Из чего я делаю вывод, что эти строки просто клеятся рядом.

Удачи, коллеги!

Научно-популярные каналы на Дзене: путеводитель
Новости популярной науки12 марта 2022