2010年10月11日星期一

Vim 爱好者联系资料收集


希望通过一些形式让 Vim 爱好者联系更紧密,于是收集 Vim 爱好者的联系资料,并通过
较好的形式展现出来。




目前是通过 面板形式 展现,并有计划通过 Google 地图展现全国 Vim 爱好者的分布情况。




资料收集方式:



  1. Fork Vimmer 项目(最好是 gh-pages 分支),并加入自己的资料到 vimmer.json 中。

  2. 填写 Google Spread Sheets GFW出没注意

  3. 邮件发送到 hotoo.cn+vim[AT]gmail.com ,请将 [AT] 替换成 @,保留 +vim

    常用的网络ID *
    必填,可以是中文或英文,例如我的:hotoo

    真实姓名
    选填

    昵称
    常用的网络昵称,例如我的:闲耘™。选填,默认与ID相同。

    电子邮箱 *
    建议使用 Gmail 邮箱,请使用 [AT] 代替 @ 符合,例如:hotoo.cn[AT]gmail.com

    博客/个人主页
    请输入完整的URL地址(以 http 或其他的协议开头),例如:http://hotoo.github.com

    Twitter ID
    在 twitter.com 上的 ID,可以不带 @ 起始。例如我的 @hotoo

    Flickr ID
    在 flickr.com 上注册的 ID,例如:hotoo

    Delicious ID
    在 delicious.com 注册的 ID,例如 hotoo

    Github ID
    在 github.com 注册的 ID。

    豆瓣(Douban) ID
    在 douban.com 注册的 ID

    其他网站上注册的 ID
    如果你其他网站上注册的 ID,并希望分享出来,请填写在这里。
    网站和ID以冒号分隔,多个站的 ID 请以分号分隔。
    例如 about.me:hotoo; blueidea.com:hotoo

    Gravatar ID
    在 gravatar.com 注册并上传头像,根据邮箱地址计算MD5的值就是 Gravatar ID。
    例如:2fdef0a77e4bf207e3ec30660e7896e8

    目前所在地
    可以输入简要的地址,例如:杭州(Hangzhou);
    也可以输入详细的联系地址,甚至卫星坐标,可以通过Google地图获得。

    其他
    你希望留下的任何资料信息。


2010年8月30日星期一

Diff 模式下,让光标直接跳转到被修改的文本处

Vim 的 Diff 功能非常优秀。有一个我非常喜欢的特性是:完全相同的地方, 会被折叠隐藏起来(上下文除外)。还可以很方便的在各个差异点之间做出修改合并和快速跳转。

不过默认的 [c]c 两种跳转方式,目前只能跳转到差异点的行首。对于只修改了 行内部分文本内容(一般底色是浅红色)时,我更希望直接跳转到有变化的文本(底色是 深红色的部分)上。

感谢 tocer ,我初步实现了两个版本 gits:556810

  1. v1: 仅支持跳转到 DiffChange 的第一个 DiffText
  2. v2: 支持 DiffChange 行多个 DiffText

参考

  1. :h synIDattr
  2. :h diff_hlID
  3. https://twitter.com/hotoo/status/22227282177
  4. vimdiff 的跳转
  5. vimdiff: Jump to next difference inside line?

2010年8月22日星期日

隐私权

团购的时候我在邮件和 Google Docs 向所有参与团购的团友公布了各自的详细信息 (包括联系信息)。

我的公布的理由有两个:

  1. 方便自己统一管理,和团友随时审阅;
  2. 方便同城团友可以合并快递单。

有团友很不高兴。于是我特地看了关于隐私权的一些资料。

根据 维基百科全书:隐私权 和一些其他相关资料上的描述,我似乎并没有侵犯任何隐私权。 我没有把大家的手机号写在电线杆子上,并附上“办证”之类的字样; 没有入侵并偷窥大家的电子邮件;也没有找到大家的收货地址后非法闯进去。。。
以上纯属玩笑话 :D

隐私权目前来说还是有一些模棱两可的地方,虽然我主观上是支持保护隐私权的。 我也有隐私,但只要不是把我和家人的资料公布在网上,或者提供给某些混蛋, 以至于我和家人会受到严重的骚扰和恐吓之外,还是没有什么的。

朋友和一些相对比较可靠的人知道我的联系方式,是件好事吧。虽然我小时候曾经很傻的 想住到深山老林里去隐居。

个人认为:有限区域范围内的个人或家庭联系方式,算不上是隐私。 你的邻居知道你家的门牌号码;公司、学校拥有你的详细资料; 商家索取买家发货地址;快递员直接打你的手机; 参加团购的成员知道你的联系资料。。。

好吧,虽然我可能没有犯罪,但是我错了。我只是想偷懒才使用群发邮件的方式的。

另外居然有蛋疼的律师控告电信说“来电显示”损害了其隐私权。

  1. 你没有号码怎么打电话给他人;你拿到他人的号码,是否就侵犯了其隐私?
  2. 你打电话给他人,这他人没有知情权,无权知道是哪个混蛋在骚扰他?

另外也有人控告移动、联通公司所谓的“恢复”收取来电显示的费用是单方面修改合同、 强制消费行为。想都不用想,最终败诉。

现在好了,你可以关闭来电显示,每月省了 6 块还是几块钱。也就是说现在开通来电显示需要 每月多付几块钱,而这在以前是免费的。

我有一个很不希望相信的“阴谋论”:这起官司是电信或移动公司幕后主使的案件。

我对隐私权的概念还是有点不清晰,希望有人能写出清晰简洁的资讯出来,比如翻译关于隐私权 的论文和辩论过程之类,而不要像法律条文一样直接给我们模糊不清的强制性规定和结论。

p.s. 希望有生之年不要看见“非法持有他人隐私”的罪名或者大帽出现。

2010年8月15日星期日

【已结束】 关于团购庆祝 Vim 7.3 正式发布的 Tee

我在 Twitter 上随意说了句相关的 意向, 便有不少回应表示也愿意加入,我本想最好由某个懂行或者牛人来发起活动,我参加就好了, 不过目前看来,我只能自己扛起这个重担。

关于 Tee

初步设想:
正面 :印 Vim 的 Logo。 投票
背面 :印 :wq! 或者 :help! 命令,下面还印上版本信息 :version投票
右手袖子 :印 :version 信息。
颜色 :商家唯一指定白色。
P.S. 还有网友提议将自己的 vimrc 打上去,创意不错,但这是一此集体活动。 不过大家还是可以提议一些非常具有 Vim 特色的代码。

商家答应可以有 3 种不同的图案,但是考虑到实际操作太麻烦,包括下订单,印刷和发货都非常容易出错, 所以我们最好是尽量少的使用不同图案。如果有喜欢但是没有选择的图案,各位可以各取所需自行单独印刷。

参考:

Tee 的质量

商家是阿阳推荐的,他之前有在这家定制过,说是材料“比较厚,质量还不赖的”。
而商家说:“我们这只有一种220克的,是属于好的,差的么就是180 200克的。那二种我们没有在做的。”

关于费用

跟淘宝一个定制 Tee 的 商家 联系,50件以上的话 双面印刷最低能到 28.00 26.00 25.00 元/件(单面 25.00),目前有 50 多人, 如果有更大的数量级,估计还可以更便宜,到时候我再商量,40 件估计需要一周才可以出货; Tee 可以直接发到每个人手中,考虑到运费,我提议同城的统一由一个人负责签收并发放, 这样顺便还可以线下认识几个朋友,同城运费最终 AA 制;自己愿意单独付运费的不在此列。

如果看中这店家的其他 Tee,参加团购的朋友也同样可以以团购的价格购买,直接在 店家商品上拍即可,记得给商家说明情况,另外还要报上我的旺旺ID(请来邮件索取)。

周六我会公布所有同城信息,到时候希望同城统一签收的可以联系我。
除非专门指定,默认情况下,均发或到个人签收。
学校老师或学生会稍晚发货,以确保各位能在学校签收。

目前不支持快递到国外,如果有国内的地址,请使用国内地址。
到台湾的快递费是 35.00 元,3 天之内可以到。

目前还没有确定最终购买人数和打折尺度,而且费用收取方式上也还没有确定,大家可以自由选择 预付定金,或者我先垫资金的方式,都没有关系的。下周末等情况确定后我会公布收款方式, 请大家静候佳音。

费用收取方式主要采取支付宝收款,或者银行卡汇款。

店家提供的快递运费对照表:

运输方式 1公斤内 加重/公斤 运送到
快递 8.00 5.00 安徽
快递 5.00 2.00 上海,江苏,浙江
快递 10.00 8.00 北京,天津,河北,山西,辽宁,吉林,黑龙江,福建,江西,山东,河南,湖北,湖南,广东,广西,海南,重庆,四川,贵州,云南,陕西,甘肃,青海,宁夏
快递 15.00 ? 大陆其他地区
速运 35.00 ? 台湾
默认使用圆通快递,台湾地区使用顺风速运,3天内可以到达。

【已结束】 关于报名

为避免报名时间过短,或等待时间过长,初步计划报名截止到下周末,如果中途有事没有时间也没有关系, 只要确认购买,我可以预付费用的。

一旦确定购买名单,我们就开始下订单订货。

由于我第一次搞这样的活动,有经验的老师请一定多多指导。

注意 :如果确定要购买,请务必将你 需要的尺码邮件地址 ,实际的 收货地址邮编收件人姓名
最好还有即时联系方式,比如手机,快递可能需要。
请确认这些信息能直接联系到你,收件人能收到货。

如果在截止时间之前没有给出详细联系地址导致无法发货的,一律认为不参加这次活动,请谅解。

如果有些没所谓的小失误的话请多多包含,大失误我会尽力承担的。

活动结束语

这次活动过程几经波折,把我、团友,和商家都折腾的够呛。主要是由于我经验不足造成,事先的准备工作 也不够,导致有数次变更,甚至有些不尽如人意。

不管怎么样,报名活动总算是结束了,我这里不再接收任何报名,仍希望购买的朋友可以尝试 这个链接,运气好的话还可以团购的 价格买到。

最后:这样的人生经历一次就够了,谢谢大家。

2010年8月13日星期五

SQL LIKE 查询的一个问题

在做用户管理的时候,用户表(users) 有一个字段(dept)用来存储用户所在部门的信息, 字段的值一般是这样的,各级部门间使用横杠分隔:

XX宝-技术部
XX宝-技术部-数据仓库

我们的系统有一个根据用户所在部门进行过滤的功能,所以我们用了类似下面的查询语句:

SELECT * FROM users WHERE dept LIKE "XX宝-技术部%";

这样的性能还好,但是今天发现一个问题是,当有两个部门名称很相似,比如:

XX宝-CEO
XX宝-CEO办公室

这时在查询 XX宝CEO 的时候就会把 XX宝-CEO办公室 的用户也查询出来。

于是想到正则表达式:

SELECT *
FROM users
WHERE REGEXP_LIKE(dept, "^XX宝-CEO$")
OR REGEXP_LIKE(dept, "^XX宝-CEO-[\w\-]+");

合并正则表达式的另一解:

SELECT *
FROM users
WHERE REGEXP_LIKE(dept, "^XX宝-CEO($|-[\w\-]+)");

杯具的性能问题。

突然想到

SELECT *
FROM users
WHERE dept="XX宝-CEO"
OR dept LIKE "XX宝-CEO-%";

于是简单有效的解决了这个问题。

2010年8月1日星期日

用 gvim 比较 git diff

for Windows

参考 gist:502217

1. 在用户目录下的 .gitconfig 中加入:

[diff]
external = git_diff_wrapper.bat
[pager]
diff =

2. 创建 git_diff_wrapper.bat 文件放到 $PATH 目录下,内容为: 注意其中的 path\to\ 要改为 gvim.exe 所在目录。

path\to\gvim.exe -d "%2" "%5"

for Linux

参考 Git Diff with Vimdiff

2010年7月29日星期四

遍历字符的性能

  1. s.charAt(i)
  2. s.split("")[i]

Test

在 IE7, Firefox3.6.8, Chrome5.0, Safari5.0, Opera10 上测试, 除了 Firefox 之外,所有的浏览器均是第 2 种表达式更快速。

2010年7月23日星期五

使用 calendar.vim

最初看到明城 推荐使用 Vim Calendar 插件, 于是很小白的尝试了一下,然后就没有了然后。

最初尝试的过程已经基本忘记,恍惚记得在 Calendar 的日期上回车,窗户貌似在右侧窗口 打开的(后来发现我记错了,这是 Vimwiki-diary的支持);至于明城推荐设置的 ca 快捷键,后来才知道是与 text-object 冲突的。

再后来就用上了 Vimwiki,做个人 Wiki 之余,还用它的 diary 写日记。总体来说,Vimwiki 的 diary 是比较强大的,我甚至还提了几个被接受的建议。

但是随着使用的深入,发现通常 Wiki 项目下是不需要 diary 的,而 diary 也基本不需要 Wiki,把这两种整合在一起也许就是个错误。我们真正需要的是一个更强的 Calendar diary, 而不是 Wiki 附加的 diary 支持。

如果真的希望 Vimwiki 有 diary 的支持,我也希望这个 diary 和 Wiki 是相互独立的, Wiki 项目中无需 diary,diary 无需包含在每个 Wiki 项目里。

另外基于 Wiki 的原因,所有的 diary-wiki 文件都放在同一个目录下,当 diary 日渐增多, 目录变得臃肿起来也不是什么好事。

我需要的是一个更强的 Vim Calendar。基于这个想法,我便尝试着手增强 Calendar。 目前已经支持 :CalendarSearch 和更好的 diary 打开方式。更多的想法见 这里

2010年6月25日星期五

在 Vim 页签中打开文件

这两天折腾让文件在 Vim 的新页签中打开(类似 Firefox 等浏览器)的特性, 发现让文件在页签中打开有非常多的优点:

  1. 打开文件的速度更快(免去了启动 Vim 的时间)
  2. 占用内存等资源更少(单个 Vim 窗口比多个窗口节省资源)
  3. 任务栏更节省可用空间(不过 Windows 7 中还未支持任务栏多页签内容预览)。
  4. 编辑过程中文件间可以快速跳转,缓冲区也可以共享。

我参考前辈的方案,做了更 自动化的处理 脚本, 将其中的 edit.with.vim.tabs.reg 合并到注册表就可以了。如果想还原为用窗口打开的方式, 再将 edit.with.vim.window.reg 合并到注册表中。

这个设置会让双击默认编辑器为 Vim 的文件,或者右键 -> Edit with Vim 都将文件在页签中 打开。开始用着确实挺爽,右键菜单中也没有了那些动态增加进来的已打开的文件的菜单项。 不过后来又发现不止如此,连“用 Vim 比较”(Diff with Vim)的项也没了。

重装了好几次,终于搞清楚了一些东西。注册表的

[HKEY_CLASSES_ROOT\*\shellex\ContextMenuHandlers\gvim]
@="{51EEE242-AD87-11d3-9C1E-0090278BBD99}"

是关键项,他根据 gvimext.dll 来附加右键菜单的动态项,包括 Diff with Vim。 如果你不想有默认的新窗口中打开文件的“用 Vim 编辑 (&V)”(Edit with Vim), 就需要把上面这项删除,不过这也会殃及 Diff with Vim。

我实在没有特别好的办法,我在注册表中做了一个 "Diff with Vim" 的项,但是这个菜单命令 会针对选中的多个文件各自执行一次;而不是执行一次,并将多个选中的文件作为参数 一次传入。这个肯定也能做到的,参看 Vim 默认的行为,和 WinMerge 等就知道,只求高手来帮忙了。

我目前不希望没有这个选中多个文件并 Diff 的功能(虽然它连快捷键都没有), 所以只好保留了这个注册表项,为了避免快捷键冲突,只好修改了在页签中打开文件的 注册表项的快捷键。

或者用其他的文本比较工具,如 WinMerge,BeyondCompare。这样的话,直接删除上面的注册表项。

如果你有好主意,快来快来告诉我 : )

其他

另外给页签加上序号是非常有用的:

set guitablabel=%N.%t

尤其是在设置了这样的快捷键之后:

imap  :tabnext
nmap :tabnext
imap :tabprevious
nmap :tabprevious
imap :tabfirst
nmap :tabfirst
imap 2gt
nmap 2gt
imap 3gt
nmap 3gt
imap 4gt
nmap 4gt
imap 5gt
nmap 5gt
imap 6gt
nmap 6gt
imap 7gt
nmap 7gt
imap 8gt
nmap 8gt
imap 9gt
nmap 9gt
imap :tablast
nmap :tablast

更多,但是不推荐(因为跟默认快捷键冲突)的快捷键设置:

" [CONFLICT] back tag history
imap :tabnew
nmap :tabnew
" [CONFLICT] window shortcut key.
imap :tabclose
nmap :tableclose
imap :tabonly
nmap :tabonly

更新 (2010/6/26)

今天想折腾一下 gvimext.dll ,因为这个是问题的本源,只要将它里面的“用 Vim 编辑”(Edit with Vim)加上参数, 改成新页签中打开的方式就好了,而且选中多个文件进行比较,好像也必须使用动态连接库的方式实现, 于是找到了这个 gvimext.dll 它让 Vim 7 支持新页签中打开。试用了一下,感觉有点啰嗦了,它让新窗口和新页签打开文件的方式共存,并且快捷键 仍然设置在新窗口打开的菜单项上。不过里面带有源码,我们可以改成自己喜欢的方式。

参考链接

2010年6月20日星期日

Vim 自动补全成对的括号和引号

炫日分享了一个 自 动补全成对的括号 的脚本,【注】:原文代码中引号被转义成了中文引号,下面是修正后的脚本。

inoremap ( ()i
inoremap ) =ClosePair(')')
inoremap { {}i
inoremap } =ClosePair('}')
inoremap [ []i
inoremap ] =ClosePair(']')
inoremap < <>i
inoremap > =ClosePair('>')

function ClosePair(char)
if getline('.')[col('.') - 1] == a:char
return "\"
else
return a:char
endif
endf

经此启发我增加了对括号和引号更智能的补全支持, 不过中文全角的括号和引号目前无法通过映射来实现, 对于跨行、转义的符号对的支持也不佳,如果有好的实现也请告知 : )

  • OpenPair:
    1. 如果当前行的括号已经成对匹配,则自动补全右括号 (I)
    2. 如果左括号比右括号多,则自动补全 I(() (I() ((I) (()I
    3. 如果左括号比右括号少,
      I()) 原样输出,不自动补全
      (I)) 同上
      ()I) 同上
      ())I 自动补全:左括号较少,且光标之后字符串进行一次递归上面的条件
  • ClosePair:
    1. 如果光标之后是一个右括号,向右移动一列 (I) ((I) (I)) ()I)
    2. 否则原样输出。

代码见 gist: 449512

更新 (2010/6/24) 最后更新 (2010/7/9)

相关脚本

2010年6月16日星期三

在 Google Maps 的街景视图里看实况足球

我承认我标题党了,这只是我的一个 idea 而已,并没有实际实现。

前几天有新闻称日本要申办 2022 年的世界杯,承诺将以 3D 转播赛况,还以全息技术将赛况投影到足球场上, 任何一个足球场都可以模拟现场实况,并准备研发全息电视,把赛况以全息技术在家庭里播放。 而实际上,日本在某些音乐会已经使用全息技术的实际应用(X-Japan的 Art of Life 的 15:36 至 19:13 之间都是以全息技术 制作的演出,直接观看19:10,然后等几秒钟就会明白)。

我的个神啊,这是一种怎样的未来。

在看南非世界杯的几个球场街景视图时,我突然想到如果模拟实况足球游戏,根据比赛实况,将比赛情形在类似的视图中 展现出来,会爽到什么程度啊。

伊 丽莎白港

内 尔斯普雷特

p.s. 现在的 Google Maps 街景视图,比 Google Earth 的 3D 模型要爽要逼真,不过街景视图无法以 3D 效果看鸟瞰图。

延伸阅读:

2010年5月20日星期四

用 Google Code 管理与发布 Wiki

由于 Dropbox 的墙掉,https 协议访问 dl 或 dl-web 子域 的方法也随之失效,虽然可以通过修改 hosts 来继续同步文件,但是 Public 目录再也 不能输出文化了。

我之前 在 Dropbox Public 目录搭建的博客和 Wiki 系统 也无法在线浏览了,为了能够继续 辅助文化局输出文化,我便利用万恶的资本主义国家 的 Google Code 来为我们服务了。

由于可以继续使用 Dropbox 来自动同步私有文件,所以可以保持 .wiki 文件在 Dropbox 中,其他自动同步的软件也可以用来做类似的事情。

将 Vimwiki 的 path_html 修改为 Google Code 的某个 svn 或 Hg 目录:

let g:vimwiki_list = [{...},
\ {...},
\ {...},
\ {
\ 'path' : 'D:\My Dropbox\blog',
\ 'path_html' : 'D:\hotoo\blog',
\ 'html_header' : 'D:\My Dropbox\blog\template\header.tpl',
\ 'html_footer' : 'D:\My Dropbox\blog\template\footer.tpl'
\ }
\ ]

虽然 Vimwiki 目前的 toHTML 方法还不支持重新生成仅更新过的 wiki 文件,但是 svn 可以判断文件是否有真正被修改过。

另外 http://hotoo.googlecode.com/svn/wiki 目录存放的是 Google Code 的 Wiki 文件, 这里面的 wiki 文件无需通过 Vimwiki 导出 HTML,Google Code 会自动完成这一工作, 并可以通过 http://code.google.com/p/hotoo/w/list 浏览。而 Vimwiki 是 Google Code Wiki 语法的一个子集,所以基本可以天衣无缝的配合使用。

这也是不错的一个方案,除了需要 commit 之外,Google Code 比 Dropbox 的 Public 有过之而无不足,域名也是杠杠的。

另外不小心发现还有其他的托管方案,让防火墙筑的更高些吧,当局者把自己当猪圈养起来 比较好,做个专职的脑子又笨,目光又短浅的墙脚之猪也可以提高幸福指数的。

2010年5月13日星期四

让 Vim 支持 LOG 文件

日志(.LOG)文件的基本上无章可循,各成风格。所以一般都是在纯文本模式下查看。 以普通文本的方式显示日志,基本没有清晰度和阅读舒适感。

不过一般来说,日志中是会有日期时间(格式非常多样),错误产生的地址,行号, 列号,日志类型(错误(ERROR),信息(INFO),调试(DEBUG),警告(WARN)等)

据此,我为 .LOG 文件定义了一些语法着色的规则,将 log.vim 放至 $VIM\vimfiles\syntax(Windows) 目录,并在 $VIM\vim72\filetype.vim 中加入:

au BufNewFile,BufRead *.log         setf log

现在就可以在 Vim 中较清晰的查看 .LOG 日志了。

你也可以针对自己的实际情况,来自定义语法。