在vim中写入后,如何在状态栏上显示时间?

时间:2011-02-16 16:58:24

标签: vim save

每当我在屏幕底部的vim中写入时,它会提供有关写入的一些信息,例如文件名和写入的数量。我还想在信息中包含写入的时间。我经常发现自己正在编辑一个文件然后忘记我是否写过了。我还想在上次写一个特定文件的时候比较我正在处理的其他文件。有没有人对如何做到这一点有任何建议?

谢谢!

2 个答案:

答案 0 :(得分:4)

查看'statusline'选项。这允许您完全自定义状态行上显示的内容。

:help 'statusline'

您可以创建一个创建整个状态行的函数,也可以使用%{}使其中的一部分成为函数行的结果。

%{strftime('%c',getftime(expand('%')))}

应该给出修改时间'当前文件。

最好将其粘贴在一个函数中,因为您可以在获取时间之前检查当前文件是否存在(这将更加健壮)。我会把它作为练习让你阅读状态线的帮助,然后决定你想要什么。尝试一些事情,看看你是如何上场的!

 :help function-list
 :help strftime()
 :help getftime()
 :help expand()
 :help :function

答案 1 :(得分:3)

所以我最后得到的结果主要归功于Al的方向:

:hi User1 term=NONE cterm=NONE ctermfg=Magenta ctermbg=Black
:set laststatus=2 
:set statusline=%1*%F%h%m%w\ [Time:\ %{strftime(\"%H:%M\")}]\ [Mod\ Time:\ %{strftime(\"%H:%M:%S\",getftime(expand(\"\%\%\")))}]%=\ [%p%%]\ [%l/%L]

描述:

:hi User1 term=NONE cterm=NONE ctermfg=Magenta ctermbg=Black

此命令将名为user1的配置文件的背景颜色设置为等于黑色,将字体颜色设置为等于Magenta。我们所做的是使状态行等于此配置文件,以便我们可以更改状态栏的颜色。

:set laststatus=2 

此命令通过在vim命令的底部放置两行来不断显示状态栏。

:set statusline=%1*%F%h%m\ [Time:\ %{strftime(\"%H:%M\")}]\ [Mod\ Time:\ %{strftime(\"%H:%M:%S\",getftime(expand(\"\%\%\")))}]%=\ [%p%%]\ [%l/%L]

这是实际显示状态栏中的内容的命令。在这个命令中,我们使用了几个特定于vim的函数(例如strftime,expand ...)。我们还使用%(字母)来表示特定的vim变量。文本的其余部分只是用\打印出你用屏幕写入屏幕的内容,然后用空格表示空格。现在来描述具体的变量。

  • %1*是与我们在第一个命令中执行的颜色相对应的var,这会将状态栏设置为等于这些颜色
  • %F%h%m表示显示完整文件名,帮助文件标志和修改后的标志
  • [Time:\ %{strftime(\"%H:%M\")}]\表示显示[时间:(当前时间)]并以小时和分钟显示。如果你想要一个不同的时间格式,比如可能包括年份或某事,请执行:help strftime。
  • [Mod\ Time:\ %{strftime(\"%H:%M:%S\",getftime(expand(\"\%\%\")))}]表示显示[Mod​​ Time:(mod time)]。它以小时:分钟:秒。
  • %=\ [%p%%]\ [%l/%L]说右对齐并显示您经过的文件的百分比和[(当前行数)/(最大行数)]。