Существует ли команда для определения длины самой длинной строки в энергии? И добавлять ту длину в начале файла?
Команда WC GNU имеет опцию длины длины line -lax-line, которая печатает максимальную длину линии файла. См. GNU Man WC . WC FreeBSD также имеет -l, но не - макс-длина линии, см. FreeBSD Man WC .
Как использовать их из Vim? Команда:
:%!wc -L
будет фильтровать открытый файл через WC -L и сделать содержимое файла максимальную длину линии.
Чтобы сохранить содержимое файла и поместить максимальную длину линии на первой строке:
:%yank
:%!wc -L
:put
вместо использования WC, найти длину длиной линии - awk Bash описывает, как использовать awk, чтобы найти Длина самой длинной линии.
Хорошо, теперь для чистого решения VIM. Я несколько новичок в сценарии, но вот идет. Далее следует основано на функции фильтровальной сети от 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
Спасибо, выясняет это было весело.
Если вы работаете с развернутыми таблицами, достаточно простого
:0put=max(map(getline(1,'$'), 'len(v:val)'))
.
В противном случае, я думаю, нам понадобится следующее (которое вы можете найти в качестве последнего примера в : h virtcol ()
, минус -1):
0put=max(map(range(1, line('$')), "virtcol([v:val, '$'])-1"))