Как рассчитать время vim-сессии, используя 'time' - PullRequest
2 голосов
/ 20 августа 2011

Я пытаюсь записать время, которое я трачу на работу в vim.У меня есть скрипт, который работает с gvim, но когда я пытаюсь настроить его с помощью vim, он блокирует сеанс терминала молча или с сообщением «Vim: Предупреждение: вывод не на терминал»

Здесьскрипт, который работает с 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; } )                                                                                                                                                    

Я подозреваю, что есть какая-то комбинация спинок и парантеза, которая сделает эту работу, но я еще не наткнулся на нее.

Ответы [ 2 ]

3 голосов
/ 20 августа 2011

Операторы backtick или $() захватывают вывод vim (то, что вы видите на терминале при открытии vim, является выводом vim из его стандартного вывода), поэтому вы не можете этого сделать.

Вы можете попробовать это вместо:

start=$(date +%s)
/usr/local/bin/vim -f $workfile
end=$(date +%s)
duration=$((end-start))
echo "$duration"
1 голос
/ 20 августа 2011

Некоторые версии time (например, GNU) поддерживают флаг для установки выходного файла.Например:

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

Если вы используете bash, вам нужно использовать путь для time (или начальный \), поскольку bash имеет зарезервированное слово time, которое ведет себя подобнокоманда time (но работает на всем конвейере), которая не поддерживает флаг -o.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...