Я прочитал о том, как обновить строку состояния vim здесь . И я могу успешно обновить его.
Но я хотел бы сохранить формат строки состояния vim по умолчанию и просто добавить к нему дополнительную информацию, например, размер файла, тип файла и т. Д.
Строка состояния Vim по умолчанию:
<file-name> line_num,col_num %file
Как я мог сделать следующее?
- Я хотел бы добавить информацию после имени файла
- Показать текущий формат строки состояния (
:set statusline
ничего не отображается)
Я старался:
set statusline+=%y
Но это перезаписывает всю строку состояния и просто отображает тип файла ( %y
).
Есть намеки?
Ответы:
Как сказал @muru, кажется, что невозможно точно смоделировать строку состояния по умолчанию, когда
statusline
она установлена в качестве кода для рендеринга, она делает вещи, которые не могут быть указаны вstatusline
настройке. Однако можно подобраться довольно близко. Вот разумное приближение того, как выглядит строка состояния по умолчанию, когдаruler
она включена:Основное отличие заключается в расположении номеров строк и столбцов. Если возможно смоделировать логику интервалов по умолчанию, я не смог найти способ сделать это. Возможно, это будет достаточно близко для ваших целей.
Я использую разделенную версию этого,
.vimrc
чтобы разместить информацию о строке состояния Syntastic в середине того, что выглядит как обычная строка состояния vim с линейкой:источник
Код не устанавливает никакого значения в пустую строку состояния, а просто действует с использованием некоторых значений по умолчанию. Видите
src/screen.c
, функцияwin_redr_status()
. Показанные элементы основаны на скомпилированных функциях, поэтому, чтобы восстановить точную строку состояния, нужно взглянуть на скомпилированные функции. Может быть проще использовать пример строки состояния, приведенной в:h statusline
:источник
%-14.(%l,%c%V%)
?ТЛ; др
Хотя мое предлагаемое решение не сильно отличается от других ответов, я хотел бы поделиться более подробным объяснением.
оригинальное поведение
Сначала давайте разберемся, как
vim
рисует статусная строка. Ответственными функциями являютсяwin_redr_status()
иwin_redr_ruler()
.vim
принимает буфер имя , добавляет пространство , если есть какие -то флаги , чтобы следовать (как[Help]
,[Preview]
,[+]
,[RO]
). Затем он добавляет к флагам .Обычно он выделяет 18 символьных ячеек для правителя. Если часть имени буфера не умещается, оставшаяся часть доступного пространства
vim
обрезает ее слева и добавляет<
в начале.Если есть место для раскладки клавиатуры , оно добавляется в конце (выровнено по правому краю).
Теперь правитель. Он состоит из
<row>,<col>-<virtcol>
части и относительного положения (выровнено по правому краю).Там же ограничение , что часть с именем буфера должны по крайней мере , половину от ширины .
решение
Теперь давайте возьмем значение, предлагаемое документами :
где
Итак, first
%<
можно опустить, так как по умолчанию имя буфера усекается в начале. Затем отсутствует флаг предварительного просмотра (%w
). Также, когда окно меньше18 * 2
ширины символов, правая часть занимает более половины строки состояния.Итак, по крайней мере, мы можем опустить
%<
и добавить%w
:Мы можем пойти дальше и убедиться, что правая часть не занимает больше половины строки состояния:
Тогда мы можем сделать это в зависимости от функций, которые
vim
были скомпилированы .Но я бы сказал, что это не практично, и предыдущего решения будет достаточно для большинства целей и задач. Однако, если последнее решение не работает для вас, скажите мне, что не так, и я постараюсь найти лучшее.
Проблема с решением, предложенным Лоуренсом Гонсалвесом, состоит в том, что, если флагов нет, между левой и правой частями есть два пробела:
источник