vim中最长的一行?

时间:2010-01-15 22:47:54

标签: vim command

是否有命令确定vim中最长行的长度?并将该长度附加到文件的开头?

4 个答案:

答案 0 :(得分:19)

Gnu的wc命令有一个-L -max-line-length选项,用于打印文件的最大行长度。请参阅gnu man wc。 freebsd wc也有-L,但不是--max-line-length,见freebsd man wc

如何从vim使用这些?命令:

:%!wc -L

将通过wc -L过滤打开的文件,并使文件的内容成为最大行长。

要保留文件内容并将最大行长度放在第一行,请执行以下操作:

:%yank
:%!wc -L
:put

Find length of longest line - awk bash不是使用wc,而是描述如何使用awk来查找最长行的长度。

好的,现在是纯粹的Vim解决方案。我对脚本有些新意,但是这里有。以下内容基于textfilter的FilterLongestLineLength函数。

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

谢谢,搞清楚这很有趣。

答案 1 :(得分:5)

如果你使用扩展的表格,一个简单的

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

就够了。

否则,我想我们需要以下内容(您可以找到:h virtcol()中的最后一个示例,减去-1):

0put=max(map(range(1, line('$')), "virtcol([v:val, '$'])-1"))

答案 2 :(得分:2)

:!wc -L%
而不是 :%!wc -L

将该长度附加到文件的开头:
:0r!wc -L%| cut -d'' - f1

答案 3 :(得分:0)

这是一个简单易懂的方法:

  • 选择所有文字:ggVG
  • 用“a”替换每个字符(。)::'<,'>s/./a/g
  • 排序,唯一::'<,'>sort u
  • 计算最长行中的字符数(如果容易计算太多字符,只需查看Vim状态栏中的列位置)

我在制作PostgreSQL表之前用它来检查酶学委员会(EC)编号:

我将ec_numbers数据复制到Calc,然后在Neovim中取出每一列,用“a”替换每个字符,

:'<,'>s/./a/g

然后对唯一行进行排序

:'<,'>sort u

aaaaaaa
aaaaaaaa
aaaaaaaaa
aaaaaaaaaa
aaaaaaaaaaa

...所以最长的EC编号条目[x.x.x.x]是11 char,VARCHAR(11)。

同样适用于接受名称,我们得到

aaaaa
aaaaaa
...
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

即。最长的名字是147 char:VARCHAR(200)应该覆盖它!

line_length_count