Есть ли команда для определения длины самой длинной строки в vim? И добавить эту длину в начале файла?
Самая длинная линия в vim?
Ответ 1
Команда gnu wc имеет опцию -L - max-line length, которая выводит максимальную длину строки файла. См. gnu man wc. У freebsd wc также есть -L, но не - длина макс длины, см. freebsd man wc.
Как использовать их из vim? Команда:
:%!wc -L
Будет фильтровать открытый файл через wc -L и сделать содержимое файла максимальной длиной строки.
Чтобы сохранить содержимое файла и поместить максимальную длину строки в первую строку:
:%yank
:%!wc -L
:put
Вместо wc Найти длину самой длинной строки - awk bash описывает, как использовать awk для поиска длины самой длинной строки.
Хорошо, теперь для чистого решения Vim. Я немного новичок в написании сценариев, но здесь. Далее следует функция FilterLongestLineLength из textfilter.
function! PrependLongestLineLength ( )
let maxlength = 0
let linenumber = 1
while linenumber <= line("$")
exe ":".linenumber
let linelength = virtcol("$")
if maxlength < linelength
let maxlength = linelength
endif
let linenumber = linenumber+1
endwhile
exe ':0'
exe 'normal O'
exe 'normal 0C'.maxlength
endfunction
command PrependLongestLineLength call PrependLongestLineLength()
Поместите этот код в .vim файл (или ваш .vimrc) и: введите файл. Затем используйте новую команду:
:PrependLongestLineLength
Спасибо, что это было весело.
Ответ 2
Если вы работаете с расширенными таблицами, просто
:0put=max(map(getline(1,'$'), 'len(v:val)'))
.
В противном случае, я думаю, нам понадобится следующее (что вы можете найти в качестве последнего примера в :h virtcol()
, минус -1):
0put=max(map(range(1, line('$')), "virtcol([v:val, '$'])-1"))
Ответ 3
:! wc -L%
а не
:%! wc -L
Чтобы добавить эту длину в начале файла:
: 0r! Wc -L% | cut -d '' -f1