对 vim 脚本表示很无语
发表于 : 2010-11-23 12:30
为了一个 ftplugin ,不得不把文件头写得如此难看。
对函数那种需要 ! 的做法已经很不满了,还来个鸡肋般的 <SID> ,其实定义函数或本脚本内调用根本用不着 <SID> ,用 s: 一样。SID 只在传出时才有价值。而偏偏要传出 SID 如此麻烦,很明显设计者根本就没考虑传出 SID 问题,或者其它原因,总之是很脑残的设计。要弄什么 SID 就应当弄得像 C++ 的 this 一样好用,要么就干脆如 C 一般只能用全局标识符。
代码: 全选
" 和 $VIMRUNTIME/ftplugin/*.vim 一样,防重入,这点倒好说
if exists("b:did_ftplugin_after")
finish
endif
let b:did_ftplugin_after = 1
" 关键的 SID ,要传出一个 SID 竟如此麻烦,或者说要获得自己的 SID
function! s:GetSID()
return matchstr(expand('<sfile>'), '<SNR>\zs\d\+\ze_GetSID$')
endfunction
" undo_ftplugin 是必须的,看 $VIMRNTIME/ftplugin.vim
let b:undo_ftplugin_new = b:undo_ftplugin .
\ " | call <SNR>" . s:GetSID() . "_UnDo_FtPlugin_After()" .
\ " | unlet! b:did_ftplugin_after"
let b:undo_ftplugin = b:undo_ftplugin_new
unlet b:undo_ftplugin_new
“ =============
function! s:UnDo_FtPlugin_After()
" ……
" 脚本逻辑略