使用vim脚本让srt文本文件中的所有时间戳都增加或减少

时间:2013-09-29 05:10:33

标签: vim srt

例如: 如何让所有减1的时间戳,谢谢:))

srt文本文件的一部分:

1
00:00:04,110 --> 00:00:08,409 
hi my name's mike

......

我想让它成为:

1
00:00:03,110 --> 00:00:07,409 
hi my name's mike

......

3 个答案:

答案 0 :(得分:3)

speeddating.vim插件(https://github.com/tpope/vim-speeddating)允许您使用vim的CTRL-A / CTRL-X增量/减量键来处理多种格式的日期和时间。

只需安装它,然后转到srt文件中的seconds列并按CTRL-X。 Speeddating了解到23:23:00变成23:22:59和23:00:00成为22:59:59。

然后你可以自动化#34;使用" g命令更改"像:

:g/\v^\d{2}:\d{2}:/execute "normal t,10\<C-x>2t,10\<C-x>"

将序列的开始和结束时间缩短10秒。

t和2t,将您带到行中的第一个和第二个逗号,将您放在秒列上。 2t:和3t:会让你按分钟等等,或者使用你喜欢的任何动作命令(也可以是7l 17l秒)。

答案 1 :(得分:1)

您可以使用vim的正则表达式来获得您想要的内容:

:%s;\(\d\{2}\)\(,\d\{3}\);\=printf("%02d%s", submatch(1) - 1, submatch(2));g

:           - begin command line mode.
%           - entire file.
s           - substitute.
;           - field separator.
\(          - begin sub-expression.
\d          - match digit.
\{2)        - match exactly two.
\)          - end sub-expression.
,           - actual comma.
\{3)        - match exactly three.
printf()    - internal vim function (see :h printf).
submatch(1) - match first sub-expression.
submatch(2) - match second sub-expression.
g           - replace all occurrences in the line.

答案 2 :(得分:1)

我已经为此目的专门编写了一个脚本,有一些风吹草动,可以在这里查看:https://github.com/pamacs/vim-srt-sync

如果您是Vim的日常用户,我也认为不必打开 如此简单的任务的单独程序,可以在几行中实现。