vim中最长的一行?

jor*_*roj 14 vim command

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

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)

谢谢,搞清楚这很有趣.


Luc*_*tte 6

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

: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)