当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 7 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 对 vim 脚本表示很无语
帖子发表于 : 2010-11-23 12:30 
头像

注册: 2008-07-30 23:21
帖子: 13427
地址: freebuilder@yeah.net
系统: Debian stable AMD64
送出感谢: 38
接收感谢: 127
为了一个 ftplugin ,不得不把文件头写得如此难看。
代码:
" 和 $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()
" ……
" 脚本逻辑略

对函数那种需要 ! 的做法已经很不满了,还来个鸡肋般的 <SID> ,其实定义函数或本脚本内调用根本用不着 <SID> ,用 s: 一样。SID 只在传出时才有价值。而偏偏要传出 SID 如此麻烦,很明显设计者根本就没考虑传出 SID 问题,或者其它原因,总之是很脑残的设计。要弄什么 SID 就应当弄得像 C++ 的 this 一样好用,要么就干脆如 C 一般只能用全局标识符。


_________________
(2015-11-16 更新)适合 WM 的截图脚本
(2015-08-24 更新)Debian、Ubuntu 源列表说明
(2013-02-01 首发)文字如何绘出
▷▷ 【更 多 在 此】 ◁◁
箪食瓢饮随遇安,不求栋梁求参天。
【初韵】一门牛逼的编程语言。


页首
 用户资料  
 
2 楼 
 文章标题 : Re: 对 vim 脚本表示很无语
帖子发表于 : 2010-11-23 12:56 
头像

注册: 2005-12-28 1:16
帖子: 3916
地址: 火星
系统: Ubuntu 12.10 X64
送出感谢: 1
接收感谢: 0 次
函数不需要!, !是用来解决函数重复定义的,如果能保证不重复定义,可以不写!
SID本身就是给你map local键位用的,为什么要传出它?
这跟C语言在作用域外引用局部变量一个道理,虽然能做,但很dirty。


_________________
目前负债150多万


页首
 用户资料  
 
3 楼 
 文章标题 : Re: 对 vim 脚本表示很无语
帖子发表于 : 2010-11-23 18:10 
头像

注册: 2009-04-11 23:46
帖子: 4130
系统: Arch Linux
送出感谢: 11
接收感谢: 124
自由建客 写道:
...
对函数那种需要 ! 的做法已经很不满了,还来个鸡肋般的 <SID> ,其实定义函数或本脚本内调用根本用不着 <SID> ,用 s: 一样。SID 只在传出时才有价值。而偏偏要传出 SID 如此麻烦,很明显设计者根本就没考虑传出 SID 问题,或者其它原因,总之是很脑残的设计。要弄什么 SID 就应当弄得像 C++ 的 this 一样好用,要么就干脆如 C 一般只能用全局标识符。


很明显设计者不想让你把 SID 传出去。你要全局的话,为什么要写 s: 呢?你这是声明了一个局部变量,然后抱怨它不是全局变量!


_________________
我的博客 https://blog.lilydjwg.me/
提问的智慧
Arch Linux 中文论坛

我的vimrc: https://git.io/vimrc


页首
 用户资料  
 
4 楼 
 文章标题 : Re: 对 vim 脚本表示很无语
帖子发表于 : 2010-11-25 0:28 
头像

注册: 2008-07-30 23:21
帖子: 13427
地址: freebuilder@yeah.net
系统: Debian stable AMD64
送出感谢: 38
接收感谢: 127
代码:
inoremap <buffer> <unique> ; <C-R>=<SID>Semicolon()<CR>

if !exists("*s:Semicolon")
   function s:Semicolon()
      let l:i = match(getline("."), "[^[:space:]]")
      if l:i+2 > col(".") || l:i == -1
         return "0\<C-D>\<BS>;\<CR>"
      endif
      return ";"
   endfunction
endif

果然这个 <SID> 有用。定义函数时依然用 s: ,只在映射时用 <SID> 。但其它情况 <SID> 和 s: 一样,没区别,这也太局限了。
vim 有没有函数指针?


_________________
(2015-11-16 更新)适合 WM 的截图脚本
(2015-08-24 更新)Debian、Ubuntu 源列表说明
(2013-02-01 首发)文字如何绘出
▷▷ 【更 多 在 此】 ◁◁
箪食瓢饮随遇安,不求栋梁求参天。
【初韵】一门牛逼的编程语言。


最后由 自由建客 编辑于 2010-11-25 17:31,总共编辑了 1 次

页首
 用户资料  
 
5 楼 
 文章标题 : Re: 对 vim 脚本表示很无语
帖子发表于 : 2010-11-25 10:14 
头像

注册: 2009-04-11 23:46
帖子: 4130
系统: Arch Linux
送出感谢: 11
接收感谢: 124
自由建客 写道:
....
果然这个 <SID> 有用。但其它情况 <SID> 和 s: 一样,没区别,这也太局限了。
vim 有没有函数指针?


有啊

代码:
:h Funcref


_________________
我的博客 https://blog.lilydjwg.me/
提问的智慧
Arch Linux 中文论坛

我的vimrc: https://git.io/vimrc


页首
 用户资料  
 
6 楼 
 文章标题 : Re: 对 vim 脚本表示很无语
帖子发表于 : 2010-11-25 17:33 
头像

注册: 2008-07-30 23:21
帖子: 13427
地址: freebuilder@yeah.net
系统: Debian stable AMD64
送出感谢: 38
接收感谢: 127
这个不行,我指的是能否传出一个指向某函数的值。


_________________
(2015-11-16 更新)适合 WM 的截图脚本
(2015-08-24 更新)Debian、Ubuntu 源列表说明
(2013-02-01 首发)文字如何绘出
▷▷ 【更 多 在 此】 ◁◁
箪食瓢饮随遇安,不求栋梁求参天。
【初韵】一门牛逼的编程语言。


页首
 用户资料  
 
7 楼 
 文章标题 : Re: 对 vim 脚本表示很无语
帖子发表于 : 2010-11-25 17:53 
头像

注册: 2009-04-11 23:46
帖子: 4130
系统: Arch Linux
送出感谢: 11
接收感谢: 124
自由建客 写道:
这个不行,我指的是能否传出一个指向某函数的值。


有函数名就可以了呀。你到底要做什么啊?


_________________
我的博客 https://blog.lilydjwg.me/
提问的智慧
Arch Linux 中文论坛

我的vimrc: https://git.io/vimrc


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 7 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 2 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译