самая длинная строка в энергии?

Существует ли команда для определения длины самой длинной строки в энергии? И добавлять ту длину в начале файла?

14
задан Jon Seigel 5 June 2010 в 23:36
поделиться

2 ответа

Команда 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

Спасибо, выясняет это было весело.

20
ответ дан 1 December 2019 в 09:32
поделиться

Если вы работаете с развернутыми таблицами, достаточно простого

:0put=max(map(getline(1,'$'), 'len(v:val)'))

.

В противном случае, я думаю, нам понадобится следующее (которое вы можете найти в качестве последнего примера в : h virtcol () , минус -1):

0put=max(map(range(1, line('$')), "virtcol([v:val, '$'])-1"))
6
ответ дан 1 December 2019 в 09:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: