在vim状态行上显示字符总数

在vim状态行上显示字符总数,vim,statusline,Vim,Statusline,我想在statusline中添加一个函数,通过该函数可以显示当前文件的字符总数。 :help statusline向我显示了F是指缓冲区中文件的完整路径,通过一点搜索,我了解了如何显示shell命令的输出。因此,我目前在.vimrc中有以下内容: 这就是它现在在状态行中显示的内容,而我只需要显示字符数,而不需要显示文件路径: 36/29488/home/nino/scripts/gfp.py^@ 这一部分是正确的,减去末尾的\没有任何意义 let current_file = expand(&q

我想在statusline中添加一个函数,通过该函数可以显示当前文件的字符总数。 :help statusline向我显示了F是指缓冲区中文件的完整路径,通过一点搜索,我了解了如何显示shell命令的输出。因此,我目前在.vimrc中有以下内容:

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

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

这一部分是正确的,减去末尾的\没有任何意义

let current_file = expand("%:F")
这一部分是不正确的,因为在:help“statusline”下找到的F在&statusline的值中直接使用时意味着一些东西,但在:help expand中没有意义,您应该使用:help filename修饰符。正确的路线是:

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}
它不关心文件名或调用外部程序

这一部分是正确的,减去末尾的\没有任何意义

let current_file = expand("%:F")
这一部分是不正确的,因为在:help“statusline”下找到的F在&statusline的值中直接使用时意味着一些东西,但在:help expand中没有意义,您应该使用:help filename修饰符。正确的路线是:

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}
它不关心文件名或调用外部程序。

由于反复调用system和wordcount会做大量不必要的工作,并消耗额外的CPU时间,甚至可能导致机器速度减慢,特别是在处理大文件时,强烈建议您改为使用line2byte:

或者更好的方法是,只要您真的想获取此信息并保持状态行干净,就按gCtrl-g。

因为系统和字数都会被重复调用,这会导致大量不必要的工作,并消耗额外的CPU时间,甚至可能导致机器速度减慢,尤其是在处理大文件时,强烈建议您改用line2byte:

或者更好的方法是,只要您真的想获取此信息并保持状态行干净,就按gCtrl-g。

wordcount.bytes做得很好,但由于您提到的方法更有效,我将其替换为line2byteline“$”+1-1。Thanke.wordcount.bytes做得很好,但由于您提到的方法更有效,我将其替换为line2byteline“$”+1-1。谢谢