刚才随便点了下GMAIL CHAT的OPTIONS,居然可以登入AIM了,于是就登录了一下(试了三次才试对密码)。然后AIM的好友就被加进来了。
昨天,今天,明天,每天的每天,你是否都多懂得一点点...
星期四, 一月 31, 2008
星期三, 一月 30, 2008
source insight 贵得离谱
slickedit 安装文件50兆,安装完后130多兆,卖299ESD。
source insight 安装文件不到3兆,安装完后12兆。。。 卖255ESD。 这么点代码。。。怎么这么贵。。。
Vistual studio standard 299USD. 安装文件一张光盘,装完后快两G。
比一比,发现微软的东西还算便宜的了。。。。
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给批处理赋参数了。
我一直以为|是把第一个运行的结果直接作为第二个命令的参数,就像这样
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;}
|= 用-号隔开的一个词
*= 好像是万能的,包含某个词
显例,去掉隐藏乱码,因为源码中包含-所以|=可以用.<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脚本" 文件名.... 爽
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
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__
;:文档来源: 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 根据实际地理位置更改。。
按照提示进行选择时区,然后:
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+退格键重启桌面。。。
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.
跟你们说吧,光看是看不懂的,自己好好实贱去.
有点复杂...
因为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,按@+(上档键要按住).然后就弹出命令行窗口.等吧.正在提取真实地址呢...好哦,按任意键返回,真实地址已经全部给你整好显示在你面前了...
哎,写写也是给自己看,估计能看得懂的人,自己都能做..
还用到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编码改成简体中文,这样,所有的简体中文便可以正常显示了。而英文字母本身也不会变成乱码,因为简体中文的编码中,一样支持英文字母。
于是,大家都会装上东亚语言包。。。
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人人都有,所以不介绍了.
我写这篇文章就是要教大家把这个真实地址弄出来.发贴的人可以把真实地址弄出来,这样方便大家用下载工具下载.如果发贴的人不会.那其它会员也可以学会这个方法.然后自己把真实地址弄出来.
开始:
拿这个网址做例子:
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://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值哦,这么简单...汗,我开始还以为很厉害
订阅:
博文 (Atom)