vim 中有确定最长行长度的命令吗?并将该长度附加到文件的开头?
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
代替使用 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()
将此代码放入 .vim 文件(或您的 .vimrc)中并 :source 该文件。然后使用新命令:
:PrependLongestLineLength
谢谢,弄清楚这个很有趣。
如果您使用展开的表格,一个简单的
:0put=max(map(getline(1,'$'), 'len(v:val)'))
就够了。
否则,我想我们将需要以下内容(您可以在
:h virtcol()
中找到最后一个示例,减去-1):
0put=max(map(range(1, line('$')), "virtcol([v:val, '$'])-1"))
:!wc -L %
:%!wc -L
将该长度附加到文件开头:
:0r !wc -L % | cut -d' ' -f1
这是一个简单易记的方法:
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 个字符,VARCHAR(11)。
同样适用于接受的名称,我们得到
aaaaa
aaaaaa
...
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
即最长的名称是 147 个字符:VARCHAR(200) 应该覆盖它!
对于 neovim 用户:
local lines = vim.api.nvim_buf_get_lines(bufnr, 0, -1, false)
local width = #(lines[1])
for _, line in ipairs(lines) do
if #line > width then
width = #line
end
end