在 vim 状态行上显示总字符数
Display total characters count on vim statusline
我想在我的状态栏中添加一个功能,通过它我可以显示当前文件的总字符数。
:help statusline
告诉我 F
指的是 Full 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^@
set statusline+=%#lite#\ %o/%{DisplayTotalChars()}\
那部分是正确的,减去末尾没有用处的 \
。
let current_file = expand("%:F")
那部分是不正确的,因为你在 :help 'statusline'
下找到的 F
直接用在 &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}
它不关心文件名或调用外部程序。
由于重复调用 system()
和 wordcount()
会做很多不必要的工作并消耗额外的 CPU 时间,这甚至可能导致机器速度变慢(尤其是在一个巨大的文件),强烈建议您改用 line2byte()
:
set statusline=%o/%{line2byte(line('$')+1)-1}
或者更好的是,只要您真的想获取此信息并保持状态栏清洁,请按 gCtrl-g。
我想在我的状态栏中添加一个功能,通过它我可以显示当前文件的总字符数。
:help statusline
告诉我 F
指的是 Full 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^@
set statusline+=%#lite#\ %o/%{DisplayTotalChars()}\
那部分是正确的,减去末尾没有用处的 \
。
let current_file = expand("%:F")
那部分是不正确的,因为你在 :help 'statusline'
下找到的 F
直接用在 &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}
它不关心文件名或调用外部程序。
由于重复调用 system()
和 wordcount()
会做很多不必要的工作并消耗额外的 CPU 时间,这甚至可能导致机器速度变慢(尤其是在一个巨大的文件),强烈建议您改用 line2byte()
:
set statusline=%o/%{line2byte(line('$')+1)-1}
或者更好的是,只要您真的想获取此信息并保持状态栏清洁,请按 gCtrl-g。