如何使用'时间'计算vim会话

时间:2011-08-19 21:27:07

标签: bash vim

我正在尝试记录我在vim工作的时间。我有一个与gvim一起使用的脚本,但是当我尝试用vim设置它时,它会静默地锁定终端会话,或者使用消息'Vim:Warning:输出不是终端'

以下是适用于gvim的脚本:

#!/bin/sh                                                                                                                                                                                                        

workfile="/home/na/writing/fiction.txt"                                                                                                                                                                          
worklog="/home/na/writing/worktime.log"                                                                                                                                                                          

d=`date --rfc-3339 date`                                                                                                                                                                                         
t=$( { /usr/bin/time -f "%e" /usr/local/bin/gvim -f -S /home/na/.vim/writeroom/writeroom.vim $workfile; } 2>&1 )                                                                                                 
w=`wc -w $workfile`                                                                                                                                                                                              

echo $d $t $w >> $worklog                                                                                                                                                                                        

当我关闭gvim窗口时,我得到一个日志文件,其中包含日期,编辑文件所花费的秒数以及文件的字数。

2011-08-15 700.15 238869 /home/na/writing/fiction.txt                                                                                                                                                            

我想在终端会话中使用vim一样。

我理解vim直接与终端对话而不是stdout,但我不关心vim返回什么,我想要time命令的输出。

这些不起作用:

t=`/usr/bin/time -f "%e" /usr/local/bin/vim -f $workfile`                                                                                                                                                            
t=$( { /usr/bin/time -f "%e" /usr/local/bin/vim -f $workfile; } 2>&1 )                                                                                                                                               
t=$( { /usr/bin/time -f "%e" /usr/local/bin/vim -f $workfile; } )                                                                                                                                                    

我怀疑有一些反叛和paranthesis的组合将使这项工作,但我还没有发现它。

2 个答案:

答案 0 :(得分:3)

反引号或$()运算符捕获vim的输出(打开vim时在终端上看到的是vim从stdout输出的内容),所以你不能这样做。

您可以尝试这样做:

start=$(date +%s)
/usr/local/bin/vim -f $workfile
end=$(date +%s)
duration=$((end-start))
echo "$duration"

答案 1 :(得分:1)

某些版本的time(例如:GNU)支持设置输出文件的标志。例如:

/usr/bin/time -o /tmp/foo vim

如果你正在使用bash,则需要使用time(或前导\)的路径,因为bash有一个保留字time,其行为类似于{ {1}}命令(但在整个管道上运行)不支持time标志。