Robot5's Blog
百度空间 | 百度首页 
 
文章列表
 
2009年12月05日 星期六 20:43
 
2009年11月23日 星期一 20:52
 
2009年11月13日 星期五 18:46

我们知道自Delphi2009之后就已经开始支持JSON了,但之前的各Delphi版本就需要专门的JSON库了!

Delphi Web Utils https://sourceforge.net/projects/is-webstart/
JSON Delphi Library http://sourceforge.net/projects/lkjson
JSON Toolkit http://www.progdigy.com/?page_id=6

json官方 http://www.json.org/json-zh.html

Delphi 2010 JSON程式設計
http://gordonliwei.spaces.live.com/Blog/cns!CCE1F10BD8108687!3766.entry

 
2009年11月13日 星期五 17:56

       在国内,“前端开发”这个名词逐步被熟知,“前端开发”这个职位越来越被企业重视,表明国内的Web前端开发正在慢慢走向成熟,更好地学习提高自身的前端开发技术能力是必须的,整理8个国内优秀的前端开发设计网站给大家,也希望能看到你推荐的中文前端开发网站和社区。

1, 蓝色理想

http://www.blueidea.com/

诞生于1999年10月的蓝色理想,以建设网站设计与开发人员之家为宗旨,以介绍网络开发技术与网站创作设计交流为主要内容,是国内最大的设计类站点之一。


2, W3School

http://www.w3school.com.cn/index.html

W3School是最完善的在线教程站,包括 XHTML教程、XML教程JavaScript & AJAX、网站构建等前端开发人员必备的系统性学习教材。


3, 前端观察

http://www.qianduan.net/

前端观察是一个纯粹的前端技术分享网站,本站的目的是为前端技术人员提供所需的资讯及资源,挖掘国内优秀的原创设计及内容,加以高度的整理。


4, CSS88

http://www.css88.com/

CSS88专注前端开发,关注用户体验,是一个资深的Web前端开发站,不仅传播前端技术,更重要的是关注前端设计从业者的生存状态,有多个开放的前端交流群。


5, CssRain

http://www.cssrain.cn/

CssRain实用的前端技术信息,原创和搜集前端开发中细节的内容,一本jQuery新书推荐<<锋利的jQuery>>你值得拥有。


6, 我爱CSS

http://www.52css.com/

我爱CSS,致力于Web标准在中国的应用和发展,提供CSS和XHTML学习教程。


7, iJavaScript

http://www.ijavascript.cn/

iJavaScript致力于JavaScript信息的共享,提供JavaScript基础教程、AJAX技术及JavaScript框架的学习和应用。


8, OKAJAX

http://www.okajax.com/

OKAJAX是以ajax技术为主,涉及网站建设、网络编程、网页设计、网页特效、服务器技术、资源下载等的综合性网站。


这是个人的一些整理分享,如果还有你认为非常优秀的前端开发设计资源类网站没有出现在列表中,请留言告诉我,我会及时地对此进行补充。



转自【http://www.bbon.cn/2009/11/8-excellence-front-end-development-and-design-chinese-sites.html

 
2009年11月13日 星期五 09:37

http://altd.embarcadero.com/download/RADStudio2010/radstudio2010UpdatePack_Nov09.zip
ftp://ftpd.embarcadero.com/download/RADStudio2010/radstudio2010UpdatePack_Nov09.zip

This one claims to be a crack for RAD Studio 2010 with Update 2 installed !
http://www.onlinedisk.ru/file/265456/

========================================================================

http://www.onlinedisk.ru/file/266054/

Don't install Update 1. It only contains licensing changes, not real fixes.


 
2009年11月09日 星期一 16:25

陀螺效应
  这是一个很奇妙的物理现象,如下图,一个转动的物体,当在某一点施力,施力的效果会出现在沿转动方向 90 度的地方出现,而且转动的物体会有保持原来状态,抗拒外来力量的倾向,也就是转动中物体的轴心会极力保持在原来所指的方向。像枪管中的膛线使子弹高速旋转以保持直进性就是运用陀螺效应,直升机高速旋转的主旋翼同样的也会有陀螺效应产生,控制方式也必须考虑这种力效应延后 90 度出现的陀螺效应。

陀螺仪的功用
  直升机飞行的基本原理是利用主旋翼可变角度产生反向推力而上升,但对机身会产生扭力作用,于是需要加设一个尾旋翼来抵消扭力,平衡机身,但怎样使尾旋翼利用合适的角度,来平衡机身呢?这就用到陀螺仪了,它可以根据机身的摆动多少,自动作出补偿讯号给伺服器,去改变尾旋翼角度,产生推力平衡机身。以前,模型直升机是没有陀螺仪的,油门、主旋翼角度和尾旋翼角度很难配合,起动后便尽快往上空飞(因为飞行时较易控制),如要悬停就要控制杆快速灵敏的动作,所以很容易撞毁,现在已有多中直升机模型使用的陀螺仪,分别有机械式、电子式 、电子自动锁定式。

直升机的抬头现象
  当直升机快速前进时,旋翼一偏离 6 点和 12 点钟方向时,两支旋翼对空气速度就会不一样,而在 3 点和 9 点钟方向产生最大速度差,假设旋翼翼端转速 300km/h,机体前进速度 100km/h 时,以 R/C 直升机顺时钟方向转动的旋翼来讲,3 点钟方向对空气速度200km/h ( 后退旋翼 ),9 点钟方向对空气速度 400km/h(前进旋翼 ),产生 3 点和 9 点钟方向的升力差,因陀螺效应的关系,力效应发生在 6 点和 12 点钟方向产生抬头现象,此种抬头现象不论主旋翼是顺时针或逆时针转动皆会发生。

翼端速度与离心力
  直升机靠著主旋翼高速回转时所产生的离心力来悬住机体。离心力是水平方向的力而机体重力是垂直方向的力,实№飞行时两者几乎呈 90 度,所以直升机飞行时其主旋翼所产生的速度和离心力是非常大的。
在这里有一个公式可算出翼端速度和离心力:
翼端速度:
V = 2 * 圆周率 * R * 60 * RPM
V = 旋翼翼端速度(公尺/小时)
圆周率 = 3.14(大约值)
R = 旋翼头中心到翼端距离(公尺)
RPM = 旋翼每分钟转速
以30级来算
停悬 1500 RPM 翼端速度= 2 * 3.14 * 0.625 * 60 * 1500 = 353km/h
上空 1800 RPM 翼端速度= 2 * 3.14 * 0.625 * 60 * 1800 = 424km/h
速度够吓人吧 !
离心力:
F = W * R * ( 2 * 圆周率 * RPM / 60 )* ( 2 * 圆周率 * RPM / 60 ) / G
F = 离心力,也就是单边旋翼头承受的拉力 (公斤)
W = 旋翼重量 (公斤)
R = 旋翼头中心到旋翼重心距离 (公尺)
G = 重力加速度 ( 9.8 公尺/ 秒 平方)
以30及来算
停悬1500 RPM 离心力=0.1 * 0.355 *(2*3.14*1500/60)的平方/9.8 = 89 公斤
上空1800 RPM 离心力=0.1 * 0.355 *(2*3.14*1800/60)的平方/9.8 =129公斤
可见旋翼头要承受多大的拉力
以上只是30级的数据,60级的数据更大

地面效应
  当直升机接近地面时会产生地面效应,直升机离地滞空时,旋翼把空气向下抽,因此旋翼和地面之间的空气密度变大,形成气垫效果,浮力会变佳,离地越近,效果越佳,但是因为空气被压缩,无处逸散而产生乱流,导致停悬的不稳定,所以R/C直升机在接近地面时会呈现不稳定现象而比较难控制,产生这种气垫效果的高度大约是旋翼面直径的一半左右。

反扭力
  高速转动的主旋翼,有一定的速度和质量,除了会产生陀螺效应外,更有反扭力的产生,尾旋翼主要的功用就是平衡反扭力使机身不自转,但现在的 R/C 直升机均采用可变攻角形态,油门的加减,攻角的变化 ...等因素使得反扭力千变万化,尾旋翼产生的平衡力也要跟著快速变化,以保持机身的稳定,现在的 R/C 直升机采用各种的措施来平衡瞬息万变的反扭力。直升机的反扭力可分成两种:静转距和动转距。两者的特性不同所采用的平衡方法也不同。

1.静转距

静转距和旋翼攻角,旋翼转数有关,两者的大小都会对静转距造成影响,而且静转距是随著旋翼攻角,旋翼转数的产生而持续存在的。旋翼 +9 度 1800rpm 和 +9 度 1500rpm的静转距不同。而 +9 度 1800rpm 和 +5度 1800rpm的静转距也不同。当操作直升机上升下降时, 旋翼攻角,旋翼转数都不断的在变化, 静转距的大小也不断的在变化。所以必须不断的变化尾旋翼攻角来矫正。静转距以尾旋翼连动 Revolution Mixing(也叫做 ATS )来矫正,在较高级的遥控器上都拥有多段式的 ATS,以因应不同的攻角,油门曲线组合。

2.动转距

顾名思义,动转距是"动了"才会产生的转距。直升机从停悬加油门到最高速的"过程"中,动转距就会产生,动转距的大小决定在加速过程的快慢,停悬加油门到最高速花 2 秒钟比花 4 秒钟所产生的动转距大,一但到达最高速时,动转距就消失了。

以力学来讲,如静转距是因速度而产生,那动转距就是因加速度而产生,克服动转距以 ACC ( Acceleration Mixing ) 或陀螺仪来矫正,ACC是早期陀螺仪不普及时代的产物,是一种主动式的矫正方式,预先在发射机设定连动值,但因影响动转距的因素实在太多,难以预先设定一个适当的矫正值,在陀螺仪普及后就没人使用了。现今有些遥控器仍保留此项功能,使用陀螺仪时必须关闭 ACC,否则陀螺仪和 ACC两种修正系统会相冲突,导致不正常的修正。

陀螺仪虽然是一种被动式的修正方式,但是总比人工修正快多了。而陀螺仪的优劣也是决定在反应速度,一般机械式陀螺仪的反应速度大约 70 ms,压电式陀螺仪大约 10ms,普通伺服机转 60 度 要 200ms ,好一点的伺服机约 100ms ,所以使用压电陀螺仪时, 使用高速伺服机才能发挥压电式陀螺仪的功效。

尾旋翼联动(evolution Mixing )陀螺仪的调整

静转距和动转距虽是不同类型的反扭力,但仍会对 ATS 系统和陀螺仪造成微量的相互混淆。所以调整 ATS ( Revolution Mixing ) 前,必须先把陀螺仪感度尽可能的调低。

调整ATS前,先保持机体停悬,如果尾舵会偏向,把机体降落,调整尾舵拉杆长度或用内部微调 ( SUB TRIM ) 矫正,使停悬时尾舵不会偏向,再来调整 ATS ( Revolution Mixing )尾部连动,因为陀螺仪对静转距亦会有微量的修正作用,所以要先尽可能的调低陀螺感度,此时要注意有些陀螺丁改变感度时,尾舵中立点会稍微改变,此时先用外部微调修正尾舵偏向,停悬后慢慢加油门上升,观察尾部偏向,加减 REVO UP 值矫正之,要慢慢加油门的原因是要把动转距 ( 加速度值 ) 减到最小.以减少动转距对 ATS 系统的影响,减油门下降也是一样的做法,以 REVO DOWN 矫正偏向,直到停悬,加减油门上升下降时,尾舵都不会偏向,然后再加大陀螺仪感度,此时陀螺仪感度尽可能调大,感度只要不会大到引起尾舵左右晃动即可,此时可得到最大的尾舵修正能力。

机头锁定式陀螺仪

传统式陀螺仪对动转距有不错的修正作用,但对静转距就没辄了,其他类似静转距的作用力诸如侧风等持续的作用力,对传统陀螺仪来说并无法产生足够的修正作用。这也是装了传统陀螺仪以后还是要做上下跟轴连动调整、侧风时要带尾舵的原因。

机头锁定式陀螺仪不但对瞬间短暂的动转距有修正作用,对静转距等持续的偏向力也有修正作用,因为它会"记住"现在机头是朝哪个方向,直到你打尾舵改变方向为止。因为它能感应到引起偏向的所有外力,也就是机头一偏向,陀螺仪马上感应到而送出修正讯号,直到机头回到原来的方向为止,所以在侧风停悬、侧面飞行、后退飞行、侧面筋斗等尾部是锁定在一个方向,完全不用操纵者做尾舵的修正动作。

机头锁定式陀螺仪和传统式陀螺仪的主要差异在於对静转距的感应能力,可做以下试验,用手转动机身,无论你把机头转得多慢 ( 即转动时的加速度值小到几乎只剩静转距 ),机头锁定式陀螺仪都有办法感应得到而做出修正动作,而传统式陀螺仪一但机头转动时慢到一定速度 (即 加速度值小於一定数值 ),就感应不出来了。

 
2009年10月30日 星期五 02:10

1.首先安装后,有一个180天的试用期。

2.在180天试用期即将结束时,使用下面的评估序列号激活Svr 2008 R2 可以重新恢复180天试用期

Windows Server 2008 R2 Web: KBV3Q-DJ8W7-VPB64-V88KG-82C49

Windows Server 2008 R2 Standard: 4GGC4-9947F-FWFP3-78P6F-J9HDR

Windows Server 2008 R2 Enterprise: 7PJBC-63K3J-62TTK-XF46D-W3WMD

Windows Server 2008 R2 Datacenter: QX7TD-2CMJR-D7WWY-KVCYC-6D2YT

3.在180天试用期即将结束时,用“Rearm”后,重新输入上面的序列号,重启电脑,剩余时间又恢复到180天。微软官方文档中声明该命令只能重复使用5次。

4.上面的方法5次后,此后将无法再次使用。就要进行下一步,修改注册表中的一处键值(SkipRearm),以后就可以再次使用“Rearm”的命令,这个键值总共可以修改8次。

5.因此……。

重置工具下载

http://hi.baidu.com/intldev

 
2009年10月23日 星期五 22:04

一、论坛

http://www.5irc.com
http://www.5imx.com
http://www.mx3g.com
http://www.rcmania.hk

二、厂家

亚拓 http://www.align.com.tw
雷虎 http://www.tiger.com.tw
E-SKY http://www.twf-sz.com
华科尔 http://www.walkera.com
TSA http://www.tsamodel.com
Gaui http://www.gaui.com.tw
Spektrum RC http://www.spektrumrc.com

天蝎星 http://www.scorpionsystem.com
http://www.hyperion-world.com/

电池:
ACE
AKE http://www.akepower.com 普遍反映不怎么样
Fullymax

MAXPRO http://www.maxpro.cn

三、代理

伟高模型 http://www.waigohobby.com
代理产品:Futaba, Sanwa, OS Engines, Hirobo, Yokomo... 太多了不一一列出来了,可以到伟高的网站上去看!

冶旺国际 http://www.a1-hobby.com.cn
代理产品:Hyperion, Scorpion Systems

呵呵,不是全部!

 
2009年10月16日 星期五 11:29

相信很多人在网上购买所谓香港行货的电子产品吧,奸商们都会称带有香港商铺的机打发票!但要提醒大家一点,这些机打发票不一定就是真的香港某某商铺的正规发票,多数是奸商们自己买来的假发票!

现在网上卖的所谓香港行货多数发票是出自丰泽、镭射、张毛记(CMK)这三家,香港的发票都是各家自行设计的这点不象是内地!

如何鉴别这些假发票成为消费者维权的重点,我来介绍一下我个人的一些经验吧,希望对大有点帮助!

一、发票上的地址及电话号码。假发票印得地址和电话都自己编的。如香港区号是00852假得会成别的号码或把电话改成别的。
二、部分销售商支持通过电话或电子邮件核实发票真伪。如丰泽可以通过邮件核实,就算是不能邮件核实大家可以装个skype或别的网络电话去核实一下,也不贵的。
三、通过香港知识产权署查询哪些商铺是正版正货承诺的商铺。网址下附!

知道以上三点,就不难识别出假发票了!下边是部分香港公司的网站,供大家去核实之用!

香港知识产权署网站 http://www.ipd.gov.hk/chi/promotion_edu/no_fakes/nfretailer.htm
此页面是 参与正版正货承诺的商号 的列表。

张毛记(CMK)网站 http://www.cmk.hk
丰泽网站  http://www.fortress.com.hk
镭射网站  http://www.citicall.com.hk
百老汇 http://www.ibroadway.com.hk
中源 http://www.cyeshop.com
吉之岛 http://www.jusco.com.hk
泰林 http://www.tailin.com.hk

 
2009年10月08日 星期四 15:00

http://installers.codegear.com.edgesuite.net/update/radstudio/7.0/Update1/Update1.exe

Delphi Distiller 1.77
http://sites.google.com/site/liteapp/
Don't install Update 1. It only contains licensing changes, not real fixes.

先不要安装Update1,不是原有的licensing就会失效!

C:\Program Files\Embarcadero\RAD Studio\7.0\bin\DisableIDEUpdateCheck.reg - 关闭更新检查  
C:\Program Files\Embarcadero\RAD Studio\7.0\bin\EnableIDEUpdateCheck.reg - 打开更新检查

 
2009年09月28日 星期一 21:33
 
2009年09月20日 星期日 21:30


出处: PConline  作者:xbeta  鸣谢:VIM@newsmth  2006-09-28
  2005年5月,我开始用VIM。此后渐入佳境,原来因版权自律而放弃盗版UltraEdit的遗憾一扫而空。并且,从VIM我才体会到,什么才是真正的编辑利器。在
善用佳软

其他论坛发文,我都是先在VIM中输入,并方便高效地编辑好格式,再贴到网上。而我的通讯录、记事、读书笔记、工作记录也是在VIM中完成的。包括一些文
档、数据的处理,让VIM过一下,也会提高不少效率。一句话,自用VIM以来,对它迷恋日深,几乎要超过Total
Commander。但是,正如善用佳软及论坛发文所提,我大力推荐“用IrfanView/XnView代替ACDSee、用7-zip代替
WinRar/WinZip、用GIMP代替PhotoShop”,但并未推荐VIM代替UltraEdit。这并不意味着VIM不能胜任,恰恰相反,如
果说IrfanView等替代品比原共享软件还有些差距的话,VIM则远胜UltraEdit。不推荐的唯一原因是,VIM对初学者有点难。
  
  但今天仍写了此文推荐给大家。原因有二:其一,编辑大人选定了题目,要向大众宣讲VIM和Emacs,这种勇气鼓舞了我。其二,已发两位高手的文章(
王垠之《Emacs是一种信仰!世界最强编辑器介绍》

Dieken之《程序员的编辑器——VIM》
)可能会吓住一些对它们产生了兴趣的人,对此我要做些修正。
  
  因此本文内容有二:一是帮新手体验VIM。这部分有些象实验教程,多用实例,且行文风格尽量傻瓜化,以便于新手(包括以前从未听说过VIM)可以照我的操作,一步步体验VIM。二是介绍我的应用,即VIM如何便利我的日常工作和生活,而非编程。
  
1 对VIM的基本介绍
  
  一句话介绍就是:VIM是一个超级超级强大的文本编辑器。它和Emacs是一个数量级;而我认为,比UltraEdit、Editpad、
EmEditor要高一个(至少半个数量级)。如果你有兴趣,不妨一读《程序员的编辑器——VIM》,以便于对VIM有更详尽全面的理论认识。
  
  要点1:VIM及前身VI,历史悠久(可能比多数读者的年龄更大),经历了几十年的考验和发展,值得信赖。
  
  要点2:VIM有模式。通俗地做一下对比。notepad无模式(或称为只有一种编辑模式),你按下j,就是在正文中输入j;要保存,就要ctrl+
s;要下移一行,就要↓或鼠标。而在VIM中,打开一个文件后,并不处在编辑模式,而是Normal模式,此时你按j,VIM并不认为你要在正文中输入
j,而是代表光标下移一行。此时按i表示进入insert模式,即编辑模式,即notepad的模式。编辑模式按Esc退回normal模式。
normal模式下按:进入命令行模式,用于输入较复杂的命令。比如:w代表保存文件,:e
a.txt代表打开文件a.txt。即VIM可以不用鼠标、方向键、菜单、Ctrl、alt……发出命令。因此,以下的体验中切记进入正确的模式:Esc
到Normal;Normal下i到编辑;Normal下:到命令行。再说明一点是:文中:打头的是命令行模式,此外多数Normal模式。
  
  要点3:复杂对抗复杂。VIM有的命令行很吓人,长长一串字符恍若天书。这些貌似复杂,实际上无非是一些简单命令的组合而已。借助于此,VIM用户可以实现非常复杂的需求。如果你没有这样的需求,就无须理会它们。
  
  要点4:一能百能。这一点是Unix或命令行风格软件的显著长处,经过实用可以深刻体会。本文尽管有一些例子,但它运用之妙,存乎一心的感觉,仍未能
充分展示。这里先打个比方,如果windows下某软件号称能炒菜,那意味着你点一下菜单,菜就做好了——这就是易用哲学。到底怎么做,你是没有多少发言
权的,而是由软件开发者固化。而如果VIM说能,那它就是有一个“炒菜”命令,你可以把这个命令与原有的“原料”“数量”“火候”“风味”“灶具”命令结
合在一起用,甚至在它前面加上“买菜”“洗菜”,后面加上“装盘”“洗碗”做成一个自动脚本,在合适的情况下自动执行。
  
  要点5:无限灵活,个性由我。你只要有具体需求,VIM几乎都能满足。因此不同人的VIM是不一样的,即,把下载来的VIM配置成自己的VIM。
  就此打住,开始体验之旅吧!
  
2 下载和安装
  VIM是跨平台的。在Windows下,我们用的是gVIM for
windows版。最新的是7.0版,下载包约8MB,完全安装后约20MB。
  注:体积太大?你如果是高手,完全可以把不用的文件删除(包括帮助文件,它是我见过的软件中最好的帮助),精简后的体积可以不到2MB。或反之,仅下
载一个gVIM.exe(1.5MB)就能运行。但对于这次体验,鉴于第一次使用,建议全部按默认项安装,这样才能达到文中预想的结果。
  
PCOnline下载

官方下载
  
  安装,基本上,一直Agree、Next就行了。我通常是装在d:\program
files\VIM下。
  可参见
  

  

  

  

  

  

  

  

  
3 体验之旅
3.1 初见界面

  安装完成后,按提示打开readme,你将看到
  

  或自行打开桌面的快捷方式,也可直接运行d:\program
files\VIM\VIM70\gVIM.exe,你应该看到如此界面:
  

  什么?难看?土?我第一次见到它也是这种感觉,现在却只觉得亲切。
  再一点,你有没有奇怪它是中文界面?难道我给你下载的是汉化版?会不会捆绑流氓插件啊?你如果真这样想,我只能叹息无语了。
  
3.2 试读html
  请把此网页保存为htm,比如test.htm,然后用VIM打开它。暂时用菜单吧!结果可能是这样:
  

  平平无奇,是吧?因为它是一个标准的VIM,并且是性能优先,视效忽略的VIM。无妨,请进入命令行模式(就是按一下冒号,注意是英文冒号:),注意到最下面一行的变化了吧。再输入sy
on再回车。是不是有颜色了?它应该看起来象这个样子
  

  重要提醒:为简化起见,下文将用
  :sy on
  表示(先确认在Normal模式,如不确认,请按几次Esc)你先按:进入命令行模式,再输入sy
on,再回车。
  补充说明:sy表示语法加亮,on当然是打开。:sy
clear表示取消加亮。
  
3.3 改头换面
  体验VIM就要按VIM的思路,所以我们要把gVIM改回VIM的本来面目。
  对了,如果你认为它的界面很土,请更要多看一眼当前的样子,因为下面的操作后可能会更土!
  执行如下命令
  :set go=
  这时的VIM应该是
  

  不要大惊小怪,不就是菜单和工具栏不见了嘛?VIM中是不应该用到它们的。
  补充说明:set表示一般性设置;go是gui
option的缩写,就是界面;等于空就是什么都没有
  再输入半条命令(先不要回车)
  :colo ev
  然后,按一下tab键。是不是自动补全为evening了?VIM是非常聪明的(但是不会象MS
Word那样自做聪明)。
  然后你回车,看到了什么?
  

  天色全黑了?没错,现在是evening嘛。
  补充说明:colo就是设置调色方案。VIM自带了近十种调色方案,当然你还可以在网上下载更多,或改编自己的调色方案。你可以直接在:colo
(加一个空格)就连续tab,选择不同的配色方案来体验一下。当然,evening是比较经典的一种。我一直就用它。
  
3.4 准备并打开范例文件
  简化起见,请
下载test.txt
并保存为d:\test.txt。然后,在VIM中输入半条命令
  :tabnew d:\t
  输到这里后不要回车,按一下tab,VIM会自动补全为test.txt的。如果不对,再按几次tab,直到正确为止。然后回车。
  

  你会看到VIM打开了test.txt,并且是以多页签(tab
page)的方式。你可以点击各页签在打开的文件中间切换(高手有更方便的键盘命令做法)。在VIM6.3中,还没有此功能。当然了,这并不意味着VIM
的用户没办法享受多页签的便利,下载一个插件后——VIM有上千个插件——就可以了。面对多页签风格的流行(IE6→Maxthon→IE7),
VIM7.0也新增了此功能。
  我喜欢这种简单的页签。如果你认为此页签太难看,可试一下:set
go=e
  这时应如下效果
  

  
3.5 统一格式,下载vimrc
  上面所操作的各种命令,都是对VIM的设置。把它们写到一个_vimrc文件中就成了默认选项。每个VIM用户的_vimrc文件都不一样,因为每个人的需求不同。
  为了保证下面的操作得到预期的效果,请下载我的_vimrc。依次执行下述操作:
  ① 关闭所有的VIM
  ② 找到你的d:\program files\vim\vim7\_vimrc,复制一份。
  ②
右键点击此处
,“另存为”覆盖你的d:\program
files\vim\vim7\_vimrc。
  注:这并不是标准做法,但对windows用户是比较方便的做法。
  
3.6 打开test.txt
  再次就模式进行提醒:Esc到Normal;Normal下i到编辑;Normal下:到命令行。
  运行VIM,并在命令行执行
  :e d:\test.txt
  接下来,我们把此文章排一下版。如果你认为可以手工排版,请把此文件复制到10000行再发表意见。
3.7 分段并保存
  原文没有分段,观察一下,发现可以在“以下是……”前面加回车,于是
  :%s/以下是/\r&/gc
  输入后,界面如下
  

  并提示

,请回答y或a。如果回答y,则替换当前一个;到了下一个,VIM还会再问你。所以,你回答几个y后不妨一a了之,全部替换。
  补充说明:s表示替换;s/a/b
表示把a换为b;上一命令是把“以下是”换为“\r&”,\r表示回车,&表示被替换的部分,即“以下是”;%则表示全文;/gc表示一直替换(不是仅替换第一个),并且要用户确认。
  看一下文件,你或许想,空2行可能更好。很简单,再重复一下刚才的命令就好了。不过,对强大的VIM来说,无须笨笨地重复输入上次的命令。在命令行按下:后,再按一下↑(向上的方向键),看到刚才的命令了吧?直接回车,提问时输入a,任务完成。
  既有变化,请及时保存。命令是
  :w
  当然,你也可以按ctrl+s。但ctrl+s之所以有效,是因为我在_vimrc中做了定义:当按下ctrl+s时,系统执行:w动作。因此,你完全可以定义其他热键,并把它映射到:w。
3.8
继续编辑
  首先删除“坚持”两字,很简单,只要按gg2x就行了。为了看效果,你可以分开按:
  gg,这时光标移到文章头。
  2x,这时删掉了2个字符。
  再一次体验VIM的神奇,比如按5x,于是5个字符消失了。当然,这5个字符是要保留的,没关系,你按一次u,就回来了吧?
  再按一下Ctrl+r,是不是又没了?再来一次u,是不是又回来了?没错。u和Ctrl+r相当于(是相当于不是等同于)windows的undo和redo。
  再试一下dd。是不是整行没有了?没关系,u回来就行了。
  再试一下3dd。一下子删除了3行!没关系,u回来。
  再来一个dG,哇,全文都没了?!仍然u回来啊。
3.9 更多编辑
  任务a:把每一句分为一行,即达到如下效果

  以**为荣、
  以**为耻,
  解决:如果你记得上面的替换命令,就会想到,可以用2次替换(“为荣、”换为“为荣、”加回车,“为耻,”换为“为耻,”加回车)。但这两次替换在VIM中完全可以一次完成,即用正则表达式,在“为”及后面2字符(“荣、”或“耻,”)后加入回车。怎么表示呢?
  :%s/为../&\r/gc
  看一下高亮,没问题,直接a
  

  哇,是不是很壮观啊?没觉得?如果是一千行一万行呢?
  任务b:把行末的标点去掉,即“荣”后的顿号和“耻”后的逗号。
  解决:办法太多了,仍可以用替换。但此处还是展示一个新功能:列操作。
  安全起见,按两下Esc,再gg$,这时光标应到了文章第一行最后一个字符,即顿号上。
  再按ctrl+v,注意一下状态栏是否提示有“可视 块”
字样。(请确认你是采用了xbeta的_vimrc文件,如果没有,请试一下ctrl+q)
  再15jx,是否标点全部删除了?因为15j表示向下选中15行,x表示删除。
  任务c:错落有致
  操作:这次演示一下宏的用法,请严格按本教程操作。
  先做一下确认:输入法没有打开,并Esc到normal状态,gg到文首。
  按qa(q表示开始录制宏,宏的名字为a)
  再shift+>>(表示按住shift,连按两下>,再放开shift。此时第一行应当向后tab了一下)
  再j^(此时下移一行,并置光标于行首)
  再shift+>>再shift+>>(即第二行向后tab两下)
  再j^(下移一行,并将光标置于行首,为后续操作做准备)
  再q(表示宏录制结束,VIM会提示记录完成)
  这样宏录完了,可以用了。
  再@a,看到了效果了吧?宏执行了一次,即3、4行成功了。还剩下6段,但是你不用按6次@a,而是只要按下
[email=6@a]6@a[/email]
就行了!!!
  

  太神奇了!回放一下?先u,再来一次
[email=6@a]6@a[/email]
。既然可以6,当然可以千千万万!
  补充说明:高手使用VIM是千变万化的。上面的前2个操作(分行+删标点),完全可以合成一个:%s/\(为.\)./\1\r/gc;或再把第3个操作(错落有致)融合到前一个操作中。
3.10
自由体验
  体验光标移动:请随意按几下j和k,看看反应;再多按几下l和h,看看反应;然后,当你的光标在英文时,请按几下w和b。
  对了,gVIM的每一种功能,都有无限可能,因此,你也可以在上面几个字母前加上数字,比如
9w 2h,看它的反应。
  体验自动补全:i进来吧,到目前为止还没写过字呢!为简单起见,你直接把用鼠标放到中文的下一行,我们把
Eight Do's and Eight Don'ts
输入一遍。但是,输入一个E,先别动!按ctrl+p是不是自动补全了?
  体验大小写(每次操作后,都用u恢复原状),试一下g~~和guu和gUU和g??(g??后可以不按u,再按一次g??也能恢复原状)
  神奇吗?这还是VIM功能的单个表演,真正的高手是把它们组合在一起,完成你自己独特的编辑需求。
3.11 体验语法高亮和折叠
  此部分讲起来太复杂。如果你有其他编辑器如UltraEdit基础,会有助于你理解。但VIM在此方面的强大灵活,UltraEdit是难忘其项背的。
  仍然是我们编辑的原文件,为简化计,请下载
test2.txt
;下载
tx1.vim
并保存在d:\program
files\vim\vimfiles\syntax\tx1.vim
  用VIM打开(比如要打开d:\test2.txt,请在VIM中:tabnew
d:\test2.txt)它。平平无奇是吗?这是因为VIM并不知道这个文件要加亮。键入一个命令:setf
tx1,这就相当于告诉VIM此文件的类型是tx1,所以就按照刚下载的tx1.vim进行高亮和折叠。
  

  此时你会发现test2.txt完全折起来了。如何打开?你可用鼠标点最左边的+,当然,也可以用命令zr或zR打开(zR打开全部;zr打开当前;zM折叠全部;zm折叠当前)。打开后,看到高亮效果了吧。可以对文字设定前景色、背景色、粗、斜、下划线风格。
3.12 加密文件
  文本文件打开最快,编辑起来最容易,并且在VIM中查找非常方便。因此,我用它来记日记,并作为通讯录。但是安全问题怎么办呢?很简单,VIM本身即
可加密(录然解密也要用VIM)。在上述打开的文件中键入:X(是大写X),VIM就提示你设定密码,安全起见要确认第2次。然后,保存(键入:w)。把
VIM或此文件关闭,再打开时,就要输入密码了。只有你输入正确的密码,才能得到正确的文件。
4 我的应用
  VIM和Total
Commander一样,我把它们都设定为开机自动运行,其应用不可胜数。
  比如说通讯录管理,我未用任何软件,就用VIM管理一个address.txt。它可以实现:快速启动(我在VIM中定义了书签,键入`A就会打
开),加密(用VIM的:X),超强搜索(无须多说),分组折叠(fold),email和电话号的高亮显示(自定义语法文件)吧。
  再比如,笔者会用VIM来辅助word, excel,
bbs发文,安全删除文件,制作精简的五笔词库等。具体可参见 《
我常用的VIM功能
》,《
活学善用gVIM,提高工作效率:实例篇(合集)
》,《
用gVIM打造个性化记事本
》等文章。
  如下两图分别是我的个性化txt示例,和用VIM写此篇文章时的情况:
  

  

5 后记
  这篇文章比最初计划写得长很多,但仍感觉很多非常优秀的功能没有提到。比如,眼下我写这篇文章,当然用VIM。但是因为有插图,所以用了htm格式。在插入图片时,我只要输入img,VIM会自动换为“”,并把光标放到两个引号中间,以便于我输入图片名称。我输入lnk后,VIM会替换为“”。当我想看一下效果时,我只要:!
g:\study\it\pconline\vim\xbeta-vim.htm
它就自动在浏览器中打开了。而这一个长长的路径,因为有了自动补全和命令行历史,也非常容易。而当一些url还未确定,需要标注时,我就用一个`1,VIM就会以醒目的红色块标出来,一目了然。而下次再打开此文件,它会记得我最后编辑的位置。
  在用VIM之前,我曾试过几十种pad和editor,包括长期用Editpad,也曾经比较精通过UltraEdit,也曾经测过EmEditor,
EditPlus等。但用了VIM之后,我不再关心windows世界的成千上万的编辑器。因为使用它们的逻辑是“如果有新需求,只能等软件升级或换一个软件”,而使用VIM的逻辑则是“如果有新需求,请做个性化配置或下载插件”。
  VIM在手,夫复何求!
  最后,向VIM所代表的追求卓越、开源共享的精神致敬!并希望有责任感的用户逐渐减少盗版!
 
2009年09月20日 星期日 20:06
编者按:这个世界最强是个怎么样的强法呢?一说:Emacs是一种“信仰”。另说:世界上的程序员分三种,一种使用Emacs,一种使用vim,剩余的是其它。(完全无视其他编辑器的存在……)

  来看看这个被人奉为信仰、可以煮咖啡的编辑器是个什么样子。

一、Emacs的历史

   Emacs程序的最初版本是由RichardStallman在1975年写成(年龄比很多读者都大吧 :) )。之后其衍生版本众多。目前使用得最多的两个版本是RichardStallman在1984年开发的一个版本——GNUEmacs和1991年由 JamieZawinski写成的XEmacs。

  看看他的简称你会头晕。

  E. M. A. C. S.

  • Emacs Makes A Computer Slow
  • Escape Meta Alt Control Shift
  • Emacs Makers Are Crazy Sickos
  • Emacs Makes All Computing Simple
  • Emacs Makefiles Annihilate C-Shells
  • Emacs Manuals Always Cause Senility
  • Emacs May Allow Customized Screwups
  • Emacs Manuals Are Cryptic and Surreal
  • Eventually Munches All Computer Storage
  • Eight Megabytes And Constantly Swapping
  • Elsewhere Maybe All Commands are Simple
  • Excellent Manuals Are Clearly Suppressed
  • Emacs May Alienate Clients and Supporters
  • Except by Middle Aged Computer Scientists
  • Extended Macros Are Considered Superfluous
  • Every Mode Accelerates Creation of Software
  • Each Manual's Audience is Completely Stupefied
  • Exceptionally Mediocre Algorithm for Computer Scientists
  • Easily Maintained with the Assistance of Chemical Solutions
  • Eradication of Memory Accomplished with Complete Simplicity

  (PConline注:请原谅没有翻译。专有名词的翻译比较困难,而且很多东西翻译后就完全失去其原有的味道了。)

二、Emacs 能做什么

  很多人不理解为什么 Emacs 的用户那么多,他们是如此的热爱 Emacs,甚至有的人把它当成了“信仰”。虽然笔者没有这个信仰,但是它的确很好,很喜欢用它编辑各种文件,现在来看看 Emacs 能做什么。

  据笔者所知,Emacs 的能力包括:

  1.编辑文本

  Emacs 编辑文本的能力是非常强的。它的其它很多功能都是依赖于强大的编辑能力。Emacs 是人性化的设计,它非常可靠,不会莫名其妙弄坏你的文件,用它编辑重要的文本信心有保障。

   可能你开头觉得它的键绑定用起来非常不顺手。它有很多长长的 “快捷键”,比如按下Ctrl-h再按Ctrl-i…… 比起 VIM 的一个键的快捷键的确慢很多。但是 Emacs 的优势不在于击键的频率,它的目标是用一个键,甚至不按键盘,就完成复杂而智能的操作。面对 Emacs,你感觉自己像是一个魔法师,轻轻一挥魔棒,任务就完成了。

  Emacs 的文本处理能力极强,不管你要处理自然语言还是机器语言。不管是中文还是英语,不管是小说、HTML,还是 C 程序、Java 程序,都可以按 M-e 向前移动一句话(C和Java语句),按 M-k 删除一句话,按 M-} 移动一段话,按 M-p (笔者自己设定的按键) 删除一段话。因为 Emacs 知道,什么样算是一句话 (sentence-end),什么算是一段话(paragraph-start)。而且它知道在不同的文档里,句子和段落有什么区别。

   笔者只要按 M-q 就可以把一段话排的规规矩矩。只要按一个键就可以把一个数字列表重新排序。在 HTML 文档里只要按 C-c backspace 就可以把一组tag删掉,按C-c C-c i 就可以插入一个图片,按 C-c C-v 就可以马上把这个文档送到一个 Mozilla 窗口去预览……在 LaTeX 文档里按 C-c C-r RET 就可以把文档里选定的区域送给 LaTeX 处理,马上看到效果。

  现在你是不是感觉自己更像魔法师了?继续!

图1 Windows下的emacs(+上图可点击放大

   Emacs 有非常友好而强大的人机界面。在搜索替换字符串时,你就能明显感觉到这个优点。它在输入regexp(正则表达式)搜索的时候还能进行 incremental search,而且对部分匹配的字串都有非常漂亮的加量。在替换的时候,它独有 recursive edit,可以打断替换过程,编辑附近的需要纠正的文字,然后继续替换。这个功能对很多人都是非常重要的,因为,在替换过程中,被替换的文字附近的文字很 可能会因为它被替换而需要修改。看看这个抓图,就是 isearch 输入一个正则表达式的情况。

图2 用isearch输入正则表达式(+上图可点击放大

Emacs 的拼写检查能力非常强大。你可以使用 flyspell 随时检查你的拼写错误,看看这幅图 是 flyspell-mode 的 LaTeX 文档, flyspell 知道段落里的某些单词是错的,而 \begin{myquotation} 里的 myquotation 被认为是一个用户自己定义的 LaTeX 环境名字而不认为是拼写错误。

图3 flyspell检查出的拼写错误(+上图可点击放大

  你还可以利用 ispell 的补全功能输入你容易打错的很长的英语单词,看看这幅图。

图4 利用ispell输入比较长的单词(+上图可点击放大

  Emacs 的 hippie-expand 能够非常智能的补全你的文本,文件名,和其它很多东西,而这个功能都是用同一个按键完成!

  Emacs 能输入和显示多国语言文本 ,是一个真正的国际化程序。

图5 Emacs支持多国语言(+上图可点击放大

Emacs 能识别多种自然语言符号,它能知道哪些符号是括号,那些是标点。看看这个抓图里,Emacs 显示了中文书名号的匹配情况。 《正确》,和《错误> 。

图6 书名号的匹配(一)(+上图可点击放大

图7 书名号的匹配(二)(+上图可点击放大

   Emacs 的键是可以任意绑定的。甚至可以使用 Windows 键盘上的 Win 和 Menu 键来控制。笔者的“Win + 鼠标中键”可以弹出一个buffer 里所有引用到的文件和URL的列表,当点击它们就可以编辑那个文件或者在 Mozilla 中打开连接,如图8。

图8 笔者的“Win + 鼠标中键”功能(+上图可点击放大

   你能想到的和你不能想到的编辑功能,Emacs 都能完成。说到这里你可能又会说:“这个功能,vi也有”,“这个功能, UltraEdit 都有”……对,这些能力可能很多其它程序也有。对,但是让一个 Emacs 拥有这些功能比起其它程序的确要费少得多的力气。很多热心的爱好者看到其它编辑器有一个很酷的功能,他就可以想办法把它加入到 Emacs 里面。Emacs 可以被不断的扩充。其实,你平常用到的几乎所有功能都是扩展的功能。

  建立一个微小的基本功能的集合,然后把所有复杂功能作为这些基本功能的组合。这体现了一种程序设计的哲学。不同于 Windows, 也不同于 UNIX,它更好的协调了程序的灵活性和同一性。

  Emacs 编辑文本方面的扩展简直没法计数。folding、 narrow、 outline……这些给人带来了很大的方便,已经被许许多多的人采用。

2.编辑程序

  程序也是一种特殊的文本文件。因为 Emacs 特别适合编辑程序,所以特别在这里提出。Emacs 可以方便的编辑任何类型的计算机语言程序代码,而且为它们提供语法加亮,自动缩进。你可以对程序的语句进行操作。比如向下移动一个 list,删除整个 C 函数…… 你可以用一个键就把许多行注释重新排的整整齐齐。

  一些扩展可以让你方便的浏览代码,而且它们可以识别代码的语义。列出函数名、参数和类型、变量名、类、宏、方法、defun、include 的文件。当你编辑程序时,Emacs 可以帮你补全函数名,参数等等。你可以在代码中间自由的穿梭。

  你可以使用 Ediff 来比较两个或者三个文件,Emacs 可以把不同的地方高亮,而且修改过的地方有特别明显的颜色不同。笔者经常用这个功能很快找到修改过的代码里新出现的错误的位置,如图8。

图9 Emacs上的高亮功能(+上图可点击放大

  你用一个指头就可以让 Emacs 调用编译器编译程序,列出错误列表,启动调试器,在另一个窗口显示当前执行源代码的位置。

Emacs 的 narrow 和 folding 功能使你能够编辑几万行代码在一个文件里而不会觉得摸不着方向。看看这幅图,你能想像这是 TeX 的源代码的 24000 多行里的一部分吗?你操作它的时候就像只有几十行。

图10 Emacs的narrow功能(+上图可点击放大

  folding 可以使你的很长的文档折叠起来,看看这幅图就是一个很长的网页,在需要的时候可以进入其中一个主题进行编辑,当退出主题时,整个文档看起来就像只有一页那么长。可以随意的移动主题,就像只移动了一行。

图11 Emacs的folding功能(+上图可点击放大

  加上一些 elisp,Emacs 就可以成为一个代码浏览器。

3.作为其它程序的界面

  Emacs 可以作为很多程序的前端。比如w3m、lynx(两者都是浏览器)、MAXIMA 计算机代数系统、Scheme48等Scheme 解释器、shell……这些文本方式的程序一旦与 Emacs 接合就拥有了巨大的编辑的能力。如图13,Scheme48 加上 Emacs,就有了语法加亮和方便的热键,可以非常方便的使用Scheme 解释器了。

图12 Emacs上用w3m浏览网页(+上图可点击放大

图13 Emacs加Scheme48后的强大语法加亮功能-

4.作为操作系统

  Emacs 就像一个具有编辑功能的操作系统,你可以用它干很多事情。比如:阅读email和新闻组、浏览网页、管理文件目录 (dired)、作为网页服务器、远程编辑文件、记录日程、约会提醒、电子日历、查字典、ICQ 聊天、放 mp3……

图14 用Emacs新闻组(+上图可点击放大

图15 用Emacs管理文件目录 (dired)(+上图可点击放大


图16 Emacs上的电子日历(+上图可点击放大

图17 在Emacs上查字典(+上图可点击放大

5.煮咖啡

  如果你工作的地方有自动咖啡机,Emacs 还可以帮你点咖啡。 :)

  煮咖啡的方法,请参见这里。(原链接于9月12日不能用,给出的是Google快照的内容。)

三、Emacs的相关资料

  1.Emacs 主页:这里能找到很多信息。

  2.Emacs FTP:这里能下载到 Emacs 的发行版。

  3.Emacs CVS:这里能下载到最新的 CVS 版本的 Emacs。

  4.SourceForce.net:这里有许许多多 Emacs 相关的程序,从提供基本操作方便的, 到浏览代码,编辑程序,…… 内容非常广泛。

  5.EmacsWiki:一个非常好的 WiKi 网站。里面有很多Emacs的使用技巧。

  6.dotemacs:一个搜集 .emacs 文件的网站。你可以从这里学习怎么配置 .emacs.

 
2009年09月20日 星期日 20:04
编者按:本文详细介绍了VIM的历史、基本知识等,并介绍了作者作为一个程序员经常用到的一些相关资源。同时包含了大量的参考文献,适合想深入了解VIM的读者。

  如果您从未接触过VIM,推荐先看看VIM的中文帮助文档和xbeta的《世界第二的VIM:普通人的编辑利器》。

一、VIM的历史

  1. ed

   ed是UNIX上最古老最基本的编辑器,它最初是UNIX之父Ken Thompson编写的,他第一次在ed中应用了正则表达式(regular expression),这个创举将RE理论带入了实践,对UNIX界造成了深远的影响。 实际上ed是受来自加州伯克利大学的QED编辑器的影响,Ken便是从这所院校这里毕业的。

  ed是一种行模式编辑器,下面是一个ed会话的例子:

  • $ ed greeting
  • 0    # 因为新创建文件,所以读入了0个字节
  • a    # 进入编辑模式(append)
  • hello world, eveyone. # 输入一行文本
  • .    # 回到命令模式
  • 1p    # 显示(print)第一行
  • hello world, eveyone.
  • 1c    # 最后一个词写错了,修改(change)第一行
  • hello world, everyone.
  • .    # 回到命令模式
  • 1p    # 重新显示第一行,这回发现无误
  • hello world, everyone.
  • q    # 退出(quit)
  • ?    # ?表示没有保存或者命令不认识
  • w    # 保存(write)
  • 23    # 提示写了23个字节
  • q    # 退出

   也许大家觉得这个编辑器很难用,可是在70年代,许多使用UNIX的人都是用廉价的终端机通过电话线连到UNIX服务器上的,因为传输速率慢,所以这种 简洁的行模式编辑就很有意义,现在虽然硬件有了长足的发展,ed编辑器很少有人用了,但是它的很多理念比如命令字符、正则表达式却在它的很多后辈身上体现 出来。下面这个网址有一些ed的笑话,从中大家或多或少能体会到那个时代人们的某种精神。

  2. ex

  ex是ed的扩展,实际上vi构建在ex之上,vi引入了大家所熟悉的全屏编辑模式。

  3. vi

  随着硬件的发展,UNIX上许多全屏模式编辑器被开发出来,pico,nano,joe,jed,jove,但是最为广泛使用的无疑就是VI(nvi,elvis,vim等)和Emacs(GNU Emacs,XEmacs等)。

   1976年左右Bill Joy开发了vi,他也是伯克利大学的毕业生,后来他跟其他人一起成立了Sun Microsystems公司并成为了Sun的首席科学家。一开始Bill开发了ex,尔后开发了vi作为ex的visual interface,也就是说vi允许一次能看到一屏的文本而非一行,vi也因此得名。在当今的UNIX系统上,可能没有缺省安装Emacs,但是肯定会 有vi,当然,ed编辑器也必定存在:-)

  下面引用《Unix技术大全——Internet卷》的一段文字:

  “早 期,当键盘和视频终端成为最新的计算机交互手段时,人们开发了VI。那时候的键盘不具有目前熟悉的全部功能键,所以,VI就设计成只需要打字机的键盘加上 退出键就能完成对文本的输入和修改(现在有的还接受一些其他的键输入方式,如光标控制键)。尽管看起来受了限制,不能充分利用现代键盘新增的许多键,可是 ‘祸中有福’,限制带来的好处是手指不离开打字区就能完成所有的编辑工作。”

  Reference(参考):

  4. VIM

   技术不断进步,需求也在不断提高,VI的各种变种也不断涌现,知名的有nvi,elvis,VIM,vile,yzis,其中移植性最好、特性最多、使 用最广的当属VIM,VIM主要是Bram Moolenaar开发的。最初Bram在Amiga计算机上改进一个叫Stevie的VI版本,他称之为“Vi IMitation”。随着功能的逐渐丰富,VIM的含义也就改成了“Vi IMproved”。相比原始的VI,VIM增加的一项最重要的功能便是多级撤销,VI只支持一级撤销。

下面是VIM的重要版本历史:
  • DATE   VERSION   Milestone
  • 2005   Vim 7.0aa Spell Checking,multi tabpage
  • 2000 Jul 09 Vim 6.0a Folding (and more)
  • 1998 Feb 19 Vim 5.0   Syntax coloring/highlighting
  • 1996 May 29 Vim 4.0   Graphical User Interface (Robert Webb).
  • 1994 Aug 12 Vim 3.0   Support for multiple buffers and windows.
  • 1992   Vim 1.22 Port to Unix. Vim now competes with Vi.
  • This was when Vim became Vi IMproved.
  • 1991 Nov 2 Vim 1.14 First release (on Fred Fish disk #591).
  • 1988   Vim 1.0   Vi IMitation on the Amiga

  Reference:


二、VI/VIM基础知识

  很多人应该都知道VI是个有模式的编辑器:编辑模式和命令模式,按 ESC回到命令模式,用i或者a进入编辑模式,由于区分了模式,导致VI的命令非常简洁,而无模式编辑器比如Emacs,所有的命令都需要加上控制键 Ctrl或Alt,所以有个笑话说Emacser们最希望计算机备一个脚踏板,这样就可以用脚踩Ctrl和Alt键了(编辑器圣战——在VI和Emacs 之间有很多口水战,自然也引出非常多的幽默),这里罗嗦一句VI vs. Emacs: VI继承了ed的理念,另外也有历史原因,VI追求的是快捷——启动程序迅速,编辑文本高效,功能专注,而Emacs追求的是功能的丰富强大以及集成带来 的方便,在Emacs里头可以发邮件,上新闻组,听mp3,浏览网页,玩游戏,几乎可以login->emacs->logout 了:-),VI和Emacs都是程序员的编辑器,相比而言,Emacs更是提供了一种程序员的生活氛围。

  闲话少说,这篇文档也不是一份VI/VIM教程,所以这一节只会简单的提及VI/VIM的基础知识。VIM引入了更多的模式,在VIM里头:help mode可以看到VIM的所有模式,主要有如下几种:

  • Normal mode   即通常所谓的命令模式,在此模式使用a、i、A、I、o、O等进入Insert mode
  • Insert mode   即通常所谓的编辑模式,在此模式使用ESC进入Normal mode或者Ctrl-o临时进入Normal mode。
  • Command-line mode 命令行模式,在Normal mode下按冒号进入,按ESC取消执行命令或者回车执行命令,然后回到Normal mode。(Visual Studio.Net也添加了命令行脚本功能,幸甚)
  • Visual mode   即选择模式(注意跟用鼠标选择不同),用v,V,C-v或C-q进入
  • Select mode   鼠标选择
  • Replace mode   在Normal mode下按R进入,按ESC返回Normal mode,相当于Windows下命令行中按Insert键进入的覆盖模式

  从VI/VIM中退出: 按ESC确认返回到Normal mode,然后

  • :wq 保存并退出
  • :q! 不保存并退出
  • :x 退出,如果文件更改则保存
  • ZZ 退出,如果文件更改则保存(按住Shift,再按两次z)

  VI的命令是非常具有美感的,下面是几个例子:

  • i 在光标前插入 I 在行首插入
  • a 在光标后插入 A 在行末插入
  • o 在下一行插入 O 在上一行插入
  • x 删除当前字符 X 删除前一个字符

  类似的还有b,B,ge,gE,w,W,e,E,f,F,t,T,这些命令都可以用:help cmdname查到帮助。

  • dd 删除一行 yy 拷贝一行
  • h j k l 左下上右移动光标
  • Ctrl-w h,Ctrl-w j,Ctrl-w k,Ctrl-w l 切换到左下上右窗口

  类似ed,VI/VIM的命令大多都可以带一个数字前缀或者一个数字范围,比如:

  • 5dd 从当前行开始删除5行
  • 5yy 从当前行开始拷贝5行
  • 1,3d 删除1至3行
  • 1,3y 拷贝1至3行 (.代表当前行,$代表最后一行)

  d<motion>,y<motion>,c<motion>,v<motion>分别代表删除/拷贝/修改/选择<motion>

  命令指定的范围,比如
int main(void)
{
......;
}

  将光标放在{处,然后输入v%就可以把大括号中内容选定,然后按=就可以按照C语言格式缩排(:help =可以看到=命令的描述),%命令的作用是跳到匹配处,比如括号之间,C的宏指令#if #else #endif之间。

  int some_ugly_modifier and some_ugly_name (void)
如果光标放在第一个s上,想删除到“(”为止,则输入dt(就可以了,t(的作用是跳到下一个
"("前。

  dG可以从当前位置一直删除到文件末尾,因为G的作用是跳到文件最后一行。

  VIM的命令可以非常快捷的做到一些复杂的编辑操作,下面是几个示例:

  (a)

  将“(1), ...., (2), ....,(100)”替换成“(2), ...., (3), ...., (101)”。

  在文本中一处处找到并修改是很累的,在VIM下一条命令就可以搞定:

  :%s/(\(\d+\))/\="(".(submatch(1)+1).")"/g

  命令解释如下:

  • %       全文(“%”是“1,$”范围的缩写)
  • s       替换
  • /       搜索字符串开始
  • (       左括号
  • \)      开始记录匹配
  • \d+     一个或多个数字
  • \)      结束记录匹配
  • )       右括号
  • /       搜索字符串结束
  • \=      把后面的表达式计算出来作为替换字符串
  • "("     左括号
  • .       字符串连接运算符
  • (submatch(1) + 1)       把第一个匹配的结果加一作为一个整体返回
  • .")"    添上右括号
  • /g      替换字符串结束,g表示替换每一行的所有匹配结果。

  (b)

  这个问题是笔者曾经碰到的,有一个log系统对于输出行长度有限制,因此在输出很长的log时需要断行,在断行时以单行的“-$-”标记,现在的需求是把这些行连起来,在VIM中也可以很方便的做到(edyfox at newsmth指点):

  :%s/\n-\$-\n//g

  命令的含义就是把“换行-$-换行”替换成空,另一个办法是:

  :g/-\$-/norm ddkJx

  命令g/-\$-/的含义就是找到所有的断行标记,然后norm表示在找到的每一个行上执行后面的命令,dd删除这个断行标记,k移动到上一行,J合并当前行和下一行,由于J合并后会留一个空格(只对于英文情况下),所以x来删除这个空格。

  (c)在Fortran代码

  integer, dimension(:, :), allocatable :: &
short_var, &
A_very_long_name_var, &
other

  中,想把每行的&符号定位到固定的一列,比如第78列,手动对齐也是很麻烦的,这个问题可以用VIM的Align插件(http://www.vim.org/scripts/script.php?script_id=294)解决,另外利用宏也可以:

  • :set ve=all 使得光标可以定位到屏幕任何位置(缺省下VIM的光标只能放在行内的字符上)
  • gg              到文件第一行
  • /\s\+&\s*$      找以&结尾的行,&前至少一个空白字符,后0或多个空白字符
  • qa              记录宏到寄存器a
  • D               删除到行尾
  • 78|             定位到第78列
  • i&<ESC>         插入&并返回到命令模式
  • n               查找下一个&
  • q               停止记录宏
  • 10000@a         执行一万遍寄存器a中保存的命令
  • :set ve=""      恢复ve缺省值

  (d)连续插入72个等号

  按ESC进入Normal mode,输入72i=再按ESC即可。

  (e)在多行开始插入//

   移动光标到需要注释掉的第一行开头,然后按Ctrl-v(如果使用了VIM的mswin.vim,则Ctrl-v表示粘贴,这时需要用Ctrl-q代 替)进入Visual blockwise模式,这个模式是Visual mode的一种,相当于UltraEdit中的块选择。 然后按j选择上所有需要注释行的行首(看起来效果是选择了第一列),输入I//再按ESC就可以在每一行开头插入//了。

  Reference:

  这些例子也许初看起来有点吓人,可是在很多时候VIM这些强大的命令能省不少力,VIM不愧是为“编辑”这个功能费尽心思。

三、编程辅助

  既然是程序员的编辑器,自然要show一下它的编程辅助功能。

  (1) ctags,cscope

   现在的IDE都提供了类、函数的索引功能,可以方便的找到某个类或者函数的在哪里定义的,VIM这方面可以利用ctags、cscope做 到,Exuberant ctags支持的语言种类非常多,UltraEdit的tags功能也是利用的ctags。cscope只支持C,它能实现Source Insight的一些功能,比如查找某个函数调用了哪些函数,某个函数被哪些函数调用。VIM对这两个工具集成的非常好,利用它们就可以在源文件中方便的 跳转搜索类和函数了。

  Reference:

  (2)multi window,multi buffer,multi tab page

   一个buffer对应一个文件,它可以对应多个window,这样可以方便的对照编辑一个文件的不同部分,tab page跟现在许多编辑器上常见的标签页意义并不一样,可以将tab page理解为一个windows的容器,这样如果想新建一个窗口编辑文件但又不想打乱现在的多窗口布局,那么就可以新开一个tab page,把新窗口放到这个新的tab page里头。tab page是VIM 7.0不久前新增的特性,目前VIM 7.0还未正式发布。(此文发表至PConline时,已经正式发布。)

  •   Reference:
  •   :help windows
  •   :help buffers
  •   :help tabpage

  (3) 语法高亮

  VIM发行版里带了450多种语言的语法高亮,在其主页vim.org上还可以找到更多。

  •   Reference:
  •   :help syntax

  (4) 自动缩进

   在打开自动缩进选项后,VIM会自动的控制缩进,比如输入{自动向右缩进一个tab字符(具体用什么缩进可以配置),输入}自动回退缩进。 使用=命令可以对选择的程序块排版缩进,这对于整理代码非常有帮助。 另外对选择的块用>>和<<命令可以很方便的控制一个程序块的缩进。

  •   Reference:
  •   :help cindent
  •   :help autoindent
  •   :help smartindent

  (5) 类和函数列表

  taglist等插件可以提供很方便的类和函数列表功能。

  (6) 自动完成

   VIM在Insert mode下输入一个单词的前几个字符,然后用Ctrl-p或者Ctrl-n就可以列出以这些字符开头的单词,特别在配置了ctags后也能列出头文件中的 符号,特别方便,除此外VIM还有行自动完成、文件名自动完成等,这点即使是现在强大的IDE也未免不足。

  如果设置了如下选项:

  •   :set wildmode=list:full
  •   :set wildmenu

  则在命令行打开文件或者输入命令时按Tab(以输入字符为前缀补全)或者Ctrl-d(列出包含输入字符的所有匹配项目)自动补全,这一功能大大降低了VIM的使用难度。

   另外有许多插件可以实现许多IDE中的自动完成类成员的功能,当然,这个功能还比不上Eclispe、Visual Studio等IDE中的强大,这一点是VIM比较可惜的地方。VIM 7.0引入了Omni Completion,可以自定义匹配完成函数,也许可以弥补这个缺陷。

  •   Reference: :help 'complete'
  •   :help omni-completion

  (7) folding

  VIM支持折叠代码,还可以根据文件中特殊的标记对文件中的行折叠,可以实现Outline视图,这可以极大的方便编辑很大的文件。

  Reference: :help fold

  (8) quickfix

   许多人对于UNIX开发的印象都是“编辑代码,退出编辑器,编译,发现错误,记录出错信息,遍辑代码,退出编辑器,编译,用gdb调试,再编辑代 码……”,这是古老的VI时代的事情了,有了VIM的quickfix特性,可以在VIM里编译然后直接跳到编译出错的行,这个反复的过程无需退出编辑 器,而且VIM的quickfix特性可以经配置后支持不同的编译器以及不同的语言:只要编译器在出错信息里包含文件名和行号。

  不过比较遗憾的是VIM对于集成调试支持还不好,有些项目尝试集成GDB到VIM,比如http://skawina.eu.org/mikolaj/vimgdb/http://www.volny.cz/zellerin/gdbvim/,在http://www.vim.org/search.php中的scripts处搜索gdb也可以找到一些插件.这方面Emacs的GUD(Grand Unified Debugger)调试界面要更强大,毕竟GCC/GDB/Emacs是一家。

  Reference: :help quickfix

  (9)auto command

   VIM可以在某些事件发生时比如打开文件、保存文件、切换窗口时自动执行一些VIM命令,VIM的许多插件都利用了这个功能。常用的一种情况是把某种文 件后缀指定到一种文件格式上,比如*.jv指定到Java文件格式,这样在每次打开.jv类型的文件时自动使用Java的语法高亮:

  :autocmd BufNewFile, BufRead *.jv :set ft=Java

  Reference: :help autocmd.txt

  (10)mode line

   在编辑文件时常常指定一些选项,比如缩进量、是否将制表符转换成空格等,每次手动指定这些选项很麻烦,写到vimrc中却又成了全局选项,而且换了一份 VIM,原有的设置就丢失了。VIM可以识别文件中的特殊行,自动设置一些选项,下面是写在C源文件开头的一个mode line示例:

  • /* vi:set tw=0 ts=8 sw=8 noet nowrap ft=c fdm=syntax: */
  • /*
  • * File: xxxx.c
  • * Author: xxx
  • */

四、强大方便的帮助系统

  使用了那么多软件,只有VIM和Emacs的帮助系统给笔者方便快捷的感觉,大部分软件的帮助往往是摆设而已,而VIM的帮助的确是考虑到了自己“help”的身份,利用它能很方便容易的找到想要的东西。

  VIM的帮助是超链接形式的,它使用的就是tags,所以可以跟ctags功能一样按Ctrl-]跳转到链接所指处,按Ctrl-t返回。

  • :help   打开帮助首页,这个首页分类非常清楚
  • :help cmd 查找normal mode命令,比如:help dd
  • :help i_cmd 查找insert mode命令,比如:help i_Ctrl-y
  • :help :cmd 查找command-line命令,比如:help :s
  • :help 'option 查找选项,比如:help 'tabstop

  (这些信息都在:help打开的帮助首页上)

  如果你记不清命令或者选项的全称,那么可以利用Tab或者Ctrl-d的自动补全功能。

  :help options 可以找到所有的选项说明

  查看某一个选项的值(实际上选项是VIM中的一种变量,类似SHELL的变量以$符号引用,VIM的选项以&引用,另外VIM的寄存器以@引用):

  :echo &tabstop

五、其它高级功能

  (1)寄存器

  VIM里面的寄存器可以用来保存拷贝的文本、记录的宏、设置的书签等等,一般的编辑器都只有一个剪切板(MS Office加入了多个剪切板),而VIM和Emacs编辑器中的多寄存器可以实现多个剪切板的功能。VIM中有九类寄存器:

  • 无名寄存器 " 最近一次删除/修改/替换操作的文本都会放入这个寄存器
  • 10个数字寄存器 0-9 拷贝或者删除的文本存入这些寄存器,这些寄存器是循环使用的,在每次存入内容到寄存器1时,原有的内容会依次存入到后一个寄存器中。
  • 小删除寄存器 - 删除内容少于一行时放入这个寄存器。
  • 26个命名寄存器 a-zA-Z 大小写无关。这些寄存器可以在拷贝或者删除等操作中指定使用。
  • 四个只读寄存器 :.%# 特殊用途。
  • 表达式寄存器 = 特殊用途。
  • 选择和拖放寄存器 *+~ 用于与系统剪切板交互,以及接收拖放操作的内容。
  • 黑洞寄存器 _ 放到这里面的内容都被丢弃,这样可以删除或拷贝时不影响其它寄存器。
  • 最后一次搜索模式寄存器 / 保存最后一次搜索的正则表达式。

  使用:reg命令可以看到所有寄存器中的内容,使用"+y或者"*y可以将visual mode下选择
的内容拷贝到系统剪切板,使用"+p或者"*p可以将剪切板中的内容粘贴到VIM中,如果打开了
mswin特性的话则在insert mode下使用Ctrl-x,Ctrl-v,Ctrl-c了。

  Reference: :help registers

  (2) 宏
Normal mode下按q<reg>,<reg>指{a-zA-Z0-9"}37个寄存器中的一个,然后可以进行任何操作,包括在模式间切 换,最后在Normal模式下按q可以结束宏录制,用@<reg>命令可以应用这个宏,命令前可以带数字前缀表示执行多少次这个宏。

  Reference: :help q

  (3) 书签

  Normal mode下按m<reg>作书签,<reg>指26个命名寄存器中的一个,然后可以用'<reg>或者`<reg>跳到书签处。

  Reference: :help m

  (4) 映射

  VI/VIM可以将某个按键序列映射到一个命令序列上,比如在配置文件.vimrc(Windows下是_vimrc)中写入

map <F6> <ESC>i<C-R>=strftime("%Y-%m-%d")<ESC><ESC>

  即可以在Normal mode下插入当前日期。

  Reference: :help :map

  (5) 缩写

  VI/VIM支持用一个缩写字符串代替一个长的字符串,比如

  :ab hw hello world

  然后在Insert mode下输入“hw ”(不包括引号)后VIM就自动替换成了“hello world”。这里展示一个Emacs下abbrev功能的动画(没错,是Emacs的):

  http://www.bloomington.in.us/~brutt/msf-abbrev.html
http://www.bloomington.in.us/~brutt/msf-abbrev-demo.gif

  Reference: :help :ab

  (6) :s//和:g//,:!g//

  这两个命名加上正则表达式,常常能完成非常复杂的编辑任务,可以毫不夸张地说是VIM的两柄瑞士军刀。:s是替换操作,:g是查找匹配模式的行,:!g是查找不匹配模式的行。

  http://www.vim.org/tips/tip.php?tip_id=1063这个tip可以把:g找到的行拷贝到一个新的缓冲区中,非常有用。

  •   Reference: :help :s
  •   :help :g

  (7) 插件

  VIM自己有脚本语言,另外也支持用Perl/Python/Tcl/Ruby/Scheme编写插件,这些插件极大的丰富了VIM的功能。

  (8) color scheme

  VIM有许多配色方案,下面这个链接有许多配色方案效果的图样:http://www.cs.cmu.edu/~maverick/VimColorSchemeTest/

  (9) 二进制编辑

  VIM可以利用xxd实现二进制编辑,不过这项功能还是不够好用。

  (10) sign

  sign指在编辑窗口的最左列显示一个标记,利用这个功能能实现很多IDE中的书签标记或者断点标记。

  Reference: :help sign

六、VIM Scripts

  VIM script包含几大类:

  • color scheme 配色方案
  • ftplugin File type插件,特定语言语法的设置,比如如何识别注释
  • syntax   语法高亮的配色
  • plugin   提供额外功能的插件,比如智能完成、缓冲区管理。

   VIM的script安装非常简单,下载的script文件或者压缩包里头都有安装说明,在VIM的安装目录(比如C:\VIM64)下面有一个 vimfiles目录,把script放到vimfiles目录下即可。对于多用户系统,可以在HOME目录(一般是c:\Documents and Settings\ <USER_NAME>\)下面建立一个vimfiles目录,把script放置到这里。

  下面是一些好用的VIM插件,具体使用办法请参考各自。vim文件头部的注释。

  BufExplorer.vim   *****
http://www.vim.org/scripts/script.php?script_id=42
这个插件可以使编辑多文件更加方便,装完插件后Normal mode下输入\be即可打开缓冲区列表,光标放置在某一个文件上按回车即可打开这个文件,而缓冲区列表自动关闭。

  Taglist.vim   *****
http://www.vim.org/scripts/script.php?script_id=273
这个插件可以实现类或者函数列表功能,支持C/C++,java,perl,python,tcl,sql,php等语言,它可以在VIM中创建一个窗 口,列出编辑的源文件中的类、函数、变量定义列表,而且更方便的是这个列表也插入在了右键菜单中,分类存放,访问非常方便。

  TabBar.vim   ***
http://www.vim.org/scripts/script.php?script_id=1338
这个插件实现了类似UltraEdit中的标签页的功能,而且能通过Alt-<n>来切换,<n>代表1-9。

  minibufexpl.vim   ***
http://www.vim.org/scripts/script.php?script_id=159
实现了类似UltraEdit中的标签也功能。

  c.vim    ***
http://www.vim.org/scripts/script.php?script_id=213
提供了很多便于C/C++编程的功能,比如文件头模版,代码片断等。

  CRefVim    **
http://www.vim.org/scripts/script.php?script_id=614
为VIM定制的C参考手册,这样对于语法或者函数不清楚的地方可以方便的查找了。

  latex-suite   *****
http://www.vim.org/scripts/script.php?script_id=475
http://vim-latex.sf.net/
提供了很多便于编辑TeX/LaTeX文件的功能,比如在VIM里面编译或者预览、自动插入TeX标记等。

  word_complete.vim ***
http://www.vim.org/scripts/script.php?script_id=73
Insert模式下在输入的时候自动补全单词,如果补全正确可以按Tab键接受,否则可以不管它继续输入或者按Ctrl-n,Ctrl-p切换补全。 注意是输入三个字符后才开始补全。

  Vim JDE
http://www.vim.org/scripts/script.php?script_id=1213
支持C/C++等的自动完成(需要VIM 7.0,编译时打开+ruby特性).

  cppcomplete.vim   **
http://www.vim.org/scripts/script.php?script_id=527
能自动完成C/C++/Java的结构或类成员,注意它的快捷键是Alt-l(字母L)不是Alt-i。

  The NEAD Commenter **
http://www.vim.org/scripts/script.php?script_id=1218
在许多类型的文件中方便的加上注释或者取消注释。

  winmanager
http://www.vim.org/scripts/script.php?script_id=95
把标准的File Explorer以及Buffer Explorer插件集成在一起,提供现代编辑器中常见的文件列表和缓冲区列表功能。

  sketch.vim ***
http://www.vim.org/scripts/script.php?script_id=705
Draw with mouse: boxes, arrows, lines, fills. Transparent/opaque drag and drop.照着它的教程做一遍,你就会震撼于它的创意了。

  DrawIt.vim **
http://www.vim.org/scripts/script.php?script_id=40
可以方便的画连线图。

  MultipleSearch   ***
http://www.vim.org/scripts/script.php?script_id=479
MultipleSearch2.vim ***
http://www.vim.org/scripts/script.php?script_id=1183
Mark.vim   ***
http://www.vim.org/scripts/script.php?script_id=1238
otf.vim    **
http://www.vim.org/scripts/script.php?script_id=634
这些插件可以同时高亮显示多次搜索结果,这个特性非常有利于显示代码中某些变量或函数的调用位置。

  SearchComplete.vim *
http://www.vim.org/scripts/script.php?script_id=474
可以用/搜索时按Tab补全要搜索的单词。

  Vim Intellisense
http://insenvim.sourceforge.net
顾名思义,此插件用于给VIM提供智能完成功能,支持C++,C#,Java,JSP,HTML,SQL,XML,笔者安装后一直懒得配置,也就没用上。

  project
http://www.vim.org/scripts/script.php?script_id=69
提供一些IDE功能,看介绍似乎很不错。

  JavaBrower
http://www.vim.org/scripts/script.php?script_id=588
提供文件中Java类的树状列表。

  vimspell
http://www.vim.org/scripts/script.php?script_id=465
ispell or aspell based spell checker with fly-spelling。

  cream
http://cream.sourceforge.net/
一套配置文件,可以把VIM的界面改成CUA(Common User Access)模型,降低VIM的学习难度,个人不推荐这种做法,不过其中有些高级配置值得学习(有意思的是Emacs也有类似的项目: Easymacs,EmacsW32)。

  IComplete
http://icomplete.sf.net
搭配VIM 7.0的Omni Complete,可以做到C/C++的智能完成功能.

七、VIM资源

  几个学习正则表达式的工具(from happyvim at newsmth)

  http://www.yzis.org/   yzis是一个新的VI变种,它支持变宽字体,目前功能还不够丰富。

  http://ex-vi.sourceforge.net/ 传统VI的源代码

八、编译安装最新CVS版的VIM

  1. 获取源代码

  cvs -z3 -d:pserver:anonymous@cvs.sf.net:/cvsroot/vim co vim7

  源代码位于当前目录的vim7目录下面,假设安装目标在d:\work\program\Vim\vim70b

  2.编译

  注意重新编译前最好clean一下,确保“*obj*”目录被删除了,否则可能出现莫名其妙的问题,比如链接时找不到一些函数。下面是一个批处理脚本:

  rem --------------------------------------------->
@echo off
set path=c:\winnt;c:\winnt\system32
vcvars32.bat
cd vim7\src
rem .sh文件跟其它程序有关联,避免运行VC的link时执行了link.sh
ren link.sh link.sh.old
@echo clean...
rem clean时加入这些选项是因为$(OUTDIR)和$(OBJDIR)根据这些标志合成的,
rem 如果不加这些标志, 在rmdir /s /q时会找不到目录, 从而没有删除掉。
nmake -f Make_mvc.mak clean FEATURES=HUGE GUI=yes OLE=yes MBYTE=yes IME=yes GDYNAMIC_IME=yes GIME=yes PERL=d:\work\program\Perl DYNAMIC_PERL=yes PERL_VER=58 PYTHON=d:\work\program\Python24 DYNAMIC_PYTHON=yes PYTHON_VER=24 SNIFF=yes CSCOPE=yes CPUNU=i586 DEBUG=yes MAP=lines
@echo build big debug version...
nmake -f Make_mvc.mak all FEATURES=HUGE GUI=yes OLE=yes MBYTE=yes IME=yes GDYNAMIC_IME=yes GIME=yes PERL=d:\work\program\Perl DYNAMIC_PERL=yes PERL_VER=58 PYTHON=d:\work\program\Python24 DYNAMIC_PYTHON=yes PYTHON_VER=24 SNIFF=yes CSCOPE=yes CPUNU=i586 DEBUG=yes MAP=lines
ren link.sh.old link.sh
@echo done.
pause
@echo on
rem <-----------------------------------------------

  对于MinGW,

  @echo off
@echo clean...
make -f Make_ming.mak clean DEBUG=yes
@echo make...
make -f Make_ming.mak all GUI=yes OLE=yes MBYTE=yes IME=yes GDYNAMIC_IME=yes GIME=yes PERL=d:/work/program/Perl DYNAMIC_PERL=yes PERL_VER=58 PYTHON=d:/work/program/Python24 DYNAMIC_PYTHON=yes PYTHON_VER=24 CSCOPE=yes CPUNU=i586 DEBUG=yes MAP=lines
@echo done.
pause
@echo on

  如果发现MinGW编译出来的gvimd.exe非常大(约4~5MB),可以用MinGW自带的strip处理一下。

  3. 安装

   如果你的系统先前有一份不同版本的VIM,那么需要先卸载掉(运行vim\vimXX\uninstal.exe,或者在拷贝完文件后运行新版VIM的 install.exe,它也会提示卸载旧版本),最近的VIM 7 CVS代码安装目录也从vim70aa转变到vim70b,也需要卸载原先的vim70aa,这一步主要是删除一些注册表项。

  如果你从CVS上更新代码后,install要求的安装目录名字没有改变(也就是说VIM版本没变),那么不需要卸载原先的版本,直接拷贝文件覆盖即可,如果你想更改目录安装的话也需要卸载。

  cd vim7
dir /s/b *.exe
dir /s/b *.dll
xcopy vim7\runtime d:\work\program\vim\vim70b (vim70b是一个目录)
copy vim7\src\*.exe d:\work\program\Vim\vim70b
copy vim7\src\xxd\xxd.exe d:\work\program\Vim\vim70b
copy vim7\src\vimtbar.dll d:\work\program\Vim\vim70b
copy vim7\src\GvimExt\gvimext.dll d:\work\program\Vim\vim70b
copy vim7\src\VisVim\Visvim.dll d:\work\program\Vim\vim70b

   然后进入vim70b目录运行install.exe,如果发现一个DOS窗口一闪而逝,那么很可能是建立的vim70b目录名不对,比如笔者前几天升 级后使用的仍然是vim70aa目录名,在DOS窗口中运行install.exe它就提示需要在vim70b目录下运行,将vim70aa改名即可。 install.exe的源代码是vim7\src\dosinst.c,这里面修改了注册表,并拷贝一些文件到WINDOWS目录下等等。

  4.善后

  视情况你需要更新PATH环境变量、文件关联、_vimrc中的路径名等,并将diff.exe,ctags.exe,cscope.exe拷贝到vim70b下面。

  最后运行gvimd.exe,键入:ver开始享受VIM吧。

九、一份vimrc配置文件(注:原文如此,不太清楚作者所要表达的信息)

十、VIM的不足

   前面已经提到,VIM在自动完成和集成调试方面还比不上现代的许多IDE,另外VIM对二进制编辑还没有UltraEdit强大,对于现在流行的重 构,VIM也支持不力,但是作为一个文本编辑器而言,堪比的只有Emacs,另外Visual SlickEdit也很强大,不过它是商业软件。VIM也可以嵌入到Visual Studio中作为编辑器,另外Code Forge,Eclipse,NetBeans,Sun Visual Workshop等也提供了一定的VIM支持或者键绑定。

  • Reference:
  • :help workshop
  • :help netbeans
  • :help debugger
 
2009年09月20日 星期日 19:39
起源:

[Gate-users] Linux OS compatibility

Yes I already tried but using mingw cross compiler (that is totally free and that doesn't use any dynamic library). I succeeded in compiling clhep but I had to remove some parts using drand48 random generator (that do not exist on windows and that is not used by Gate), then I succeeded in compiling Geant4 libraries too (except for the OpenGL related one), but it took very long time to modify a lot of little parts of code that gives errors with mingw. After that I took ROOT precompiled libraries (with the aim to later entirely compile ROOT with mingw, in order to get the executable files *) to see what packages could miss to compile Gate. And I saw then that I needed the xml2 package, the xml2-config program and other stuffs that I don't remember yet. Because at this step my computer had some problems and I nevertheless succeeded to make a backup of what I have done before it completely died... And after that I never had the courage to reinstall all the environment but I will do it some days when I will have time to do this... To finish I will have to compile all the OpenGL package, the xml2 package and the other ones that I don't remember, then ROOT and finally Gate :-)

* Because with the downloadable executables (compiled with cygwin or VC, the only ones that the CERN gives us) you have to always have a dynamic library that is under special licence and that avoid you to freely distribute any program that uses this library. That means that any people who wants to use your program have to download the cygwin distribution or VC utilities, and my aim was to be able to freely distribute windows executables that work without anything under licence different than the LGPL one.

I think that with a complete VC package this is much easier to succeed and with a cygwin package too. So maybe it will be better to give up with mingw and try with cygwin I think (because it is free), but Users will have to install cygwin environment first (that is very heavy) before using the Gate package. And if anybody wants to do that job, he is welcomed ;-) Because once somebody has done this, the good point on Windows (yes, there are some !) is that everybody could directly use the executables without compiling again.

----Simon

小结:

在mingw上安装GATE,会有些问题,用VC package的mingw或cygwin 会更好一些

注:GATE - Geant4 Application for Emission Tomography

http://opengatecollaboration.healthgrid.org/

====================================

MinGW

是指只用自由软件来生成纯粹的Win32可执行文件的编译环境,它是Minimalist GNU on Windows的略称。详情请参考<http://www.mingw.org>。

这里的“纯粹”是指「使用msvcrt.dll的应用程序」。无法使用MFC (Microsoft Foundation Classes)。

MinGW:一个可自由使用和自由发布的Windows特定头文件和使用GNU工具集导入库的集合,允许你生成本地的Windows程序而不需要第三方C运行时库。

MinGW,即 Minimalist GNU For Windows。它是一些头文件和端口库的集合,该集合允许人们在没有第三方动态链接库的情况下使用 GCC(GNU Compiler C)产生 Windows32 程序。  
在基本层,MinGW 是一组包含文件和端口库,其功能是允许控制台模式的程序使用微软的标准C运行时间库(MSVCRT.DLL),该库在所有的 NT OS 上有效,在所有的 Windows 95 发行版以上的 Windows OS 有效,使用基本运行时间,你可以使用 GCC 写控制台模式的符合美国标准化组织(ANSI)程序,可以使用微软提供的 C 运行时间扩展。该功能是 Windows32 API 不具备的。下一个组成部分是 w32api 包,它是一组可以使用 Windows32 API 的包含文件和端口库。与基本运行时间相结合,就可以有充分的权利既使用 CRT(C Runtime)又使用 Windows32 API 功能。  

MinGW 官方网站为 http://www.mingw.org
实际上 MinGW 并不是一个 C/C++ 编译器,而是一套 GNU 工具集合。除开 GCC (GNU 编译器集合) 以外,MinGW 还包含有一些其他的 GNU 程序开发工具 (比如 gawk bison 等等)。
开发 MinGW 是为了那些不喜欢工作在 Linux(FreeBSD) 操作系统而留在 Windows 的人(比如我)提供一套符合 GNU 的 GNU 工作环境。
(此前的 cygwin 虽然也是 GNU 的 Windows 移植,但是 cygwin 是有版权的,而不是 GNU。)
所以,使用 MinGW 我们就可以像在 Linux 下一样使用 GNU 程序开发工具。

GCC 就是 MinGW 的核心所在,GCC 是一套支持众多计算机程序语言的编译系统,而且在语言标准的实现上是最接近于标准的。并且 GCC 几乎可以移植到目前所有可用的计算机平台。(我的电脑上就还装有 DevKitPro,里面包含 GCC 的 ARM(for GBA/DS/GP32) 和 MIPS(for PSP) 版本。)
GCC 本身不像 VC 那样拥有 IDE 界面(在 Windows 上也存在 Dev C++ 之类的支持 MinGW 编译器的 IDE)。源代码编辑你可以选用任何你喜欢的文本编辑器(据说微软的开发人员包括 VC 的开发都不用 VC 所带的 IDE 编辑器,而是选用 GNU 的 VIM 编辑器)。然后使用 make 等工具来进行软件项目的编译、链接、打包乃至发布。而像 cvs(svn) 源代码版本控制工具可以让世界上任何一个角落的人都可以参与到软件项目中来。

关于 MFC,微软基础库类,这个随 VC++ 携带的一个源代码公开的开发包,和其他 Windows 程序开发包是一样的。如果有 VC++ 的授权,你完全可以使用 MFC 的源代码,也就是你使用 GCC 来编译 MFC 程序是完全可以的。
当然,GNU 下也很多 Windows 程序开发包,甚至有一些是支持跨平台使用的。不仅仅可以直接把源代码编译为 Windows 程序,也可以不经修改编译为其他操作系统的图形程序。
不过 GNU 下,最流行的图形界面开发库是 GTK+。GTK+ 也能很好的运行在 Windows 平台(比如 GIMP 和 Gaim)。
总体说来,使用 MinGW 就是 GNU。

--------------------------------------------------------------

cygwin

是一个在windows平台上运行的unix模拟环境,是cygnus solutions公司开发的自由软件(该公司开发了很多好东西,著名的还有eCos,不过现已被Redhat收购)。它对于学习unix/linux操作环境,或者从unix到windows的应用程序移植,或者进行某些特殊的开发工作,尤其是使用gnu工具集在windows上进行嵌入式系统开发,非常有用。随着嵌入式系统开发在国内日渐流行,越来越多的开发者对cygwin产生了兴趣。

cygnus当初首先把gcc,gdb,gas等开发工具进行了改进,使他们能够生成并解释win32的目标文件。然后,他们要把这些工具移植到windows平台上去。一种方案是基于win32 api对这些工具的源代码进行大幅修改,这样做显然需要大量工作。因此,他们采取了一种不同的方法——他们写了一个共享库(就是cygwin dll),把win32 api中没有的unix风格的调用(如fork,spawn,signals,select,sockets等)封装在里面,也就是说,他们基于win32 api写了一个unix系统库的模拟层。这样,只要把这些工具的源代码和这个共享库连接到一起,就可以使用unix主机上的交叉编译器来生成可以在windows平台上运行的工具集。以这些移植到windows平台上的开发工具为基础,cygnus又逐步把其他的工具(几乎不需要对源代码进行修改,只需要修改他们的配置脚本)软件移植到windows上来。这样,在windows平台上运行bash和开发工具、用户工具,感觉好像在unix上工作。

注:
VM是虚拟多个,而Cygwin是同时使用Windows和UNIX。

--------------------------------------------------------

GNU

是一个自由软件工程项目。下面的文字没有具体解释GNU是哪几个单词的所写,但从整体上说明了GNU工程是怎么回事,希望对你有帮助。
GNU工程已经开发了一个被称为“GNU”(GNU是“不是UNIX”的缩写)的、对Unix向上兼容的完整的自由软件系统(free software system)。由Richard Stallman完成的最初的GNU工程的文档被称为‘GNU宣言’,该宣言已经被翻译成多种其它语言。我们还有创作与1983年的GNU工程创始宣言。
上述单词“free”指的是自由(freedom),而不是价格。你可能需要或者不需要为获取GNU软件而支付费用。不论是否免费,一旦你得到了软件,你在使用中就拥有三种特定的自由。首先是复制程序并且把它送给你的朋友或者同事的自由;而后是通过获取完整的源代码,按照你的意愿修改程序的自由;最后是发布软件的改进版并且有助于创建自由软件社团的自由。(如果你重新发布 GNU软件,你可能对分发拷贝这项体力劳动收费,也可能不收费。)

在1983年构思GNU工程是为了提供一种找回在计算机界早期的盛行的合作精神的方式--为了使合作成为可能而排除有私有软件所有者给合作造成的障碍。

在1971年,当Richard Stallman开始他在MIT的职业生涯时,他工作于一个专门使用自由软件的工作组。即使计算机公司也经常发布自由软件。程序员可以自由地相互合作,就象他们通常所作的那样。

到了80年代,几乎所有的软件都是私有的,这意味着它有一个不允许并且预防用户合作的拥有者。这就使得GNU工程成为必要的了。

每个计算机的使用者都需要一个操作系统;如果没有自由的操作系统,那么如果你不求助于私有软件,你甚至不能开始使用一台计算机。所以自由软件议事日程的第一项就是自由的操作系统。

一个操作系统不仅仅是一个内核;它还包括编译器、编辑器、文本排版程序,电子邮件软件,和许多其他东西。因此,创作一个完整的操作系统是一乡十分庞大的工作。它将耗费太多的年头。

由于Unix的全局设计已经得到认证并且广泛流传,我们决定使操作系统与Unix兼容。同时这种兼容性使Unix的使用者可以容易地转移到GNU上来。

自由的,类似于Unix的内核的初始目标已经达到了。到90年代,我们已经发现或者完成了除了内核之外的所有主要成分。而Linux,一个自由的内核,由Linux Torvalds开发了。把Linux和几乎完成的GNU 系统结合起来,就构成了一个完整的操作系统:一个基于Linux的GNU系统。估计目前大约有十万人在使用基于Linux的GNU系统,包括Slackware、Debian、Red Hat以及其它。

然而,GNU工程并不限于操作系统。我们的目标是提供所有类型的软件,无论有多少用户需要它。这包括了应用软件。我们已经有了电子表格。我们希望在未来把GNU Emacs扩展为所见即所得的桌面出版系统。

我们还想为不是计算机专家的用户提供软件。为此我们正在创作‘拖放图标桌面’以帮助初学者使用 GNU系统。

我们还希望提供游戏和其它娱乐。已经由一些游戏可以使用了。

自由软件可以走多远?这没有限制,除非诸如版权法之类的法律完全地禁止自由软件。最终的目的是,让自由软件完成计算机用户希望完成的所有工作--从而导致自由软件的过时

------------

GNU是“GNU's Not Unix”的递归缩写。Stallman宣布GNU应当发音为Guh-NOO以避免与new这个单词混淆(注:Gnu在英文中原意为非洲牛羚,发音与new相同)。UNIX是一种广泛使用的商业操作系统的名称。由于GNU将要实现UNIX系统的接口标准,因此GNU计划可以分别开发不同的操作系统部件。GNU计划采用了部分当时已经可自由使用的软件,例如TeX排版系统和X Window视窗系统等。不过GNU计划也开发了大批其他的自由软件。
为保证GNU软件可以自由地“使用、复制、修改和发布”,所有GNU软件都在一份在禁止其他人添加任何限制的情况下授权所有权利给任何人的协议条款,GNU通用公共许可证(GNU General Public License,GPL)。这个就是被称为“反版权”(或称Copyleft)的概念。

http://zhidao.baidu.com/question/6479403.html?si=1&wtp=wk

---------------------------------------------------------------------------

Linux内核


Linux是最受欢迎的自由电脑操作系统内核。它是一个用C语言写成,符合POSIX标准的类Unix操作系统。

Linux最早是由芬兰黑客 Linus Torvalds为尝试在英特尔x86架构上提供自由免费的类Unix操作系统而开发的。该计划开始于1991年,这里有一份Linus Torvalds当时在Usenet新闻组comp.os.minix所登载的贴子,这份著名的贴子标志着Linux计划的正式开始。
在计划的早期有一些Minix 黑客提供了协助,而今天全球无数程序员正在为该计划无偿提供帮助。


技术上说Linux是一个内核。“内核”指的是一个提供硬件抽象层、磁盘及文件系统控制、多任务等功能的系统软件。一个内核不是一套完整的操作系统。一套基于Linux内核的完整操作系统叫作Linux操作系统,或是GNU/Linux。

在Linux 内核中,包括了
进程管理(process management)、        1
定时器(timer)、             2
中断管理(interrupt management)、 3
内存管理(memory management)、        4
模块管理(module management)、        5
虚拟文件系统接口(VFS layer)、        6
文件系统(file system)、          7
设备驱动程序(device driver)、        8
进程间通信(inter-process communication)、9
网络管理(network management)、        10
系统启动(system init)等操作系统功能的实现。 11   

http://baike.baidu.com/view/573460.htm

i386

首先可以简化一个概念,i386=Intel 80386。其实i386通常被用来作为对Intel(英特尔)32位微处理器的统称。
http://baike.baidu.com/view/1243951.htm

x86

是一个intel通用计算机系列的标准编号缩写,也标识一套通用的计算机指令集合,X与处理器没有任何关系,它是一个对所有*86系统的简单的通配符定义,例如:i386, 586,奔腾(pentium)。


i686指的是Pentium Pro以及此后的Intel IA32 CPU,也就是平常我们所说的P6系列处理器。

i386泛指80386以后的。 是按CPU来分的

-------------------

参考出处:

http://baike.baidu.com/view/3968.html?wtp=tt

http://baike.baidu.com/view/98554.htm

 
     
 
 
个人档案
 
Robot5

地球 
上次登录:
8小时前
加为好友
 
   
 
文章分类
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
     
 
最新照片
 
   
 
文章存档
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
     
 
留言板
 
 

缘份可贵,友情无价, 当网络成为一种文化时尚,遥远的路途已经没有距离,彼此温暧的...
 
 

关于TMS的问题:能不能提供一份TMS IntraWeb Component Pack Pro v3.0.0 repack For D...
 

来看看了
 
     
 
最新评论
 
     
 
我的系列站点
 
 
 
 
     
 
我的搜藏
 
     
 
订阅我的空间
 
已有人次访问本空间
 
订阅RSS  什么是RSS?

您也想拥有这样的空间?请点此申请。
     


©2009 Baidu