Как добавить переменное количество символов в строку состояния vim на основе свободного пробела в строке состояния - PullRequest
0 голосов
/ 15 июня 2019

Я создал свою пользовательскую строку состояния для vim и столкнулся с проблемой: когда я делаю: split, становится очень трудно увидеть разделение между буферами из-за способа, которым я его настроил.Теперь я хочу добавить символ, который будет действовать как разделительная граница между текстом слева и справа.Слева у меня есть имя файла и его путь (который изменяется по длине), справа у меня есть некоторая информация о номере буфера и тому подобное.Я не могу жестко закодировать символ, потому что иногда, когда путь к файлу слишком длинный, он обрезается.Я хочу иметь возможность вызывать функцию, которая будет возвращать переменное количество символов в зависимости от количества пробелов между двумя концами строки состояния.

Я думал о нескольких способах решенияэто, но я просто не знаю, как это сделать, и я не могу найти ответы в Интернете.Сначала у меня была идея просто подчеркнуть всю строку состояния, но я не знаю, как это сделать.

Теперь моя идея добавления переменного числа символов отличается, я хочу определить функциюкоторый использует регулярные выражения для чтения текста строки состояния и замены строки переменным количеством символов, которые бы идеально подходили для данного пробела.

Я не знаю, как это сделать, и я был бы признателен за любую помощь.Кроме того, я также хотел, чтобы определенный элемент строки состояния менял цвет в зависимости от того, в каком буфере находится мой курсор, чтобы легче было найти правильное окно, я также не смог найти способ сделать это и указатель вправильное направление будет оценено.

set laststatus=2
set statusline=
set statusline+=%2*\ %l
set statusline+=\ %*
set statusline+=%1*\ ‹‹
set statusline+=%1*\ %t\ %*
set statusline+=%1*\ ››
set statusline+=%1*\ %m
set statusline+=%3*\ %F
set statusline+=%{AddSeperator()}
set statusline+=%=
set statusline+=%3*\ ‹‹
set statusline+=%3*\ %{strftime('%R',getftime(expand('%')))}
set statusline+=%3*\ ::
set statusline+=%3*\ %n
set statusline+=%3*\ ››\ %*

1 Ответ

2 голосов
/ 15 июня 2019

Я просто не знаю, как это сделать, и я не могу найти ответы в Интернете

Лучшее место для поиска ответов - это справочная система Vim.В этом случае это :help 'statusline'.Закончив его, вы можете просто поискать работу других людей на собственном примере. Актуальная тема по SO , , вдохновляющий vimrc .И, конечно ;-), вот моя строка состояния .

Я не могу жестко закодировать символ, потому что иногда, когда путь к файлу слишком длинный, он обрезается.

Это означает, что вместо этого вы должны сократить путь к файлу.Затем вы можете добавить один пробел, чтобы убедиться, что есть хотя бы один:

set statusline+=%3*\ %<%F
set statusline+=\ %=

Если вам не нравятся "простые пробелы", прочитайте :help 'fillchars'.

IТакже хотелось, чтобы определенный элемент строки состояния изменил цвет в зависимости от того, в каком буфере находится мой курсор, чтобы легче было найти правильное окно

Просто используйте цвет по умолчанию (%*) длянекоторый элемент, и он будет переключаться между StatusLine и StatusLineNC автоматически.Так же, как и для строки состояния по умолчанию.Если вам не нравится StatusLine в текущей цветовой схеме, вы можете принудительно изменить его с помощью команды :highlight.Но обратите внимание, что StatusLine также используется для WildMenu.

Сначала у меня была идея просто подчеркнуть всю строку состояния, но я не знаю, как это сделать.

Вы не подчеркиваете "некоторый текст" в Vim.Вместо этого вы используете «подчеркнутые» цветовые группы.Вроде :hi User1 gui=underline guifg=... guibg=... и т. Д.

...