是否有命令确定vim中最长行的长度?并将该长度附加到文件的开头?
答案 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
:'<,'>s/./a/g
:'<,'>sort u
我在制作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)应该覆盖它!