蓝天,小湖,湖水中一方小筑

让win下的vim支持非等宽字体

最近vim升级到了7.3,很喜欢它的相对行号功能(:h rnu),于是就升级了,然后就毫无悬念的出问题了~ 问题的原因是之前用的vim72是个改版,加上了对非等宽字体的支持,于是在vim中可以将guifontwide设置为YaHei Consolas的混合字体,不过这次升级后没找到原作者的网站,只好自己动手了。 改动在os_mswin.c中,进去后直接找mono,会看到一处注释说忽略非等宽字体,把下面那行注释掉就好,这是diff文件: diff -r 96b2b1cca7cd src/os_mswin.c --- a/src/os_mswin.c Mon Aug 23 12:55:47 2010 +0800 +++ b/src/os_mswin.c Mon Aug 23 13:05:17 2010 +0800 @@ -3288,8 +3288,11 @@ #ifndef FEAT_PROPORTIONAL_FONTS /* Ignore non-monospace fonts without further ado */ + /* + * hzmangel: I need non-monospace fonts! if ((ntm->tmPitchAndFamily & 1) != 0) return 1; + */ #endif /* Remember this LOGFONT as a "possible" */ 然后直接在vs2010编译环境中用bigvim.bat来编译vim即可,如有需要可以对其中的参数进行修改。写完,收工~ Update at 2010-09-18 在xbeta的帮助下试着编译了一个可以支持取词的版本,用的是这篇文章的方法 <http://xbeta.

Merge Two Hg Repositories

最近在折腾手头上的小项目,发现有一个工程已经建了Hg的版本库,但是想把它给丢到现有的版本库中以方便管理。假设现在用的版本库叫A,需要被merge过来的版本库 叫B,于是有: A: hg pull –f <repo B> A: hg merge A: hg ci 关键的地方是在那个- f处,如果没有加这个参数会报两个版本库不同源而不让你这么折腾。([via](http://stackoverflow.com/questions/12843 /how-to-combine-two-projects-in-mercurial))

Simple Process with Mercurial Build-in Server

在putty里面用vim用够了,于是在远端机上弄了个Hg的版本库,平时在本机做开发,然后写完直接push到远端编译。不想折腾太多的东西,所以就用的是Hg自带 的web服务器。首先在远端某个目录里面新建一个Hg版本库 hg init 然后就可以在远端开服务了,为了少惹麻烦,用了个3456的端口 hg serve -p3456 然后在本地就可以找个目录直接把那边的东西拷过来了 hg clone <host> <local_dir> 使用hg clone的好处是在目录的.hg/hgrc文件中已经存放有默认提交/连接的地址,以后在使用hg pull或者hg push时不需要额外提供地址了。 [paths] default = <host>:<port> 在本地做过修改后,需要check in到版本库中才能成功的被push到远端。如果不加-m参数则会弹出一个编辑器让你输入log hg ci <-m "log message"> 在push的时候需要注意一个问题。为了安全起见,在默认情况下,Hg对于push是有一些限制的,首先需要SSL,其次需要提交改动的用户有权限。不过由于是自己使 用嘛,所以可以在Hg的配置文件中把这两个限制取消,即在hgrc中加入以下几行 [web] push_ssl = false allow_push = * 根据自己的需求确定这几行加的位置(全局的配置还是某项目相关的配置)。添加过后即可在本地push改动到远端了。如果那个url已经添加到hgrc文件中,则不需要 指定url参数(嗯,适合我这种懒人)。 hg push <url> 在远端此时只是把改动更新到版本库中,并没有把改动真正放到代码中,所以还要在远端运行一下更新命令 hg up 然后,就能编译了,于是一次简单的流程就完鸟。如果在远端有改动,在check in到版本库后,可以在本地使用pull命令把改动同步过来。 hg pull <url>

Vim居中光标所在行

曾经用Emacs的时候发现那个Ctrl- L特别好用,看到光标在下面了按一下就把那行提到屏幕中间来了,于是想在vim中找类似的功能,想想也该有嘛,所以就找到了,而且有三条~ zz: 将当前行置于屏幕中间(不是转载…) zt: 将当前行置于屏幕顶端(不是猪头~) zb:底端啦~ 还有一条就是移动光标所在行的位置,就是说,比如我光标在第10行,我想光标不动,但是所在行向上移,ctrl-e啦,然后向下的话,ctrl-y~

Vim中的大小写切换

在vim中,通过v选中的文字可以用u切换到小写,U切换到大写,~在大小写之间切换,但是如果需要对选定的词做大小写操作,就需要用到%s中的\u,\U,\l和 L,\u是把后续的字符串第一个字符转成大写而\U是把后续的都转成大写(upper case),\l和\L是转成小写(lower case) 例如如果要把所有行首的单词首字母大写后面的所有字母都小写,可以这么折腾: :%s/^\(\w\)\(.*\)/\u\1\L\2/g 需要注意的一点是,如果\L和\U后面跟有别的字符串,也会被弄成大写,如对字符串abcdefg运行 %s/abcd/\Uefgh/g 的结果就是 EFGHefg,这一点在使用反向引用\1, \2等的时候比较麻烦,例如我\1取到的是一个单词,我需要把它们都大写化了,然后后面的\2也会被变成大写。刚好下午 试的是给变量改名字,在需要变大写的单词后面有一条下划线,于是就这么用了: :%s/\([a-z]\)\(.*\)/\U\1\l\2/g \l 对下划线没影响,刚好用来抵消 \U 的作用,满好,至于别的情况,暂时没想法……

Vim中的非贪婪匹配

折腾了一个HTML文件,想把标签中一些不要的属性去掉,直接的话就直接匹配到行末了,想想vim这么高级的东西应该支持非贪婪匹配吧,于是在google和自带帮助 的指引下折腾出来了。其实很简单,在:h non-greedy一条中有说,使用{-}来匹配,和*的功能类似,于是乎就有: 默认贪婪匹配到行末:/<a.*> 使用非贪婪匹配本标签:/<a.\{-}>

Error 0x800704b8 While Installing IPv6

最近想在自己机器上装个v6的协议栈做开发,但是单位装机的thinkpad上居然没有v6的协议栈,真郁闷,只好自己装,可惜在ipv6 install的时候,给直接报了个错,Error 0x800704b8,这回可是碰到问题了,一开始以为是机器权限的问题,可是问了旁边那哥们,他说他装上了,用的某条命令后,但是命令忘了,于是 google 之。 其实,碰上这个问题的人很多,那条命令也很简单。问题是windows安全数据库出问题了,Windows安全数据库,在%WinDir%\Security\dat abase里,具体存放的内容,暂时没时间去找,呵呵。Windowz提供了一个 esentutl 的工具用以检查修复这玩意。具体用的到的命令是 esentutl /p %windir%\security\Database\secedit.sdb ,/p表示修复,后面是具体的数据库,然后再安装,于是就行了。 汗Windowz,好歹也说清楚点出错的地方啊……

Org mode under WinEmacs

虽然前几天[折腾上了muse](http://hzmangel.cn/2008/05/26/using-muse-in-emacs-under- windowz/),但是又在网上看到了另一个org mode,而且以前也看别人提过一次,说它的表格功能很好用,所以心又痒了,于是乎,下载,安装。 和muse一样,解压后,在配置文件中加上两行就行了,一行指定org的el文件存放的位置,另一行设定对于org后缀的文件,使用org-mode打开。 新建一个foo.org的文件,然后开写,用的也是类似outline的模式,而且对每级都有不同的颜色,好看。比较方便的是光标放在哪个标题栏上按<TAB& gt;可以控制此级标题的显示与隐藏,很方便的一个功能。还有就是在它下面可以用-/+/*来显示无级列表,用1.来显示编号的列表,写完一个列表后按<M-C R>,它会在下面给添加一个同级的列表,如果是无序的则加一个标记,如果是有序的则数字加1,然后按<M-LEFT>和<M-RIGHT&g t;可以控制列表缩进的层次,说真的,比Word下那让人莫名其妙的列表层次要好多了。它还支持导出,<C-c><C-e>后会有一个buf fer告诉你有啥命令可用,可以导出的格式还是满多的,不过目前我的需求,大概就是HTML了吧,还没弄明白能不能给代码加高亮,过过再折腾吧,最近先用它来记笔记。 一会再看看用它来做一下TODO。 再说说表格,由于目前还没怎么用到表格功能,所以只是从教程中感受到了它的方便与强大,而且还有计算功能,过段时间再折腾吧。 发现自己已经开始逐渐喜欢上了这个邪恶的Emacs了,呵呵。

vim中删除包含某关键字的行

今天在BBS上逛,看到篇文章不错,但是我只要它中间某几行,先试的是g/XXX/p,但是觉得它输出的内容不好看,我也不知道怎么弄到别的缓冲区中去,于是想把不包括这个关键字的行给删了。想找一个类似grep -v的命令,查了一下,可以用g!/XXX/d,那个!表示不包含,最后的那个d表示删除,不错,嗯。

TortoiseHg中设置diff工具

装了个TortoiseHg用来控 制本地的一些代码,自然需要配置一下diff的工具,它默认的visusal diff工具刚装上点了没啥反应,于是上网找。它的安装包中倒是带了一个kdiff3, 但是用来比较两个文件比较不好用,主要是自己想用vim做diff,所以需要配置一下。去它的wiki转了一圈,知道是要配置TortoiseHg安装文件夹下的Me rcurial.ini文件。首先需要改[extensions]节的配置,把使用hgext.extdiff = !的感叹号去掉,表示启用这个扩展,然后在下面[ extdiff]一节中,配置一下cmd.XXX,其中XXX是将来需要在上面设置的命令的别名,然后设置好cmd.XXX=<Command>,如果需 要参数,则要加上opts.XXX=<args>。参数默认中有要比较两个文件名,所以不需要加上文件名。例如如果需要使用vim做比较,我是这么写的: cmd.vimdiff = [path /]\gvim.exe opts.vimdiff = -d 然后可以在图形界面里面设置,也可以在配置文件中编写,里面会列出在cmd中写的命令,选择好后点visual diff就可以了。它会把当前工作版本和版本库中的版本做比较,目前还没有试怎么与特定版本做比较,用到再说,嗯。