Самая длинная линия в 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