昨天,今天,明天,每天的每天,你是否都多懂得一点点...

星期四, 一月 31, 2008

GMAIL 支持AIM登录

刚才随便点了下GMAIL CHAT的OPTIONS,居然可以登入AIM了,于是就登录了一下(试了三次才试对密码)。然后AIM的好友就被加进来了。

星期三, 一月 30, 2008

source insight 贵得离谱

slickedit 安装文件50兆,安装完后130多兆,卖299ESD。
source insight 安装文件不到3兆,安装完后12兆。。。 卖255ESD。 这么点代码。。。怎么这么贵。。。

Vistual studio standard 299USD. 安装文件一张光盘,装完后快两G。

比一比,发现微软的东西还算便宜的了。。。。

星期日, 一月 27, 2008

WINDOWS下的PIPE

总觉得自己懂得PIPE |, 今天要用的时候发现自己并不是太了解。

我一直以为|是把第一个运行的结果直接作为第二个命令的参数,就像这样

echo abc | del

这以为这个命令等于 del abc
但实际上我错了。 第一个命令的结果并不是直接变成跟在第二个命令后面的参数,而是做为第二个命令执行以后要求的参数。

如 sort 命令。 你输入 sort 后,这个命令会停下来,要求你的参数。这种才可以用PIPE给它。
用 < input.txt 这种方法也属于这种情况。

type file | sort 应该会和 sort < file 效果一样。

所以,如果我们想为我们的批处理传递参数的话,我们要在批处理用 set /p var=请输入参数 这一句,就可以用 PIPE给批处理赋参数了。

星期三, 一月 23, 2008

opera 自定义样式表

~= 据说是用空格格开的一个词,但好像不太对
|= 用-号隔开的一个词
*= 好像是万能的,包含某个词

显例,去掉隐藏乱码,因为源码中包含-所以|=可以用.<font style="font-size:0px;color:#FFF"
用*=当然也行.
@charset "utf-8";

font[style|="font"]{display:none !important;}


星期二, 一月 22, 2008

gvim 命令行安静运行脚本

想要在命令行下运行VIM脚本.
gvim -s 脚本 文件 是可以成功的. 这种是NORM方式的脚本.而且一定要进VIM的,不能安静运行.还是会弹出界面.我不想要界面.要界面的话,我手动来算了.

可是 gvim -e -s < 脚本 文件 这种运行EX脚本的命令在WINDOWS下死都不让运行....就是运行后...一点用都没有.


后来终于发现一种方法了....

用  gvim -c "so 脚本" 文件 的方法会弹出界面,但

gvim -e -s -c "so 脚本" 就不会了...在这里, -e -s 完全不是用来导入脚本的,只是用来安静的.嘻嘻.

gvim -e -s -c "so! NORM脚本" 文件名.... 爽

星期五, 一月 18, 2008

Ubuntu 7.10 Gutsy Gibbon安装配置 [推荐] +安装后必备的修改(转)


2007年10月20日 星期六 下午 05:171。修改源并更新ubuntu

在终端执行命令

备份当前的源列表,以便日後需要时恢复:
sudo cp /etc/apt/sources.list /etc/apt/sources.list_backup

编辑源列表
gedit /etc/apt/sources.list
从以下各服务器列表内容中选择一段替换文件中的所有内容,为防止非官方源中软件包不全的问题, 请在sources.list文件中尾部添加一组官方源。
(1)Ubuntu.cn99.com更新服务器(江苏省常州市电信,推荐电信用户使用):
deb http://ubuntu.cn99.com/ubuntu/ gutsy main restricted universe multiverse
deb http://ubuntu.cn99.com/ubuntu/ gutsy-security main restricted universe multiverse
deb http://ubuntu.cn99.com/ubuntu/ gutsy-updates main restricted universe multiverse
deb http://ubuntu.cn99.com/ubuntu/ gutsy-proposed main restricted universe multiverse
deb http://ubuntu.cn99.com/ubuntu/ gutsy-backports main restricted universe multiverse
deb-src http://ubuntu.cn99.com/ubuntu/ gutsy main restricted universe multiverse
deb-src http://ubuntu.cn99.com/ubuntu/ gutsy-security main restricted universe multiverse
deb-src http://ubuntu.cn99.com/ubuntu/ gutsy-updates main restricted universe multiverse
deb-src http://ubuntu.cn99.com/ubuntu/ gutsy-proposed main restricted universe multiverse
deb-src http://ubuntu.cn99.com/ubuntu/ gutsy-backports main restricted universe multiverse
deb http://ubuntu.cn99.com/ubuntu-cn/ gutsy main restricted universe multiverse
(2)中国台湾省台湾大学更新服务器
deb http://ubuntu.csie.ntu.edu.tw/ubuntu/ gutsy main restricted universe multiverse
deb-src http://ubuntu.csie.ntu.edu.tw/ubuntu/ gutsy main restricted universe multiverse
deb http://ubuntu.csie.ntu.edu.tw/ubuntu/ gutsy-updates main restricted universe multiverse
deb-src http://ubuntu.csie.ntu.edu.tw/ubuntu/ gutsy-updates main restricted universe multiverse
deb http://ubuntu.csie.ntu.edu.tw/ubuntu/ gutsy-backports main restricted universe multiverse
deb-src http://ubuntu.csie.ntu.edu.tw/ubuntu/ gutsy-backports main restricted universe multiverse
deb http://ubuntu.csie.ntu.edu.tw/ubuntu/ gutsy-security main restricted universe multiverse
deb-src http://ubuntu.csie.ntu.edu.tw/ubuntu/ gutsy-security main restricted universe multiverse
deb http://ubuntu.csie.ntu.edu.tw/ubuntu/ gutsy-proposed main multiverse restricted universe
deb-src http://ubuntu.csie.ntu.edu.tw/ubuntu/ gutsy-proposed main restricted universe multiverse

保存编辑好的文件,执行以下命令更新
sudo apt-get update #这一步是更新你的源列表,换源後必须执行
sudo apt-get dist-upgrade #这一步是更新软件,如果你对新版本软件的需求不是那么迫切,可以不执行
2。安装语言包
系统 -> 系统管理 -> 语言支持,在列表中的Chinese条目打勾。
同时将默认语言修改为Chinese(中国)并确定。
配置字体,使中文看起来更漂亮(可选)
sudo fontconfig-voodoo -f -s zh_CN
3。安装文泉驿字体(可选)
(1)安装:执行下面的命令前请确保你已经将上面源中ubuntu-cn的源加进去了。
sudo apt-get install xfonts-wqy
(2)安装後应该可以在字体管理器中找到WenQuanYi Bitmap Song字体了,如果你的系统中找不到,请执行下面的命令:
sudo dpkg-reconfigure fontconfig-config
(3)系统总共会问你三个问题,其中第三个为:
Enable bitmapped fonts by default? # 即是否启用Bitmap字体
移动tab键至Yes,回车,字体管理器中就应该有WenQuanYi Bitmap Song字体了。
4。解决PDF电子文档的中文乱码
sudo apt-get install xpdf-chinese-simplified xpdf-chinese-traditional
5。安装JAVA环境支持
打开终端,执行以下命令,或使用Adept/新立得软件管理器,在其中分别搜索"sun-java6-jre"和"sun-java6-jdk"并标记安装。
sudo apt-get install sun-java6-jre

如果空间富裕,建议安装一个JDK。
sudo apt-get install sun-java6-jdk

提示:安装过程中需要你回答是否同意使用协议(终端中红蓝色的提示界面),此时按tab键至OK,再按回车即可正常安装。
设置当前默认的java解释器:
sudo update-alternatives --config java
执行後会出现类似如下的画面:
There are 2 alternatives which provide `java'.

Selection Alternative
-----------------------------------------------
1 /usr/bin/gij-wrapper-4.1
*+ 2 /usr/lib/jvm/java-6-sun/jre/bin/java
Press enter to keep the default[*], or type selection number:
输入 有包含 "sun" 的行的前面的数字。如上面显示,则输入2,然後回车确定。

配置JAVA环境变量:
sudo gedit /etc/environment


在其中添加如下两行:

CLASSPATH=/usr/lib/jvm/java-6-sun/lib
JAVA_HOME=/usr/lib/jvm/java-6-sun

sudo gedit /etc/jvm

将文件中的

/usr/lib/jvm/java-6-sun

这一行填入到配置块的顶部


安装浏览器的JAVA Plugin(可选):

sudo apt-get install sun-java6-plugin

6.安装多媒体解码器
sudo apt-get install audacious audacious-plugins audacious-plugins-extra libdvdcss2 gstreamer0.10-pitfdll gstreamer0.10-plugins-bad
gstreamer0.10-plugins-bad-multiverse gstreamer0.10-plugins-ugly-multiverse
libavcodec1d libavutil1d libcdaudio1 libdvdnav4 libfaad2-0 libfreebob0
libgsm1 libjack0 libmjpegtools0c2a libmms0 libopenspc0 libquicktime1
libsoundtouch1c2
或者:
sudo apt-get install ubuntu-restricted-extras

安装mplayer播放器
sudo apt-get install mplayer-fonts mplayer mplayer-skins mozilla-mplayer

或者:
sudo apt-get install smplayer
7.安装英汉辞典
sudo apt-get install stardict stardict-cdict-gb stardict-cedict-gb stardict-hanzim stardict-langdao-ce-gb stardict-langdao-ec-gb stardict-oxford-gb stardict-xdict-ce-gb stardict-xdict-ec-gb

8.安装设置Firefox浏览器
(1)安装flash插件
sudo apt-get install flashplugin-nonfree

如果不满足条件而你不幸误执行了以上命令,并看到类似下面的消息:

正在设置 flashplugin-nonfree (9.0.48.0.0ubuntu1~7.04.1) ...
Downloading...
--20:47:05--
http://fpdownload.macromedia.com/get/flashplayer/current/install_flash_player_9_
linux.tar.gz
=> `./install_flash_player_9_linux.tar.gz'
Resolving fpdownload.macromedia.com... 122.252.42.70
Connecting to fpdownload.macromedia.com|122.252.42.70|:80...

那么请Ctrl+c结束,然後

sudo apt-get remove --purge flashplugin-nonfree

(2)安装插件/扩展
查看firefox当前所安装的插件,在地址栏中输入:

about:plugins

从这个地址安装多线程下载扩展downthemall :

http://addons.mozine.cn/firefox/89/

从这个地址安装在线观看视频扩展mediawarp :

http://addons.mozine.cn/firefox/116/

从这个地址安装广告过滤扩展Adblock_Plus:

http://addons.mozine.cn/firefox/125/

9。
安装支持BT/电驴/Gnutella1/Gnutella2等下载软件
[编辑] 安装BT下载软件

1. 在Ubuntu中,打开终端,执行以下命令,或使用新立得,在其中搜索azureus并标记安装。

sudo apt-get install azureus

安装完成後的快捷方式在应用程序 -> Interne t-> Azureus,该软件支持Bit Torrent协议。

2. 在Kubuntu中,打开终端,执行以下命令,或使用Adept manager,在其中搜索ktorrent,并标记安装。

sudo apt-get install ktorrent

安装完成後的快捷方式在应用程序 -> Internet -> Ktorrent,该软件支持Bit Torrent协议。


[编辑] 安装电驴下载软件(可选)

安装支持p2p/ftp/http的下载软件mldoneky。

在Ubuntu中,打开终端,执行以下命令,或使用Adept/新立得,在其中搜索并标记安装。

sudo apt-get install kmldonkey mldonkey-server

安装过程中,需要用户配置是否在开机时自动启动:

mldonkey-server(Launch MLDonkey at startup?

这时建议选择"是",以方便进行配置。若选择是以後,在接下来的配置过程中对大部份选项都用默认设置,
不过在设置的帐号密码时,最好重新设置下。安装完mldonkey以後,若想开机不自行启动mldonkey-server,
可以运行sudo dpkg-reconfigure mldonkey-server进行设置。

当完成kmldonkey mldonkey-server的安装以後,可以在firefox或者konqueror等浏览器的地址栏里
输入http://127.0.0.1:4080/ 来直接访问mldonkey,也可以使用快捷方式(应用程序 -> Internet -> KMLDonkey)。

mldonkey缺省只支持电驴(edonkey2000)协议,若要支持BT/ftp/http/Gnutella等协议,需自行在配置菜单里
开启。详细步骤请参考文档或自行摸索。

安装后必备的修改


安装完系统,你可能会发现自己的Ubuntu在启动时没有Usersplash出现,整个启动过程都是黑屏,直到X启动。不要因为看到黑屏就以为系统死机
了,耐心的等待X的启动。如果发现显示器没有信号输出(注意区别于黑屏),动一下鼠标看看。这是Gutsy的一个Bug,解决方法如下:


登录系统后,打开终端(如果你不知道怎么打开,请先看后文),执行下列命令(需要联网) :

sudo cp -p /boot/grub/menu.lst ~/menu.lst-bak && cp -p
/etc/usplash.conf ~/usplash.conf-bak && sudo aptitude install
startupmanager && gksudo startupmanager && echo '--
Please reboot your computer!'
<img src = "http://photo5.yupoo.com/20071019/130910_1003560290.jpg"></img>


其他的:

a. 在右键菜单中加入打开终端:

代码:
sudo apt-get install nautilus-open-terminal

b. 系统服务管理软件:

代码:
sudo apt-get install bum

c. 修改GrubSplash:

到[url]http://www.gnome-look.org下载一个喜欢的grub[/url] splash, 重命名为splash.xpm.gz

代码:
sudo mv splash.xpm.gz /boot/grub/

修改你的/boot/grub/menu.lst,在操作系统选择部分前面添加一行:

代码:
splashimage=(hd0,x)/boot/grub/splash.xpm.gz

d. 修改root用户密码:

代码:
sudo passwd root

e. 安装rar支持:

代码:
sudo apt-get install rar unrar

f. 安装vim,以让它成为我们熟悉的vim,而不是vi。 Very Happy

代码:
sudo apt-get install vim-full

g. 得到块设备的UUID:

代码:
sudo vol_id -u /dev/sdaX

剩下的就靠你自己慢慢摸索了。祝你顺利。


星期四, 一月 17, 2008

curl 使用指南(转)

curl官方网站:
http://curl.haxx.se

Curl是一个很强大的http命令行工具,其功能十分强大。

1) 二话不说,先从这里开始吧!

$ curl http://www.yahoo.com

回车之后, www.yahoo.com 的html就稀里哗啦地显示在屏幕上了 ~

2) 嗯,要想把读过来页面存下来,是不是要这样呢?

$ curl http://www.yahoo.com > page.html

当然可以,但不用这么麻烦的!

用curl的内置option就好,存下http的结果,用这个option: -o

$ curl -o page.html http://www.yahoo.com

这样,你就可以看到屏幕上出现一个下载页面进度指示。等进展到100%,自然就 OK咯

3) 什么什么?!访问不到?肯定是你的proxy没有设定了。

使用curl的时候,用这个option可以指定http访问所使用的proxy服务器及其端口: -x

$ curl -x 123.45.67.89:1080 -o page.html http://www.yahoo.com

4) 访问有些网站的时候比较讨厌,他使用cookie来记录session信息。

像IE/NN这样的浏览器,当然可以轻易处理cookie信息,但我们的curl呢?.....

我们来学习这个option: -D <― 这个是把http的response里面的cookie信息存到一个特别的文件中去

$ curl -x 123.45.67.89:1080 -o page.html -D cookie0001.txt http://www.yahoo.com

这样,当页面被存到page.html的同时,cookie信息也被存到了cookie0001.txt里面了

5)那么,下一次访问的时候,如何继续使用上次留下的cookie信息呢?要知道,很多网站都是靠监视你的cookie信息,来判断你是不是不按规矩访问他们的网站的。

这次我们使用这个option来把上次的cookie信息追加到http request里面去: -b

$ curl -x 123.45.67.89:1080 -o page1.html -D cookie0002.txt -b cookie0001.txt http://www.yahoo.com

这样,我们就可以几乎模拟所有的IE操作,去访问网页了!

6)稍微等等 ~我好像忘记什么了 ~

对了!是浏览器信息

有些讨厌的网站总要我们使用某些特定的浏览器去访问他们,有时候更过分的是,还要使用某些特定的版本 NND,哪里有时间为了它去找这些怪异的浏览器呢!?

好在curl给我们提供了一个有用的option,可以让我们随意指定自己这次访问所宣称的自己的浏览器信息: -A

$ curl -A "Mozilla/4.0 (compatible; MSIE 6.0 ; Windows NT 5.0)" -x 123.45.67.89:1080 -o page.html -D cookie0001.txt http://www.yahoo.com

这样,服务器端接到访问的要求,会认为你是一个运行在Windows 2000上的 IE6.0, 嘿嘿嘿,其实也许你用的是苹果机呢!

而"Mozilla/4.73 [en] (X11; U; Linux 2.2; 15 i686"则可以告诉对方你是一台 PC上跑着的Linux,用的是Netscape 4.73,呵呵呵

7)另外一个服务器端常用的限制方法,就是检查http访问的referer。比如你先访问首页,再访问里面所指定的下载页,这第二次访问的 referer地址就是第一次访问成功后的页面地址。这样,服务器端只要发现对下载页面某次访问的referer地址不是首页的地址,就可以断定那是个盗连了 ~

讨厌讨厌 ~我就是要盗连 ~!!

幸好curl给我们提供了设定referer的option: -e

$ curl -A "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)" -x 123.45.67.89:1080 -e " mail.yahoo.com" -o page.html -D cookie0001.txt http://www.yahoo.com

这样,就可以骗对方的服务器,你是从mail.yahoo.com点击某个链接过来的了,呵呵呵

8)写着写着发现漏掉什么重要的东西了!――- 利用curl 下载文件

刚才讲过了,下载页面到一个文件里,可以使用 -o ,下载文件也是一样。比如,

$ curl -o 1.jpg http://cgi2.tky.3web.ne.jp/~zzh/screen1.JPG

这里教大家一个新的option: -O 大写的O,这么用:

$ curl -O http://cgi2.tky.3web.ne.jp/~zzh/screen1.JPG

这样,就可以按照服务器上的文件名,自动存在本地了!

再来一个更好用的。

如果screen1.JPG以外还有screen2.JPG、screen3.JPG、....、screen10.JPG需要下载,难不成还要让我们写一个script来完成这些操作?

不干!

在curl里面,这么写就可以了:

$ curl -O http://cgi2.tky.3web.ne.jp/~zzh/screen[1-10].JPG

呵呵呵,厉害吧?! ~

9)再来,我们继续讲解下载!

$ curl -O http://cgi2.tky.3web.ne.jp/~{zzh,nick}/[001-201].JPG

这样产生的下载,就是

~zzh/001.JPG
~zzh/002.JPG
...
~zzh/201.JPG
~nick/001.JPG
~nick/002.JPG
...
~nick/201.JPG

够方便的了吧?哈哈哈

咦?高兴得太早了。

由于zzh/nick下的文件名都是001,002...,201,下载下来的文件重名,后面的把前面的文件都给覆盖掉了 ~

没关系,我们还有更狠的!

$ curl -o #2_#1.jpg http://cgi2.tky.3web.ne.jp/~{zzh,nick}/[001-201].JPG

―这是.....自定义文件名的下载? ―对头,呵呵!

这样,自定义出来下载下来的文件名,就变成了这样:原来: ~zzh/001.JPG ―-> 下载后: 001-zzh.JPG 原来: ~nick/001.JPG ―-> 下载后: 001-nick.JPG

这样一来,就不怕文件重名啦,呵呵

9)继续讲下载

我们平时在windows平台上,flashget这样的工具可以帮我们分块并行下载,还可以断线续传。curl在这些方面也不输给谁,嘿嘿

比如我们下载screen1.JPG中,突然掉线了,我们就可以这样开始续传

$ curl -c -O http://cgi2.tky.3wb.ne.jp/~zzh/screen1.JPG

当然,你不要拿个flashget下载了一半的文件来糊弄我 别的下载软件的半截文件可不一定能用哦 ~

分块下载,我们使用这个option就可以了: -r

举例说明

比如我们有一个http://cgi2.tky.3web.ne.jp/~zzh/zhao1.mp3 要下载(赵老师的电话朗诵)我们就可以用这样的命令:

$ curl -r 0-10240 -o " zhao.part1" http:/cgi2.tky.3web.ne.jp/~zzh/zhao1.mp3 &\
$ curl -r 10241-20480 -o "zhao.part1" http:/cgi2.tky.3web.ne.jp/~zzh/zhao1.mp3 &\
$ curl -r 20481-40960 -o "zhao.part1" http:/cgi2.tky.3web.ne.jp/~zzh/zhao1.mp3 &\
$ curl -r 40961- -o "zhao.part1" http:/cgi2.tky.3web.ne.jp/~zzh/zhao1.mp3

这样就可以分块下载啦。不过你需要自己把这些破碎的文件合并起来如果你用UNIX或苹果,用 cat zhao.part* > zhao.mp3就可以如果用的是Windows,用copy /b 来解决吧,呵呵

上面讲的都是http协议的下载,其实ftp也一样可以用。用法嘛,

$ curl -u name:passwd ftp://ip:port/path/file

或者大家熟悉的

$ curl ftp://name:passwd@ip:port/path/file

10) 说完了下载,接下来自然该讲上传咯上传的option是 -T

比如我们向ftp传一个文件:

$ curl -T localfile -u name:passwd ftp://upload_site:port/path/

当然,向http服务器上传文件也可以比如

$ curl -T localfile http://cgi2.tky.3web.ne.jp/~zzh/abc.cgi

注意,这时候,使用的协议是HTTP的PUT method

刚才说到PUT,嘿嘿,自然让老服想起来了其他几种methos还没讲呢! GET和POST都不能忘哦。

http提交一个表单,比较常用的是POST模式和GET模式

GET模式什么option都不用,只需要把变量写在url里面就可以了比如:

$ curl http://www.yahoo.com/login.cgi?user=nickwolfe&password=12345

而POST模式的option则是 -d

比如,

$ curl -d "user=nickwolfe&password=12345" http://www.yahoo.com/login.cgi

就相当于向这个站点发出一次登陆申请 ~

到底该用GET模式还是POST模式,要看对面服务器的程序设定。

一点需要注意的是,POST模式下的文件上的文件上传,比如

<form method="POST" enctype="multipar/form-data" action=" http://cgi2.tky.3web.ne.jp/~zzh/up_file.cgi">
<input type=file name=upload>
<input type=submit name=nick value="go">
</form>

这样一个HTTP表单,我们要用curl进行模拟,就该是这样的语法:

$ curl -F upload=@localfile -F nick=go http://cgi2.tky.3web.ne.jp/~zzh/up_file.cgi

罗罗嗦嗦讲了这么多,其实curl还有很多很多技巧和用法比如 https的时候使用本地证书,就可以这样

$ curl -E localcert.pem https://remote_server

再比如,你还可以用curl通过dict协议去查字典 ~

$ curl dict://dict.org/d:computer

最佳VIM技巧(转)

;:+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;:文档来源: http://www.rayninfo.co.uk/vimtips.html
;:翻译参考: 没有记,请原作者见谅
;:文档日期: 2006-10-13 11:19:04
;:更新记录:
;:作  者: li3
;:生成工具: 2Html.vim
;:blog.asp?name=li3
;:+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

;:--------------------------------------------------------------------------------
;:如果你使用的是MS-Windows,可能有的键已经被定义为Windows中的一些默认功能键。如果不
;:想这样,请编辑$VIM\mswin.vim
;:--------------------------------------------------------------------------------
/joe/e ;: 设置光标到匹配"joe"的末尾
/joe/e+1 ;: 设置光标到匹配"joe"的末尾再后移一位
/joe/s-2 ;: 设置光标到匹配"joe"的开头再前移两位
/joe/+3 ;: 搜索"joe" 找到后将光标下移3行
/^joe.*fred.*bill/ ;: 匹配以'j'开头且"joe"到"fred"到"bill"之间至少有一个字符
/^[A-J]\+/ ;: 搜索行首非'A'到'J'重复一次以上的行
/begin\_.*end ;: 多行匹配
/fred\_s*joe/i ;: 多行搜索可以是任何空白字符包括\n,\t等等
/fred\|joe ;: 搜索fred或者joe
/.*fred\&.*joe ;: 搜索同时包括fred跟joe的行
/\<fred\>/i ;: 搜索独立的单词fred
/\<\d\d\d\d\> ;: 搜索独立的4位数字
/\D\d\d\d\d\D ;: 搜索恰好4位的数字
/\<\d\\> ;: 同/\<\d\d\d\d\>
/\([^0-9]\|^\)%.*% ;: 查找以非0~9数字或在行首的%%所包括的内容
;:" 查找空行
/^\n\ ;: 匹配三连续的空行
;:" 使用正则表达式组查找
/\(fred\).*\(joe\).*\2.*\1
;:" 正则表达式重复
/^\([^,]*,\)\
;:" visual 下搜索
:vmap // y/<C-R>"<CR> ;: visually模式下的键盘映射,把//映射成匹配当前选中的文本
:vmap <silent> // y/<C-R>=escape(@",'\\/.*$^~[]')<CR><CR> ;: 包括空白字符
;:" \zs 和 \ze 匹配原 :h /\zs
/<\zs[^>]*\ze> ;: 匹配<与>所包含的内容
;:" 零宽度匹配 :h /\@=
/<\@<=[^>]*>\@= ;: 查找<与>所包含的内容
/<\@<=\_[^>]*>\@= ;: 多行匹配<与>所包含的内容
;:" 多行查找 \_ 的意思是包括换行符
/<!--\_p\--> ;: 匹配<与>所包含的所有内容
/fred\_s*joe/i ;: 匹配fred开始到joe,之间一定得是空白字符
/bugs\(\_.\)*bunny ;: 匹配所有bugs到bunny的字符串
:h \_ ;: help
;:" 查找函数声明,nmap为normal模式下的键盘映射
:nmap gx yiw/^\(sub\<bar>function\)\s\+<C-R>"<CR>
;:" 查找多个文件
:bufdo /searchstr/ ;: 在多个文件缓冲区里执行查找
;:" 更好的多文件查找定位方法
:bufdo %s/searchstr/&/gic ;: 在多个文件缓冲区里查找,按下n停止
;:" 怎样不使用 / 来查找网址
?http://www.vim.org/ ;: 向后查找
;:" 查找指定字符以外的字符串
/\c\v([^aeiou]&\a) ;: 查找4个辅音字母
;:-----------------------------------------------------------------------------
;:#替换
:%s/fred/joe/igc ;: 普通替换命令
:%s/\r//g ;: 删除 DOS 的换行符 ^M
;:" 你的文本文件是否乱七八糟的排成一行?使用如下命令
:%s/\r/\r/g ;: 转换 DOS 回车符 ^M 为真正的回车符
:%s= *$== ;: 删除行尾空白
:%s= \+$== ;: 同上
:%s#\s*\r\?$## ;: 删除尾部空白和dos换行符
:%s#\s*\r*$## ;: 同上
;:" 删除空行
:%s/^\n\// ;: 删除连续3个空行
:%s/^\n\+/\r/ ;: 压缩空行,多个替换为一个
:%s#<[^>]\+>##g ;: 删除html的tag部分
:%s#<\_.\>##g ;: 多行删除 html 的tags (非贪婪方式)
;:" IF YOU ONLY WANT TO KNOW ONE THING
:'a,'bg/fred/s/dick/joe/igc ;: 非常有用
;# 译释:''a,''b指定一个范围:mark a ~ mark b
;# g//用一个正则表达式指出了进行操作的行必须可以被fred匹配
;# 看后面,g//是一个全局显示命令
;# s/dick/joe/igc则对于这些满足条件的行进行替换
;:" 复制列
:%s= [^ ]\+$=&&= ;: 复制最后一列
:%s= \f\+$=&&= ;: 复制最后一列
:%s= \S\+$=&& ;: 复制最后一列
;:" 记忆(反向引用)
:s/\(.*\):\(.*\)/\2: \1/ ;: 将两个字段颠倒
:%s/^\(.*\)\n\1$/\1/ ;: 删除重复行
;:" 非贪婪匹配 \
:%s/^.\pdf/new.pdf/ ;: 删除第一个pdf
;:" use of optional atom \?
:%s#\<[zy]\?tbl_[a-z_]\+\>#\L�gc ;: lowercase with optional leading characters
;:" 跨越尽量多的行
:%s/<!--\_.\-->// ;: 删除多行注释
:help /\ ;: 查看非贪婪匹配的更多帮助
;:" 使用寄存器替换
:s/fred/<c-r>a/g ;: 将fred替换为寄存器a里的内容 #<c-r>为按下Ctrl与r
:s/fred/<c-r>asome_text<c-r>s/g
:s/fred/\=@a/g ;: 比较好的办法,不显示替换内容
;:" 在一行里写多种命令
:%s/\f\+\.gif\>/\r&\r/g | v/\.gif$/d| %s/gif/jpg/
:%s/a/but/gie|:update|:next ;: 当使用 @: 来重复
;:" 或运算
:%s/suck\|buck/loopy/gc ;: 替换suck或者buck(这里|不是管道)
;:" 调用vim函数
:s/__date__/\=strftime("%c")/ ;: 将__date__替换成当前日期,使用strftime函数
;:" 处理列,替换所有在第三列中的str1
:%s:\(\(\w\+\s\+\)\\)str1:\1str2:
;:" 交换第一列跟第四列
:%s:\(\w\+\)\(.*\s\+\)\(\w\+\)$:\3\2\1:
;:" 过滤form中的内容放在寄存器里
:redir @*|sil exec 'g#<\(input\|select\|textarea\|/\=form\)\>#p'|redir END
:nmap ,z :redir @*<Bar>sil exec 'g@<\(input\<Bar>select\<Bar>textarea\<Bar>/\=form\)\>@p'<Bar>redir END<CR>
;:" 两位以上的数字减三(带进位。这个命令挺有趣)
:%s/\d\+/\=(submatch(0)-3)/
;:" 包含loc或者functions的行中的数字加6
:g/loc\|function/s/\d/\=submatch(0)+6/
;:" 比上面更好的方法
:%s#txtdev\zs\d#\=submatch(0)+1#g
:h /\zs ;查看帮助
;:" 前缀为gg的数字加6
:%s/\(gg\)\@<=\d\+/\=submatch(0)+6/
:h zero-width ;查看帮助
;:" 替换一个特定字符串为数字
:let i=10 | 'a,'bg/Abc/s/yy/\=i/ |let i=i+1 ;# 将yy转换成10,11,12等等
;:" 比上面的更精确
:let i=10 | 'a,'bg/Abc/s/xx\zsyy\ze/\=i/ |let i=i+1 # 将xxyy 转换成 xx11,xx12,xx13
;:" 将查找内容放入内存,然后用\zs进行简单替换
:%s/"\([^.]\+\).*\zsxx/\1/
;:" 将xx替换为此行内容
:nmap <leader>z :%s#\<<c-r>=expand("<cword>")<cr>\>#
;:" 将Vis选中的内容用<>括起来
:vmap <leader>z :<C-U>%s/\<<c-r>*\>/
;:-----------------------------------------------------------------------------
;:" 下面举一些在替换中使用替换的例子
;:" 多种分符可以被用在替换中
:%s,\(all/.*\)\@<=/,_,g ;: 用 _ 替换 "all/"之后的 /
;:" 同样的功能
:s#all/\zs.*#\=substitute(submatch(0), '/', '_', 'g')#
:s#all/#&^M#|s#/#_#g|-j! ;" 查找断行,并合并为一行
;:" 在替换命令中使用替换
:%s/.*/\='cp '.submatch(0).' all/'.substitute(submatch(0),'/','_','g')/
;:-----------------------------------------------------------------------------
;:" 全局显示命令
:g/gladiolli/# ;: 查找并显示匹配的行号
:g/fred.*joe.*dick/ ;: 显示所有含有 fred,joe & dick的行
:g/\<fred\>/ ;: 显示单一单词fred
:g/^\s*$/d ;: 删除所有空行
:g!/^dd/d ;: 删除不含字符串''dd''的行
:v/^dd/d ;: 同上
:g/fred/,/joe/d ;: 删除所有的从fred到joe
:g/-------/.-10,.d ;: 以-------为标记删除之前的10行
:g/{/ ,/}/- s/\n\+/\r/g ;: 删除 之间的空行
:v/\S/d ;: 删除空行
:v/./,/./-j ;: 压缩空行
:g/^$/,/./-j ;: 同上
:g/<input\|<form/p ;: 或运算
:g/^/put_ ;: 双倍行宽 (pu = put)
:g/^/m0 ;: 颠倒文件 (m = move)
:'a,'bg/^/m'b ;: 颠倒选中的 a 到 b
:g/^/t. ;: 重复行
:g/fred/t$ ;: 拷贝行从fred到结尾
:g/stage/t'a ;: 拷贝行从stage 到 marker a(a为标记的位置)
:g/\(^I[^^I]*\)\/d ;: 删除最少包含80个tab的行
;:" 隔行替换
:g/^/ if line('.')%2|s/^/zz /
;:" 查找标记a与b 间所有包含 "somestr"
;:" 复制所有"otherstr"后的行
:'a,'bg/somestr/co/otherstr/ ;: co(py) or mo(ve)
:'a,'bg/str1/s/str1/&&&/|mo/str2/ ;" 范围同上,进行替换
:%norm jdd ;: 隔行删除
;:" 增加数字 (键入 <c-a>) ;#在MS-Windows中<c-a>已经被定义为全选
:.,$g/^\d/exe "norm! \<c-a>" ;: 增加从当前行首到结尾的数字
:'a,'bg/\d\+/norm! ^A ;: 增加数字
;:" 保存全局命令的结果 (注意必须使用添加模式) 你需要使用 qaq 清空寄存器a.
;:"save results to a register/paste buffer 存储结果到 寄存器/粘贴 到 a
:g/fred/y A ;: 添加配备行到寄存器到 a
:g/fred/y A | :let @*=@a ;: 放入复制缓冲区
:let @a=''|g/Barratt/y A |:let @*=@a
:'a,'b g/^Error/ . w >> errors.txt ;" 将查找内容放入一个文件 (文件必须存在)
;:" 复制每一行,然后在复制出来的每一行两侧加上一个 print '复制出来的内容'
:g/./yank|put|-1s/'/"/g|s/.*/Print '&'/
;:" 用文件中的内容替换字符串,-d 表示删除"标记"
:g/^MARK$/r tmp.ex | -d
;:" 精致的显示方法
:g/<pattern>/z#.5 ;: 带行号显示
:g/<pattern>/z#.5|echo "==========" ;: 漂亮的显示
;:" 用 g// 执行正常命令
:g/|/norm 2f|r* ;: 替换第二个|为*
;:" 在新窗口中显示查找结果
:nmap <F3> :redir @a<CR>:g//<CR>:redir END<CR>:new<CR>:put! a<CR><CR>
;:-----------------------------------------------------------------------------
;:" 全局命令和替换命令联姻 (强大的编辑能力)
:'a,'bg/fred/s/joe/susan/gic ;: 可以使用反向引用来匹配
:g/fred/,/joe/s/fred/joe/gic ;: 非行模式
;:-----------------------------------------------------------------------------
;:" 先找fred,然后找joe
:/fred/;/joe/-2,/sid/+3s/sally/alley/gIC
;:-----------------------------------------------------------------------------
;:" create a new file for each line offile eg 1.txt,2.txt,3,txt etc
;:" 将每一行的内容存成一个文件,文件名为 行号.txt 如 1.txt,2.txt 等
:g/^/exe ".w ".line(".").".txt"
;:-----------------------------------------------------------------------------
;:" 绝对精华
;:-----------------------------------------------------------------------------
* # g* g# ;: 查找当前光标下的单词(单个单词) (<cword>) (向前/向后)
% ;: 匹配括号 {}[]()
. ;: 重复上次操作
@: ;: 重复上次的命令
matchit.vim ;: 适%能匹配 <script> <?php等标记
<C-N><C-P> ;: 插入模式下自动完成填词
<C-X><C-L> ;: 行自动完成(超级有用)
/<C-R><C-W> ;: 把单个<cword>单词放入搜索或者命令行
/<C-R><C-A> ;: 把字符串中有的单词<CWORD>放入搜索或者命令行
:set ignorecase ;: 忽略大小写
:syntax on ;: 打开语法高亮 Perl,HTML,PHP 等等
:h regexp<C-D> ;: 按ctrl+d得到包含regexp的列表
;: (按tab自动不齐)
;:-----------------------------------------------------------------------------
;:" 简单编辑更新 _vimrc文件
:nmap ,s :source $VIM/_vimrc ;:普通模式下的键盘映射 ,s映射成加载用户目录下的_vimrc文件
:nmap ,v :e $VIM/_vimrc ;:,v映射成打开_vimrc文件
;:-----------------------------------------------------------------------------
;:#VISUAL 模式 (方便增加 HTML 标签)
:vmap sb "zdi<C-R>z<ESC> ;: 在 VISUALLY模式下将选中的文本前后分别加上
:vmap st "zdi<?= <C-R>z ?><ESC> ;: 加上 <?= ?>
;:-----------------------------------------------------------------------------
;:"vim 7 tabs
vim -p fred.php joe.php ;: 在新tab中打开文件
:tabe fred.php ;: 在新tab中打开 fred.php
:tab ball ;: 每一个文件一个tab
;:" vim 7 .vimrc 配置使用tabs
:nnoremap gf <C-W>gf
:cab e tabe

;:-----------------------------------------------------------------------------
;:" 浏览
:e . ;: 文件浏览器
:Exp(lore) ;: 浏览文件
:Sex(plore) ;: 分割窗口浏览文件
:browse e ;: 打开windows 的 '选择文件'对话
:ls ;: 显示缓冲区
:cd .. ;: 设置当前目录位置
:args ;: 查看当前打开的所有文件
:args *.php ;: 打开所有 *.php文件
:lcd %:p:h ;: 改变路径到当前编辑的文件
:autocmd BufEnter * lcd %:p:h ;: 放入.vimrc自动完成上面的命令
;:-----------------------------------------------------------------------------
;:" 缓冲区浏览(一直排名前10的vim脚本)
;:" 需要 bufexplorer.vim http://www.vim.org/script.php?script_id=42
\be ;: 缓冲浏览器中查看缓冲列表
\bs ;: 同上,但是分割窗口
;:-----------------------------------------------------------------------------
;:" 转换大小写
guu ;: 将正行的字母转换成小写
gUU ;: 将正行的字母转换成大写
Vu ;: 转换选中的行(小写)
VU ;: 转换选中的行(大写)
g~~ ;: 反向转换
vEU ;: 转换词大写
vE~ ;: 反向转换词
ggguG ;: 将当前编辑文件内容全部转换成小写
;:" Visually 模式下选择所有的字母及数字 (放入 .vimrc文件中)
vmap ,c :s/\<\(.\)\(\k*\)\>/\u\1\L\2/g<CR>
:%s/[.!?]\_s\+\a/\U&\E/g ;:" 大写所有句子的第一个字母
;:-----------------------------------------------------------------------------
gf ;: 打开当前光标下或后的文件
:nnoremap gF :view <cfile><cr> ;: 打开当前光标下或后的文件, 如果不存在则创建
ga ;: 显示当前光标下单个字的ascii,十进制,十六进制……
ggVGg? ;: 将整个文件用rot13编码……(谁看得懂啊~~hoho)
ggg?G ;: 同上 (针对大文件)
:8 | normal VGg? ;: 将第八行用rot13编码
:normal 10GVGg? ;: 同上
<C-A>,<C-X> ;: 增加,减少当前光标下的数字
;: win32 用户需要重定义 CNTRL-A
<C-R>=5*5 ;: 插入25 (小型计算器)
;:-----------------------------------------------------------------------------
;:" 几个彩蛋……
:h 42 ;: also http://www.google.com/search?q=42
:h holy-grail
:h!
;:-----------------------------------------------------------------------------
;:" 标记 & 移动
'. ;: 跳回最后编辑的行 (超有用)
`. ;: 同上,但是定位编辑点
g; ;: 跳转到比较旧的编辑位置(如果有的话) (vim6.3后的新功能)
g, ;: 这个是较心的位置 (同上)
:changes :打出改变表
:h changelist ;: 查看"改变表跳转"的帮助
<C-O> ;: 依次沿着你的跳转记录向回跳 (从最近的一次开始)
<C-I> ;: 依次沿着你的跳转记录向前跳
:ju(mps) ;: 列出跳转轨迹
:help jump-motions
:history ;: 列出历史记录
:his c ;: 命令行历史
:his s ;: 搜索历史
q/ ;: 搜索命令历史的窗口
q: ;: 命令行命令历史的窗口
:<C-F> ;: 历史窗口
;:-----------------------------------------------------------------------------
;:" 缩写 & 映射
:map <f7> :'a,'bw! c:/aaa/x
:map <f8> :r c:/aaa/x
:map <f11> :.w! c:/aaa/xr<CR>
:map <f12> :r c:/aaa/xr<CR>
:ab php ;: 查看以php开头的缩写
:map , ;: 列出所有的映射(以逗号开始的)
;:" 允许映射 F10 (win32)
set wak=no ;: :h winaltkeys
;:" 映射中常使用的表示
<CR> ;: 回车
<ESC> ;: Esc
<LEADER> ;: 右斜杠
<BAR> ;: 管道符号
<BACKSPACE> ;: 退格键
<SILENT> ;: 不回显
#显示自定义的 RGB 颜色显示当前光标下的字符串 例如 #445588
:nmap <leader>c :hi Normal guibg=#<c-r>=expand("<cword>")<cr><cr>
:map <f2> /price only\\|versus/ :在map中需要用反斜线 \
;:-----------------------------------------------------------------------------
;:" 简单的 PHP 调试将所有显示的变量放入寄存器a
iab phpdb exit("<hr>Debug <C-R>a ");
;:-----------------------------------------------------------------------------
;:" 使用寄存器来映射 (放入 .vimrc文件自动加载)
:let @m=":'a,'bs/"
:let @s=":%!sort -u"
;:-----------------------------------------------------------------------------
;:" 列出寄存器
:reg ;: 显示当前所有的寄存器
:reg a ;: 显示寄存器a中的内容
;:"1p.... ;: 引用一个叫1的寄存器
:let @y='yy@"' ;: pre-loading registers (put in .vimrc)
qqq ;: 清空寄存器 "q"
;:-----------------------------------------------------------------------------
;:" 一些有用的决窍
;:"ayy@a ;: 把当前行作为命令执行
yy@" ;: 上面的匿名寄存器
u@. ;: 只执行键入的命令
;:-----------------------------------------------------------------------------
;:" 从其它命令处获得输入(需要外部命令)
:r!ls.exe ;: 从ls 获得输入插入到当前位置
!!date ;: 从date获得输入(删除当前行)
;:" 使用外部sort排序
:%!sort -u ;: 用sort排序整个文件(结果覆盖整个文件)
:'a,'b!sort -u ;: 从mark a到mark b之间的内容进行排序
!1} sort -u ;: 排序一个段落
:g/^$/;,/^$/-1!sort ;: 排序一个选中内容 ( ; 号非常重要)
;:-----------------------------------------------------------------------------
;:" 多文件管理 (基本的)
:bn ;: 跳转到下一个buffer
:bp ;: 跳转到前一个buffer
:wn ;: 保存当前buffer并跳转到下一个buffer (超有用)
:wp ;: 保存当前buffer并跳转到前一个buffer
:bd ;: 把当前文件从buffer移出 (超有用)
:bun ;: 卸载当前buffer (关闭这个窗口但是不移出)
:badd file.c ;: 添加file.c到buffer列表
:b 3 ;: 前往第三个 buffer
:b main ;: 前往含有main的buffer中 比如说 main.c
:sav php.html ;: 把当前文件存为php.html并打开
:sav! %<.bak ;: 换一个后缀名保存 (旧方法)
:sav! %:r.cfm ;: 同上
:sav %:s/fred/joe/ ;: 替换文件名
:sav %:s/fred/joe/:r.bak2 ;: 替换文件和后缀
:!mv % %:r.bak ;: 重命名当前文件
:help filename-modifiers
:e! ;: 打开未修改之前的文件
:w c:/aaa/% ;: 存储文件到指定位置
:e # ;: 编辑标记为#的文件在buffer中
:rew ;: 返回到第一个可编辑的文件
:brew ;: 回到第一个buffer
:sp fred.txt ;: 分割窗口打开fred.txt
:sball,:sb ;: 把所有的 buffers分割显示在一个窗口中 (超有用)
:scrollbind ;: in each split window
:map <F5> :ls<CR>:e # ;: 按F5显示所有buffer, 并显示行号
:set hidden ;: 允许不保存当前buffer而进行切换
;:-----------------------------------------------------------------------------
;:" 在分割窗口中快速切换
map <C-J> <C-W>j<C-W>_
map <C-K> <C-W>k<C-W>_
;:-----------------------------------------------------------------------------
;:" 录制命令 (最好的技巧)
qq ;:# 录制命令放入 q寄存器
.. ;:输入一些命令
q ;:# 录制结束
@q ;:执行放入寄存器q中的内容
@@ ;:重复
5@@ ;:重复5次
;:" 编辑一个 寄存器/录制
"qp ;:显示寄存器q中的内容(普通模式下)
<ctrl-R>q ;:显示寄存器q中的内容 (插入模式下)
;:" 你现在可以看到记录内容,随便编辑
"qdd ;:删除,重新存入q
@q ;:执行 录制/寄存器 q
;:" 在可视块中运行记录
;:1) 定义记录/寄存器
qq:s/ to/ from/g^Mq
;:2) 定义可视块
V}
;:3) 键入 ;: 将显示下面信息
:'<,'>
;:4)完成如下操作
:'<,'>norm @q
;:-----------------------------------------------------------------------------
;:"宏记录的map (命令方式结束)
nnoremap ] @q:w!<bar>bd
;:-----------------------------------------------------------------------------
;:" 可视化模式提供一种灵活易用的方法选择一块文本供操作符使用
;:" 记出
v ;: 进入可视化模式
V ;: 进入可视化行选择模式
<C-V> ;: 进入可视化块选择模式
gv ;: 重新选择
o ;: 选择的区域头尾移动
"*y ;: 复制选择区域到paste buffer
V% ;: 选择一个匹配段
V}J ;: 合并一个段落
V}gJ ;: 合并一个段落,并保留空格
;:-----------------------------------------------------------------------------
;:" 删除选中的10行的前两个字符(不过这里应该假设是紧凑的排版格式,不能包含空格、tab等字符的,可是经实验应该是钱3个字符才对啊??)
0<c-v>10j2ld
;:-----------------------------------------------------------------------------
;:" 如何用可视块拷贝几列
;:" 可视块(并非通常的 v 命令)
<C-V>,然后通过移动命令选择列 (win32 <C-Q>)
然后执行 c,d,y,r 等命令
;:-----------------------------------------------------------------------------
;:"用一个块替换另一个块
复制第一个块: ctrl-v move "ay
复制第二个块: ctrl-v move cctrl-o "aP <esc>
;:-----------------------------------------------------------------------------
;:" _vimrc 基本设置
:set incsearch ;: 输入搜索命令时,立即显示目前输入的模式对应的匹配。匹配的字符串被高亮。
:set wildignore=*.o,*.obj,*.bak,*.exe ;: tab补全时忽略这些忽略这些
:set shiftwidth=3 ;: 设置自动缩进为3个字符
:set vb t_vb=". ;: 安静模式,关闭响铃跟闪烁
:set browsedir=buffer ;: 设置文件浏览使用的目录
;: 注:last 使用文件浏览器最近访问相同的目录。
;: buffer 使用相关缓冲区的目录。
;: current 使用当前目录。
;: 使用指定目录。
;:-----------------------------------------------------------------------------
;:" 启动windows中的IE
:nmap ,f :update<CR>:silent !start c:\progra~1\intern~1\iexplore.exe file://%:p<CR>
:nmap ,i :update<CR>: !start c:\progra~1\intern~1\iexplore.exe <cWORD><CR>
;:-----------------------------------------------------------------------------
;:" 在vim里打开ftp
cmap ,r :Nread ftp://209.51.134.122/public_html/index.html
cmap ,w :Nwrite ftp://209.51.134.122/public_html/index.html
gvim ftp://www.somedomain.com/index.html # 使用 netrw.vim
;:-----------------------------------------------------------------------------
;:" 向寄存器中添加内容 (使用相应寄存器名称的大写)
;:" 复制5行放入a寄存器,然后向下跳转10行再复制5行
"a5yy
10j
"A5yy
;:-----------------------------------------------------------------------------
[I ;: 显示当前行中字符的所有匹配(超级有用)
;:-----------------------------------------------------------------------------
;:" 常规缩进
:'a,'b>> ;: 将mark a到mark b之间的内容进行两次缩进
;:" 虚拟模式下缩进 (可重复)
:vnoremap < <gv ;: 这是一个虚拟模式下的键盘映射
;: < 映射为<gv " < 意为向内缩进,
;: gv 上面已有解释,为重复上次选区
;: <gv 也就是先向内缩进然后再选择刚才的选区
;: 这样就可以只按 < 实现重复缩进了
:vnoremap > >gv ;: 向内缩进,原理同上
;:" 块缩进
>i{
>a{
;:" also
>% and <% ;:自己试试看吧,涉及到用 { 的语言很有用,比如c,c++等
;:-----------------------------------------------------------------------------
;:" 重定向 & 粘贴到寄存器 * (*为寄存器名称)
:redir @* ;: 重定向命令到paste缓冲区
:redir END ;: 结束
:redir >> out.txt ;: 重定向到文件
;:" 操作粘贴缓冲区
"*yy ;: 复制到寄存器
"*p ;: 从寄存器中粘贴一行
;:" 复制到粘贴缓冲区 (扩展模式)
:'a,'by* ;: 复制一个范围到粘贴寄存器
:%y* ;: 复制一个括号匹配到粘贴缓冲区
:.y* ;: 复制当前行到粘贴缓冲区
;:" 从剪贴板上过滤非可打印字符
;:" 当从一些 GUI 程序粘贴时会有用处
:nmap <leader>p :let @* = substitute(@*,'[^[:print:]]','','g')<cr>"*p
;:-----------------------------------------------------------------------------
;:" 重新格式化文本
gq} ;: 合并一个段落
gqap ;: 当前段落
ggVGgq ;: 全部段落
Vgq ;: 当前行
:s/.\;\s*\|.\\s\+/&\r/g ;:" 在70列的时候换行
;:-----------------------------------------------------------------------------
;:" 命令使用于多个文件
:argdo %s/foo/bar/e ;: 在所有文件上操做 :args
:bufdo %s/foo/bar/e
:windo %s/foo/bar/e
:argdo exe '%!sort'|w! ;: 包含外部命令
;:-----------------------------------------------------------------------------
;:" 命令行技巧
gvim -h ;: 显示帮助
ls | gvim - ;: 管道操作
cat xx | gvim - -c "v/^\d\d\|^[3-9]/d " ;: 从管道出过滤内容
gvim -o file1 file2 ;: 分割窗口显示两个文件
;:" 打开文件后执行一条命令
gvim.exe -c "/main" joe.c ;: 打开 joe.c & 跳转到 "main"
;:" 在打开一个文件时执行多条命令
vim -c "%s/ABC/DEF/ge | update" file1.c
;:" 在一组文件上执行多条命令
vim -c "argdo %s/ABC/DEF/ge | update" *.c
;:" 从一系列文件中删除一块区域
vim -c "argdo /begin/+1,/end/-1g/^/d| update" *.c
;:" 自动编辑文件 (编辑命令序列Ex commands已经包含在convert.vim中了)
vim -s "convert.vim" file.c
;:#不加载.vimrc跟任何plugin(干净清新的 VIM^_^)
gvim -u NONE -U NONE -N
;:" Access paste buffer contents (put in a script/batch file)
gvim -c 'normal ggdG"*p' c:/aaa/xp
;:" 将paste中的内容送往默认的打印机
gvim -c 's/^/\=@*/|hardcopy!|q!'
;:" gvim 里的 grep (win32 or *nix)
:grep somestring *.php ;: 创建匹配的文件列表
;:" 使用 :cn(向后后) :cp(向前) 操纵列表
:h grep :查看帮助
;:-----------------------------------------------------------------------------
;:" GVIM 的差异比较
gvim -d file1 file2 ;: vimdiff (比较不差异)
dp ;: 把光标处的不同放到另一个文件
do ;: 在光标处从另一个文件取得不同
;:-----------------------------------------------------------------------------
;:" Vim traps 在正则表达式中 + | ( { 都要加上转义符(反斜杠)
In regular expressions you must backslash + (match 1 or more)
In regular expressions you must backslash | (or)
In regular expressions you must backslash ( (group)
In regular expressions you must backslash { (count)
/fred\+/ ;: 匹配 fred/freddy 但不匹配 free
/\(fred\)\/ ;: note what you have to break
;:-----------------------------------------------------------------------------
;:" \v ,或叫做very magic (通常都是这么叫)可以取消转义符
/codes\(\n\|\s\)*where ;: 普通的正则表达式
/\vcodes(\n|\s)*where ;: very magic
;:-----------------------------------------------------------------------------
;:" 把对象送到命令行或者搜索行
<C-R><C-W> ;: 执行当前光标下的单个单词
<C-R><C-A> ;: 执行当前光标下尽可能多的单词
<C-R>- ;: 送至一个小型寄存器(同样使用于插入模式)
<C-R>[0-9a-z] ;: 送至一个命名寄存器 (括弧同上)
<C-R>% ;: 送至文件名(#也行) (同上)
<C-R>=somevar ;: 送至一个变量 (例如 :let sray="ray[0-9]")
;:-----------------------------------------------------------------------------
;:" 控制寄存器
:let @a=@_ ;: 清除寄存器 a
:let @a="" ;: 同上 a
:let @*=@a ;: 拷贝寄存器 a 到 paste buffer
:let @*=@: ;: 拷贝最后执行的命令到 paste buffer
:let @*=@/ ;: 拷贝最后执行的查找命令到paste buffer
:let @*=@% ;: 拷贝当前文件到 paste buffer
;:-----------------------------------------------------------------------------
;:" 帮助的帮助? (使用 TAB)
:h quickref ;: VIM 快速参考页
:h tips ;: Vim'自己的技巧帮助
:h visual<C-D><tab> ;: 虚拟模式的帮助列表
: 然后使用tab选择它们
:h ctrl<C-D> ;: 所有关于ctrl键的帮助列表
:helpg uganda ;: 过滤帮助文件 使用 :cn, :cp 查找下一个及后一个
:helpgrep edit.*director: grep help using regexp
:h :r ;: 关于 :ex 的命令帮助
:h CTRL-R ;: 普通模式相关
:h /\r ;: \r是什么的意思
:h \\zs ;: 使用双反斜线查找关于 \zs 的帮助
:h i_CTRL-R ;: 在插入模式中 <C-R>的解释
:h c_CTRL-R ;: 在命令模式中 <C-R> 的解释
:h v_CTRL-V ;: 虚拟模式
:h tutor ;: VIM 快速指南
<C-[>, <C-T> ;: Move back & Forth in HELP History
gvim -h ;: VIM 命令行帮助
;:-----------------------------------------------------------------------------
;:" 选项设置在那里
:scriptnames ;: 列出所有已经加载的 plugins, _vimrcs文件
:verbose set history? :显示 history的值并显示在那里定义的
:function ;: 列出所有函数
:func SearchCompl ;: 显示指定函数的细节
;:-----------------------------------------------------------------------------
;:" 制作你自己的VIM 帮助
:helptags /vim/vim64/doc ;: 重新编译所有 *.txt 的帮助文件在这个目录里
:help add-local-help :如何添加本地帮助
;:-----------------------------------------------------------------------------
;:" 用外部程序运行文件 (例如 php)
map <f9> :w<CR>:!c:/php/php.exe %<CR>
map <f2> :w<CR>:!perl -c %<CR>
;:-----------------------------------------------------------------------------
;:" 在另一个buffer中,捕捉当前脚本的输出
:new | r!perl # ;: 新建一个buffer,从另一个buffer中读入结果
:new! x.out | r!perl # ;: 同上,并指定一个新文件名
:new+read!ls
;:-----------------------------------------------------------------------------
;:" 创建一个新的buffer, 粘贴q寄存器,然后对它进行排序
:new +put q|%!sort
;:-----------------------------------------------------------------------------
;:" 插入DOS换行符
:%s/$/\<C-V><C-M>&/g ;: (that's what you type
:%s/$/\<C-Q><C-M>&/g ;: for Win32) 对于Win32应该这样
:%s/$/\^M&/g ;: 你看到的^M是一个字符
;:-----------------------------------------------------------------------------
;:" 自动删除行尾 Dos回车符和空格
autocmd BufRead * silent! %s/[\r \t]\+$//
autocmd BufEnter *.php :%s/[ \t\r]\+$//e
;:-----------------------------------------------------------------------------
;:" 对指定文件或文件类型执行某个动作
autocmd VimEnter c:/intranet/note011.txt normal! ggVGg?
autocmd FileType *.pl exec('set fileformats=unix')
;:-----------------------------------------------------------------------------
;:" 把最后一个命令贴到当前位置
i<c-r>:
;:" 把最后一个搜索指令贴到当前位置
i<c-r>/
;:-----------------------------------------------------------------------------
;:" 更多的完成功能
<C-X><C-F> ;:插入当前目录下的一个文件名到当前位置 # 在insert模式下使用 # 然后用 Ctrl-P/Ctrl-N 翻页
;:-----------------------------------------------------------------------------
;:" 替换一个visual区域
;:" 选择一个区域,然后输入 :s/Emacs/Vim/ 等等,vim会自动进入:模式
:'<,'>s/Emacs/Vim/g ;: 前面的' '<.'> 是vim自动添加的
gv ;: 重新选择前一个可视区域 (ULTRA)
;:-----------------------------------------------------------------------------
;:" 在文件中插入行号
:g/^/exec "s/^/".strpart(line(".")."", 0, 4)
:%s/^/\=strpart(line(".")." ", 0, 5)
:%s/^/\=line('.'). ' '
;:-----------------------------------------------------------------------------
;:#用VIM的方式来编号行
:set number ;: 显示行号
:map <F12> :set number!<CR> ;: <F12>开关行号显示
:%s/^/\=strpart(line('.')." ",0,&ts)
;:#从任意行开始编号(需要perl)
:'a,'b!perl -pne 'BEGIN substr($_,2,0)=$a++'
;:#产生数字列表
;:#从223行开始的内容至一个空文件
qqmnYP`n^Aq ;: 用@q来重复一个宏q
;:" 递增已存在数字到文件末
:.,$g/^\d/exe "normal! \<c-a>"
;:" 高级递增,参见:
http://vim.sourceforge.net/tip_view.php?tip_id=150
;:-----------------------------------------------------------------------------
;:" 高级递增 (真的很有用)
;:" 把下面几句放到 _vimrc
let g:I=0
function! INC(increment)
let g:I =g:I + a:increment
return g:I
endfunction
;:" 例如从mark a 到mark b 递增,从223开始,步长为5
:let I=223
:'a,'bs/^/\=INC(5)/
;:" create a map for INC
cab viminc :let I=223 \| 'a,'bs/$/\=INC(5)/
;:-----------------------------------------------------------------------------
;:" 生成从 23-64 的数字列表
o23<ESC>qqYp<C-A> q40@q
;:-----------------------------------------------------------------------------
;:" 在当前插入模式下编辑/移动 (真得很有用)
<C-U> ;: 删除全部
<C-W> ;: 删除最后一个单词
<HOME><END> ;: 移动到行首/行尾
<C-LEFTARROW><C-RIGHTARROW> ;: 向前/后移动一个单词
<C-X><C-E>,<C-X><C-Y> ;: 输入方式时滚屏
;:-----------------------------------------------------------------------------
#加密(小心使用,不要忘了密码)
:X ;: vim会提示你输入密码
:h :X
;:-----------------------------------------------------------------------------
;:" 模式行 (使文件只读等),必须在前/后 5行内
// vim:noai:ts=2:sw=4:readonly:
vim:ft=html: ;: 使用 HTML 语法高亮
:h modeline
;:-----------------------------------------------------------------------------
;:" 建立你自己的菜单项
amenu Modeline.Insert\ a\ VIM\ modeline <Esc><Esc>ggOvim:ff=unix ts=4 ss=4<CR>vim60:fdm=marker<esc>gg
;:-----------------------------------------------------------------------------
;:" 一个保存当前光标下的狭义字到一个文件的函数
function! SaveWord()
normal yiw
exe ':!echo '.@0.' >> word.txt'
endfunction
map ,p :call SaveWord()
;:-----------------------------------------------------------------------------
;:" 删除重复行的函数
function! Del()
if getline(".") == getline(line(".")- 1)
norm dd
endif
endfunction

:g/^/ call Del() ;:#使用该函数的一个例子
;:-----------------------------------------------------------------------------
;:" 双字节编码 (non alpha-numerics)
:digraphs ;: 显示编码表
:h dig ;: 帮助
i<C-K>e' ;: 输入 é
i<C-V>233 ;: 输入 é (Unix)
i<C-Q>233 ;: 输入 é (Win32)
ga ;: 查看字符的hex值
;:#删除非 ascii 字符
:%s/[<C-V>128-<C-V>255]//gi ;: <C-V> Control-V
:%s/[]//gi ;: 查看不可见字符
:%s/[<C-V>128-<C-V>255<C-V>01-<C-V>31]//gi ;: All pesky non-asciis
:exec "norm /[\x00-\x1f\x80-\xff]/" ;:: 同上
;:#在查找框内输入不可见字符
yl/<C-R>" :
/[^a-zA-Z0-9_[:space:][:punct:]] ;:: 找出所有不可见字符
;:-----------------------------------------------------------------------------
;:" 文件名自动完成 (例如 main_c.c)
:e main_<tab> ;: tab 键完成
gf ;: 打开光标处广义字命名的文件 (normal模式)
main_<C-X><C-F> ;: 文件名自动完成(insert模式)
;:-----------------------------------------------------------------------------
;:" Vim复杂使用
;:" 交换两个单词
:%s/\<\(on\|off\)\>/\=strpart("offon", 3 * ("off" == submatch(0)), 3)/g
;:" 交换两个单词
:vnoremap <C-X> <Esc>`.``gvP``P
;:-----------------------------------------------------------------------------
;:" 把text文件转换成html文件(oh,ft)
:runtime! syntax/2html.vim ;: 转换 txt 成 html
:h 2html
;:-----------------------------------------------------------------------------
;:" VIM 有一个内部自带的 grep 命令
:grep some_keyword *.c ;: 得到一个包含some_keyword的c文件名列表
:cn ;: 去下一个出现的位置
;:-----------------------------------------------------------------------------
;:" 强制无扩展名的文件的语法着色方式
:set syntax=perl
;:" 取消语法着色 (很有用)
:set syntax off
;:" 改变色彩主题 (在~vim/vim??/colors中的任何文件)
:colorscheme blue
;:" 通过使用模式行强迫使用 HTML 语法高亮
# vim:ft=html:
;:" 强制自动语法加亮(非标准的文件扩展)
au BufRead,BufNewFile */Content.IE?/* setfiletype html
;:-----------------------------------------------------------------------------
:set noma (non modifiable) ;: 防止修改
:set ro (Read Only) ;: 只读保护
;:-----------------------------------------------------------------------------
;:" 对话 (打开一堆文件)
gvim file1.c file2.c lib/lib.h lib/lib2.h ;: 在"对话"中加载这些文件
:mksession ;: 生成一个Session文件 (默认是Session.vim)
:q
gvim -S Session.vim ;: 重新加载所有文件
;:-----------------------------------------------------------------------------
#标记(tags) (跳转到子程序/函数)
taglist.vim ;: 很流行的插件
:Tlist ;: 显示标记 (函数列表)
<C-]> ;: 跳转到光标处的函数
;:-----------------------------------------------------------------------------
;:" columnise a csv file for display only as may crop wide columns
:let width = 20
:let fill=' ' | while strlen(fill) <width | let fill=fill.fill | endwhile
:%s/\([^;]*\);\=/\=strpart(submatch(1).fill, 0, width)/ge
:%s/\s\+$//ge
;:" Highlight a particular csv column (put in .vimrc)
function! CSVH(x)
execute 'match Keyword /^\([^,]*,\)\\zs[^,]*/'
execute 'normal ^'.a:x.'f,'
endfunction
command! -nargs=1 Csv :call CSVH(<args>)
;:" call with
:Csv 5 ;: highlight fifth column
;:-----------------------------------------------------------------------------
;:" 折叠:隐藏某些片断,使查看更容易
zf} ;: 使用动作命令折叠一个段落
v}zf ;: 使用可视模式折叠一个段落
zf'a ;: 折叠到一个标记上
zo ;: 打开折叠
zc ;: 重新关闭折叠
;:-----------------------------------------------------------------------------
;:" 显示"不可见字符"
:set list
:h listchars
;:-----------------------------------------------------------------------------
;:" 如何在不进入插入模式的情况下粘贴"普通模式的命令"
:norm qqy$jq
;:-----------------------------------------------------------------------------
;:" 处理文件名
:h filename-modifiers ;: 帮助
:w % ;: 写入当前文件
:w %:r.cfm ;: 改变文件扩展名为 .cfm
:!echo %:p ;: 显示完整路径和文件名
:!echo %:p:h ;: 只显示完整路径
:!echo %:t ;: 只显示文件名
:reg % ;: 显示文件名
<C-R>% ;: 插入文件名 (插入模式)
:"%p ;: 插入文件名 (普通模式)
/<C-R>% ;: 在文本中查找文件名
;:-----------------------------------------------------------------------------
;:" 删除,但不破坏 buffer 内容
:"_d ;: 你一直想要的东西
:"_dw ;: 例如:删除一个单词 (使用黑洞???)
;:-----------------------------------------------------------------------------
;:" 送完整的路径名到剪贴板,用于邮件附件等
nnoremap <F2> :let @*=expand("%:p")<cr> :unix
nnoremap <F2> :let @*=substitute(expand("%:p"), "/", "\\", "g")<cr> :win32
;:-----------------------------------------------------------------------------
;:" 不用离开 Vim 就能修改文件名的简单 shell 脚本
$ vim
:r! ls *.c
:%s/\(.*\).c/mv & \1.bla
:w !sh
:q!
;:-----------------------------------------------------------------------------
;:" 在一个文本里计算单词数
g<C-G>
;:-----------------------------------------------------------------------------
;:" 你自己设置高亮显示的例子
:syn match DoubleSpace " "
:hi def DoubleSpace guibg=#e0e0e0
;:-----------------------------------------------------------------------------
;:" reproduce previous line word by word
imap ] @@@<ESC>hhkyWjl?@@@<CR>P/@@@<CR>3s
nmap ] i@@@<ESC>hhkyWjl?@@@<CR>P/@@@<CR>3s
;:" 根据文件类型映射快捷键
:autocmd bufenter *.tex map <F1> :!latex %<CR>
:autocmd bufenter *.tex map <F2> :!xdvi -hush %<.dvi&<CR>
;:-----------------------------------------------------------------------------
;:" 读取 MS-Word 文档,需要 antiword
:autocmd BufReadPre *.doc set ro
:autocmd BufReadPre *.doc set hlsearch!
:autocmd BufReadPost *.doc %!antiword "%"
;:-----------------------------------------------------------------------------
;:" a folding method
vim: filetype=help foldmethod=markerfoldmarker=<<<,>>>
;:A really big section closed with a tag <<<
;:--- remember folds can be nested ---
Closing tag >>>
;:-----------------------------------------------------------------------------
;:" Just Another Vim Hacker JAVH
vim -c ":%s%s*%Cyrnfr)fcbafbe[Oenz(Zbbyranne%|:%s)[[()])-)Ig|norm Vg?"
;:# 译释:呵呵,谁来解释一下吧!
;:# 其实不过是在启动vim的时候执行了一个命令
;:# 先写入了 Just Another Vim Hacker 的rot13编码
;:# 然后再解码
;:-----------------------------------------------------------------------------
;:__END__

星期二, 一月 15, 2008

在linux下设置时区

tzselect
按照提示进行选择时区,然后:
sudo cp /usr/share/zoneinfo/Pacific/Auckland /etc/localtime

/Pacific/Auckland 根据实际地理位置更改。。

Linux 下,解决鼠标滚轮不能用

将/etc/x11/xorg.conf中的鼠标协议"PS/2"修改为"imps/2"或者“Auto”

Section "InputDevice"
Identifier "Mouse"
Driver "mouse"
Option "Protocol" "Auto"

修改完后,按CTRL+ALT+退格键重启桌面。。。

星期日, 一月 13, 2008

Mplayer 音量控制详解

Mplayer 音量控制详解

有点复杂...

因为MPLAYER用0和9调过的音量在换歌的时候就会无效...所以..我们要在启动MPLAYER的时候就必须选设置好,这样,音量才会赋给所有的参数(歌曲或电影).为什么不直接调WINDOWS的音量呢. 因为...调小声了QQ的滴滴声我听不到,给音乐盖了...(这是什么理由呀?)

好了.要怎么做..方法好像很多..其实,原理上是不同的.先介绍第一种.

调默认音量:

mplayer -af volume=-10 *.mp3

volume 的范围可以是-200到+60. -200是静音. 而+60是噪音...

我调-10是让他小声一点点,不要影响我上QQ嘛....


现象分析:

用这种方法启动后,音量马上生效,而且是每首歌都生效.也就是说,一启动.每首歌开播的时候,音量被重置到启动时的音量.不管你用0,还是9去改变音量.这个默认音量不会被影响.播放下一个文件的时候.下一个文件将恢复到这个默认音量.而一开启的时候.这个默认音量将取代原来的声卡的音量.也就是100%时候,音量是这个.你如果把 volume 设成-200也就是静音了...你再按多少次0也无济于事,因为-200就是100%的音量了,再也上不去了. 如果你把 volume 设成60,这时候声音会很大(当然,对于有些影片,声音本来就很小很小的,这下就刚刚好).而这个声音很大的音量对应的是100%,你可以按9降下来音量.按0当然不会上去.总结,用这种方法打开文件.音量默认在100%的位置. 100%的音量多大,由VOLUME的值决定. 100%就是对应VOLUME的值.也就是说,你没有办法在播放的时候提高声音.

第二种方法,用软声卡(先这么叫吧)

mplayer -softvol -softvol-max 10 *.mp3

这个, 先用 -softvol 启用软声卡. 然后,用 -softvol-max 限制软声卡的最大音量.这里,我们把最大音量调为默认音量的10%.会变得很小声的.

现象分析:

启动后,他妈的一点作用都没有.完全没反应.因为默认声音没有变(第一种方法才能变).所以,刚启动用的是默认音量.这样,音量没有变化,只有你按了一下0或9的时候.才会生效. 最大音量变成原来的10%,也就是说,你现在100%的音量只有原来10%的音量了. 如果你的最大音量比原来的大,现像却有所不同.比如你把 softvol-max 后面的值改成200,这样,软音量的最大值就是原来的200%了.两倍,同样,启动后是没有生效的.你这回按0或9就会生效.不过这时,音量不是从100%开始的.可是从50%.因为一启动的时候,用的是默认音量,而默认音量是最大软音量的50%,所以,启动的时候,音量是50%这个值.其实之前设成10%也是一样的道理.就是启动时用的是默认音量,默认音量是软音量最大值的10倍,但百分数不会大于100%,所以不会显示1000%出来.便还是从1000%开始了.和第一种方法不同的是,默认音量对应的不是100%.而软音量的最大值才对应的是100%.当你换下一首歌的时候,你用0和9调过的数字又会回复成默认音量.连续放音乐...每首歌都要按一下0,或者9才生效,累死你...


第三种方法:

我们把前两种方法综合起来.我们就可以让默认音量对应的值不是100%.而且,一启动就生效. 

mplayer -af volume=-10 -softvol -softvol-max 200 *.mp3
这样,启动后,默认音量将是-10(大概是30%),一启动,使用的是默认音量,就是原音量的30%了.也就是生效了.然后你按一下0或9,发现.这回,默认音量对应的值不是100%了. 而是16%,因为我把软音量的最大值设为了原音量的2倍,这样,软音量的最大值对应100%,原音量是50%,而默认音量(大概是原音量30%)就变成了50%*30%,则是15%了.呵呵.大概也就是16%.满精确的,哈哈.这样,我们可以在播放的时候,再提高默认音量的声音.而不会像像第一种方法那样.一出来就已经是100%的音量,没有往上爬的空间了.


综合结论: 第一种方法的好处是一开始就生效.每首歌都有效.坏处是,声音没法再高上去.想临时把某一首歌的声音提高是不可能了. 第二种方法好处是,可以把声音再提高,害处就是,一开始不生效,要按0,或9,而且,换歌的时候,又得再按0或9,每首都要按... 第三种方法...综合了前面两者的优点, PERFECT.

跟你们说吧,光看是看不懂的,自己好好实贱去.

星期三, 一月 09, 2008

提取新浪IASK下载链接的真实地址

这里用到CURL,小软件,很了不起.要把路径加入到PATH变量中.

还用到GVIM,不大的文本编辑器,太了不起了.

很多人都把音乐上传到新浪的IASK上去,有时候如果歌很多,一首一首下载,就有点累人了..

这是一个IASK的下载地址

http://ishare.iask.sina.com.cn/cgi-bin/fileid.cgi?fileid=2659580

一般我们要点进去,再点里面的下载链才能下载...比较不爽了.

现在,我们只要按几下,就把全部地址搞出来.然后再导入迅雷,那个快呀...

首先,你要有CURL和GVIM...没有的可以下,不懂的可以学.

把IASK的下载地址全部粘贴到GVIM中,一个地址一行

然后,复制这段代码

有特殊字符,贴不出来...


完了..完了代码里有特殊字符...贴出来不一样了,好吧,下面是它的本来面目.

:%s/^$\n//g^M:%s/cgi-bin\/fileid.cgi/download.php^M:%s/^/"/g^M:%s/$/"/g^M^Qgg$yA ^[p:%s/^/curl -e /g^M:%s/$/ -D tLink/g^M:%s/\n/\rtype tLink >> link\r/g^MggOcd. > link^[:cd f:\temp^MGd2k:w! getIshare.bat^M:!%^M:tabe link^M:%s/^\(\(^Location\)\@>

因为^M,^Q和^[是我用GVIM打出来的..这种是特殊字符,所以是贴不出来了.就是CTRL_M,CTRL_Q和CTRL_[

上面那段是把^M用真实的^和M打出来...


再打开一个GVIM,把上面那段抄进去,然后
按下:号.输入 %s/^M/CTRL_QCTRL_M/g
这样就把^M替换成真正的CTRL_M了...
^Q和^[用同样的方法.


现在复制改好的代码.回到抄好ISHARE地址的那个GVIM,按@+(上档键要按住).然后就弹出命令行窗口.等吧.正在提取真实地址呢...好哦,按任意键返回,真实地址已经全部给你整好显示在你面前了...

哎,写写也是给自己看,估计能看得懂的人,自己都能做..

星期四, 一月 03, 2008

让你的英文系统完美支持中文

英文系统刚装上的时候,对中文同乎是没有一点支持。当然,我说的是WINXP。
于是,大家都会装上东亚语言包。。。

1. 打开“控制面板”,双击“Regional and Language Options”图标,打开区域和语言设置窗口;

2. 在区域和语言设置窗口中,选择“Language”选项卡,将“Install Files for East Asian Languages” 选项打勾;

这里要用到WINXP的安装盘。

上面这步大多数人都会做,做完后,在我的电脑里面,文件夹名字至少是中文了,虽然看上去难看了点。不过还能分辨得出是什么字。

但是,这时候,记事本里面,特别是CMD命令行里面,中文根本上还是乱码。。。如果你想用TELNET来上水木清华,绝是是糊糊一片,不知所云。

这是因为我们还有一个东西没有设置。

爱玩日文,或繁体游戏的朋友大部分都知道这个方法。在玩繁体游戏,而APPLOCAL等软件都没作用的时候,很多朋友就会到控制面板的区域与语言的高级选项中,把非unicode字符集默认编码改成繁体。重启电脑后,所有简体中文都变成乱码了。但是,繁体游戏却可以显示得清清楚楚了。玩玩游戏后,大家又要把编码调回简体中文。 其实在英文系统中,也是一样的,我们只要把默认的非unicode编码改成简体中文,这样,所有的简体中文便可以正常显示了。而英文字母本身也不会变成乱码,因为简体中文的编码中,一样支持英文字母。

星期三, 一月 02, 2008

教你弄出新浪IASK下载的真实地址

看到论坛很多人都喜欢把歌曲传到新浪IASK上去,我觉得也是个不错的主意.但由于它没有公布下载的真实地址.有些下载软件可能就没法使了.

我写这篇文章就是要教大家把这个真实地址弄出来.发贴的人可以把真实地址弄出来,这样方便大家用下载工具下载.如果发贴的人不会.那其它会员也可以学会这个方法.然后自己把真实地址弄出来.

开始:
拿这个网址做例子:
http://ishare.iask.sina.com.cn/cgi-bin/fileid.cgi?fileid=2971610
好的,一般楼主都是直接给大家上面这个地址.然后大家进去后点立即下载来下载.

现在,我们把上面这个地址改一下,把 cgi-bin/fileid.cgi 改成 download.php

于是,我们的地址就变成了这样:

http://ishare.iask.sina.com.cn/download.php?fileid=2971610

重头戏开始了...

我们做一个HTTP文件头.我已经做好了,你们拿去用就可以...看不懂没关系.用就是

GET 这里填网址 HTTP/1.1
User-Agent: fengmade batch file
Host: ishare.iask.sina.com.cn
Pragma: no-cache
Accept: */*
Referer: 这里填网址
Connection: keep-alive

把我们找到的网址插入该填网址的地方,变成这样,我们要用到的,就是下面这段.


GET http://ishare.iask.sina.com.cn/download.php?fileid=2971610 HTTP/1.1
User-Agent: fengmade batch file
Host: ishare.iask.sina.com.cn
Pragma: no-cache
Accept: */*
Referer: http://ishare.iask.sina.com.cn/download.php?fileid=2971610
Connection: keep-alive

好,离成功只差一步了..

点开始,点运行,输入cmd回车.这样就进入了命令行模式(不要怪我哆嗦,照顾大多数人)

好了.在黑黑的命令行模式,我们输入 telnet ishare.iask.sina.com.cn 80 回车
,这下,你只能看到一个光标在左上角,闪呀闪,什么都没有..别输入任何东西.复制上面我们做出来的代码...在黑窗口中点右键,点粘贴...你会看到,黑窗口中更乱了...别急,点一下回车...看到了吗?没看到,多点几下回车,不会超过5秒, 类似这样的东西出现了...看不懂没关系..反正只有一行有用..其它都是垃圾.

HTTP/1.1 302 Found
Date: Wed, 02 Jan 2008 04:56:41 GMT
Server: Apache/2.0.52 (Unix) PHP/4.3.8
X-Powered-By: PHP/4.3.8
Set-Cookie: PHPSESSID=a27a60708bc9d3f15bc10069d7f00331; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Location: http://d100.d.iask.com/fs/800/1/6b39e907ab8f73414636e862abcabcc39909814/mp3/01.%E6%9C%89%E4%B8%80%E7%A7%8D%E7%88%B1%E5%8F%AB%E6%94%BE%E6%89%8B.mp3
Vary: Accept-Encoding
Content-Length: 0
Keep-Alive: timeout=3
Connection: Keep-Alive
Content-Type: text/html; charset=GB2312

看到那个Location 了吗? 后面跟着的一大串就是真实的下载地址了...

怎么复制出来呢...我们当然不能用抄...会死人的...

点右键,点标记,然后在里面像抓图那样,点住鼠标拖动.这样会出现一块反白区域.选好你要复制的区域后,在反白区域的任何一个位置点右键.反白消失.别担心,这个时候,东西已经被复制到剪贴板了.好的,现在我们打开记事本.按CTRL+V,把刚才复制的东西粘贴出来...然后..结束了..

呵,虽然我说了这么多,好像很复杂.但实际做起来,很快的...

用NC或者CURL等工具就更简单了..但这些工具要单独去下载..不像TELNET人人都有,所以不介绍了.

星期二, 一月 01, 2008

CURL | WGET 下载 Fs2You

刚刚接触命令行的下载器(除了WINDOWS自带的FTP命令). 于是想看看他是否能搞定一些防盗链的网站.于是试了下.还是很好用的.刚才想拿 Fs2You 开蒜.
http://www.fs2you.com/en/files/fc28c194-ab00-11dc-930c-0014221f4662/

居然失败了. 无论是WGET 还是CURL,都下不下来. 用CURL干脆就一就反应都没有.什么回溃的信息都没有.. WGET就在转向了好几次后,下载了几个无用的文件...

于是用OPERA下载了...OPERA可以.为什么WGET不可以..不爽..于是跟踪了一下HTTP 头..抓下来...

GET /zh-cn/download/bef14d349f61948cdcaa84b4964a0fa8/Leehom.rar HTTP/1.0
User-Agent: Opera/9.23 (Windows NT 5.2; U; en)
Host: cachefile11.fs2you.com
Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Accept-Charset: iso-8859-1, utf-8, utf-16, *;q=0.1
Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0
Referer: http://www.fs2you.com/en/files/fc28c194-ab00-11dc-930c-0014221f4662/
Cookie: ROXCDNKEY=be2a; __utma=226899722.1520770807.1193903265.1198760604.1199102572.5; __utmc=226899722; __utmz=226899722.1199102572.5.4.utmccn=(referral)|utmcsr=xialala.com|utmcct=/Announce/Announce.asp|utmcmd=referral; __utmb=226899722
Cookie2: $Version=1
Connection: keep-alive

看了看...就是缺了COOKIE嘛...

于是用CURL 去抓COOKIE,可是抓下来的COOKIE是空的...还是不太明白.

最后算了.直接用跟踪出来的COOKIE放在CURL进去..居然就可以了...也就是说是COOKIE的问题.

把COOKIE删了一些再试.又成功了..可是全删掉又失败...后来发现COOKIE中..只有最前后那个变量是有用的..其它都不用..

最后用CURL和WGET下载的方式就是这样



wget --referer="http://www.fs2you.com/en/files/fc28c194-ab00-11dc-930c-0014221f4662/" --header="Cookie: ROXCDNKEY=be2a;" "cachefile11.fs2you.com/zh-cn/download/bef14d349f61948cdcaa84b4964a0fa8/Leehom.rar"

curl -e "http://www.fs2you.com/en/files/fc28c194-ab00-11dc-930c-0014221f4662/" -H "Cookie: ROXCDNKEY=be2a;" -O "cachefile11.fs2you.com/zh-cn/download/bef14d349f61948cdcaa84b4964a0fa8/Leehom.rar"

引用网址是不可少的吧..写到这里..想到不用引用地址是不是也可以..习惯性的加了引用地址..
于是去掉...没想到也是可以的..也就是说..这个网站不是用REFERER来防盗链的,而是用COOKIE.最后的下载方法是

wget --header="Cookie: ROXCDNKEY=be2a;" "cachefile11.fs2you.com/zh-cn/download/bef14d349f61948cdcaa84b4964a0fa8/Leehom.rar"

curl -H "Cookie: ROXCDNKEY=be2a;" -O "cachefile11.fs2you.com/zh-cn/download/bef14d349f61948cdcaa84b4964a0fa8/Leehom.rar"

就是加了一个COOKIE值哦,这么简单...汗,我开始还以为很厉害

其它博客地址

此博客的同步博客地址: http://fengnz.wordpress.com
这里进入我的MSN SPACE.