Я хочу написать функцию, которую я могу вызвать с карты. Идея состоит в том, чтобы изменить размер окна, чтобы оно соответствовало содержимому буфера. Это не так уж сложно:
fu! ResizeWindow(vert) "{{{
if a:vert
let longest = max(map(range(1, line('$')), "virtcol([v:val, '$'])"))
exec "vertical resize " . (longest+4)
else
exec 'resize ' . line('$')
1
endif
endfu "}}}
Однако мне бы хотелось, чтобы эта функция учитывала логические линии при расчете высоты (меня не очень беспокоит ширина).
Например, обернутая строка (из-за :set wrap
) будет считаться двумя или более строками. Сложенный блок из 37 строк считается только одной.
Кто-нибудь знает удобный способ получить этот «логический счетчик строк», не пытаясь вычислить его вручную? Если мне нужно сделать это вручную, есть ли другие случаи, которые я пропускаю, из-за которых строка может быть представлена потенциально другим числом строк?