现在调整字幕时间的工具很多,但我在开始学习 vim 的时候,用的是64位的win7那时候,有个 VobSub 软件不能在其下兼容运行,于是就自已写了些 vim 函数来调整。
第一步,在 vim 安装目录下的 vimfiles\after\ftdetect 目录底下添加个文件 filetypes.vim 让 vim 能够检测文件类型 srt 并加载相应的编辑函数;其代码如下:
<pre class="plain" name="code">augroup filetypedetect
au BufNewFile,BufRead *.srt setf srt
augroup END
第二步,在 vim 安装目录下的 vimfiles\after\ftplugin 目录底下添加个文件 srt.vim 让 vim 检测到当是 srt 文件类型时,加载 srt.vim 里的函数;代码如下:
<pre class="html" name="code">let s:millisecs = 0
function! Convert2MilliSeconds(time)
let l:time = a:time
let l:result = 0
if type(l:time) == 1
if stridx(l:time, ",") != -1
let l:time = substitute(l:time, ",", ".", "")
endif
let l:sign = 1
if stridx(l:time, "-") == 0
let l:sign = -1
let l:time = strpart(l:time, 1)
elseif stridx(l:time, "+") == 0
let l:time = strpart(l:time, 1)
endif
if stridx(l:time, ":") != -1
let l:hmstime = split(l:time, ":")
let l:millisecs = 3600000
for l:part in l:hmstime
let l:result += float2nr(l:sign*l:millisecs*str2float(l:part))
let l:millisecs = l:millisecs/60
endfor
if l:millisecs >= 1000
let l:result = l:result/60
endif
else
let l:result = float2nr(l:sign*str2float(l:time)*1000)
endif
else
let l:result = float2nr(l:time*1000)
endif
return l:result
endf
function! AdjustTime(time)
let s:millisecs = Convert2MilliSeconds(a:time)
normal! ma
silent /\d\d:\d\d:\d\d,\d\d\d
if stridx(errmsg, "E486") &#