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

Рубрика "Секреты Вим". Информационная строка

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

Но Вим дает полную свободу настроить эту строку под себя! Это не так просто, но делается один раз в .vimrc, а потом просто наслаждаетесь, меняя при необходимости. Обсудим.

Вот такую информативную строку я себе настроил.
Вот такую информативную строку я себе настроил.

Оглавление рубрики

Во-первых, надо решить: всегда ли нужна строка информации. По умолчанию она есть у окон только тогда, когда их больше одного (laststatus=1). Можно включить ее всегда (laststatus=2) или отключить (laststatus=0).

Управляет видом этой строки переменная statusline. Если она пуста, строка будет по умолчанию (а этого может быть и достаточно).

Переменная эта содержит строку в стиле printf: текст с полями, которые надо заменить чем-то, по текущей ситуации. Число полей ограничено 80. Поля отмечаются знаком процента и имеют вид %-0m.Mx, где обязательны только знак процента и символ на месте х: неполный список привожу ниже. Числа m и M означают минимальную и максимальную ширину поля, нолик предписывает дополнять числа слева нулями, а дефис — выравнивать влево (при этом он отменяет нолик).

Возможные типы полей (х):

f: путь к файлу, относительный или как был указан при запуске Вим.
F: полный путь к файлу
t: имя файла без пути
m или M: изменен ли файл, "[+]" или ",+". Если файл неизменяемый, то "[-]" или ",-", соответственно
r или R: флаг "только для чтения", два вида: "[RO]" или ",RO"
y или Y: тип файла, два вида; тип по распознанию Вим, по этому типу выбирается раскраска синтаксиса и т.п.
n: номер буфера
h или H: отметка, что это окно помощи (если это оно)
b или B: код символа под курсором (десятичный или шестнадцатеричный)
o или O: номер байта от начала текста (десятичный или шестнадцатеричный)
l: номер строки
L: число строк в файле
c: номер байта в строке (номер столбца)
v: номер символа в строке (номер виртуального столбца)
V: то же, но в стиле "-число" и не отображается, если равно c; это удобно для комбинаций вроде %c%V, которые выводят 35-20 или просто 42.
p: процент текста в строках (первая строка покажет 0 процентов, последняя 100).
P: процент текста выше текущего экрана: если первая строка видна, будет "Наверху" или "Top", аналогично с последней; если ни та, ни другая не видны, будет показан процент текста выше экрана (примерно, конечно).

Можно выполнить выражение, указанное между %{ и }. Чаще всего это значение переменной-опции, в виде &имя. Например, %{&ff} выведет тип конца строки в данном файле, а %{&fenc} выведет кодировку (ту, в которой файл показан! Если она неверная, ее надо поменять, Вим чудес не обещает).

Можно выполнить выражение и так: %!выражение. Разница в том, что это выполняется в контексте текущего окна, а %{} — в контексте окна, которому принадлежит строка. Еще разница в том, что после &! идет код, обычно это вызов функции, а в %{} можно просто снять значение переменной.

Пробелы надо экранировать слешем: \ .

Знак процента можно вставить так: %%. Например, %p%%, чтобы получить 42%, а не просто 42.

Можно объединять поля в группы, заключенные между %( и %). Если все поля в группе пустые и минимальная ширина не задана, группа не будет показана вообще, даже если в ней есть какой-то текст.

Примеры

:set statusline=%F%m%r%h\ FORMAT=%{&ff}\ TYPE=%Y\ ASCII=\%03.3b\ HEX=\%02.2B\ POS=%04l,%04v[%p%%]\ LEN=%L

Здесь есть всё: и подстановка значения переменной ff, и текст для удобства (квадратные скобки тоже), и задание ширины поля с дополнением нулями.

:set statusline=%F%m%r%h\ %l/%L(%p~%P)\ %c%V

Здесь кратенько: имя файла с флажками, номер строки/число строк, процент текста в двух видах (причем будет 0~Наверху или 100~Внизу, ну а в середине всяко может быть, хотя примерно одинаково), и номер байта с номером символа (если есть табуляции или хитрый юникод, это может быть весьма различно).

:set stl=%t\ %{&ff}\ %{&fenc}\ %p\ %l-%v\ %b\ %B

Это для тех, кому важна кодировка и коды символов.

:set statusline=%<%f\ %h%m%r%=%-14.(%l,%c%V%)\ %P

Из справки Вим, стандартная строка.

Есть существенно более сложные примеры, с выделением цветом, сложными вычислениями и тонкой настройкой.

Удачи!

Путеводитель по каналу