我正在尝试记录我在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的组合将使这项工作,但我还没有发现它。
答案 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
标志。