Показать текущий столбец в строке состояния

Как отобразить текущий столбец в строке состояния?

Прочитав :h statusline я нашел %c что выглядит многообещающе, но учитывает байты, а не символы. Я бы хотел, чтобы столбец был разделен символами, а не байтами. %v работает, если никакие вкладки не используются. Вот пример:

123 56789
“äå µåäö”
   ^ this is a tab

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

:set statusline=%v

Следующее работает только для первой строки, но не для второй.

:set statusline=%c

Учитывая вышеупомянутый пример vim отображает 5 если курсор находится на цифре пять в первой строке, что я и хочу. Если я перейду вниз на одну строку, чтобы курсор был расположен на µ Я хотел бы показать 5 также, %cдисплеи 9 а также %v зависит от стоимости tabstop,

1 ответ

Решение

Я думаю, что вы должны использовать выражение в 'statusline' опция: %{<exp>}, Поэтому возьмите строку, обрежьте ее до столбца курсора, замените все символы 1-байтовым символом и посчитайте длину строки:

:let &stl = "%{strlen(substitute(strpart(getline('.'), 0, col('.')), '.', 'x', 'g'))}"
Другие вопросы по тегам