11
29
2010
0

snipMate表达式扩展补丁

本文来自依云's Blog,转载请注明。

snipMate 是Vim的片断扩展插件之一,介绍网上很多,实在不想Google的话可以看看这里,我就不多言了。

我经常会把一些网站链接连同其标题写到自己的wiki或者邮件中,于是有个这个snippet:

snippet link
	[`@*` `system('getTitle '''.@*.'''')`]${1}

扩展 * 寄存器(也就是X选择区)中的URL,并使用getTitle这个我自己用Python写的程序获取标题。这个snippet大多数情况下工作良好,只是偶尔会使Vim停止响应,只能Ctrl-C中止。今天在扩展 http://larrupingpig.zoka.cc/?p=197 这个URL时又遇到这个问题,实在受不了了,于是自己看源代码。`...`的扩展在这里:

	if stridx(snippet, '`') != -1
		while match(snippet, '`.\{-}`') != -1
			let snippet = substitute(snippet, '`.\{-}`',
						\ substitute(eval(matchstr(snippet, '`\zs.\{-}\ze`')),
						\ "\n\\%$", '', ''), '')
		endw
		let snippet = substitute(snippet, "\r", "\n", 'g')
	endif

问题就出在substitute中的substitute上。:help substitute()可以看到,其第三个参数中有些特殊字符,比如前边那个网页标题中的&,会被特殊对待。

知道问题出在哪儿了,也就有改的办法了,我在Google Code上报告了bug,并提交了补丁。但看看那么多的issue和Github上的Pull Request,我感觉被采纳的可能性好小啊。。。

Category: Vim | Tags: vim | Read Count: 7461

登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter

| Theme: Aeros 2.0 by TheBuckmaker.com