Jon*_*ght 20
Gnu的wc命令有一个-L --max-line-length选项,可以打印出文件的最大行长度.看到gnu man wc.freebsd wc也有-L,但不是--max-line-length,请参阅freebsd man wc.
如何从vim使用这些?命令:
:%!wc -L
Run Code Online (Sandbox Code Playgroud)
将通过wc -L过滤打开的文件,并使文件的内容成为最大行长度.
要保留文件内容并将最大行长度放在第一行,请执行以下操作:
:%yank
:%!wc -L
:put
Run Code Online (Sandbox Code Playgroud)
而不是使用wc,查找最长行的长度 - awk bash描述了如何使用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()
Run Code Online (Sandbox Code Playgroud)
将此代码放在.vim文件(或.vimrc)中,然后:获取文件.然后使用新命令:
:PrependLongestLineLength
Run Code Online (Sandbox Code Playgroud)
谢谢,搞清楚这很有趣.
如果你使用扩展的表格,一个简单的
:0put=max(map(getline(1,'$'), 'len(v:val)'))
Run Code Online (Sandbox Code Playgroud)
足够.
否则,我想我们将需要以下内容(您可以找到最后一个示例:h virtcol(),减去-1):
0put=max(map(range(1, line('$')), "virtcol([v:val, '$'])-1"))
Run Code Online (Sandbox Code Playgroud)