1

我想在状态行中添加一个函数,通过它可以显示当前文件的总字符数。 :help statusline向我展示了FFull path to the file in the buffer通过一些搜索,我知道了如何显示 shell 命令的输出。所以我目前有这些.vimrc

set statusline+=%#lite#\ %o/%{DisplayTotalChars()}\

function! DisplayTotalChars()
    let current_file = expand("%:F")
    let total_chars = system('wc -c ' . current_file)
    return total_chars
endfunction

这就是它现在在状态行中显示的内容,而我只需要字符数而不是要显示的文件路径:

36/29488 /home/nino/scripts/gfp.py^@

4

2 回答 2

4

由于两者system()wordcount()被反复调用都会做很多不必要的工作并消耗额外的 CPU 时间,甚至可能导致机器速度变慢(尤其是在处理大文件时),强烈建议您line2byte()改用:

set statusline=%o/%{line2byte(line('$')+1)-1}

或者更好的是,gCtrl-g在您真正想要获取此信息并保持状态栏干净时按。

于 2021-05-19T10:52:07.290 回答
3
set statusline+=%#lite#\ %o/%{DisplayTotalChars()}\

那部分是正确的,减去\最后没有用的。

let current_file = expand("%:F")

那部分是不正确的,因为F你在下面找到的:help 'statusline'东西在直接用于值时意味着某些东西,&statusline:help expand()在你应该使用的地方没有意义:help filename-modifiers。正确的行是:

let current_file = expand("%:p")

和一个工作功能:

function! DisplayTotalChars()
    let current_file = expand("%:p")
    let total_chars = system('wc -c ' . current_file)
    return total_chars
endfunction

但是您的状态行可能每秒刷新几次,因此每次调用外部程序似乎很昂贵。

相反,您应该废弃整个功能并:help wordcount()直接使用:

set statusline+=%#lite#\ %o/%{wordcount().bytes}

它不关心文件名或调用外部程序。

于 2021-05-19T07:35:56.907 回答