赢在中国“80后30个忠告”【转载】

赢在中国“80后30个忠告”【转载】

转自:http://www.cnblogs.com/kungfupanda/archive/2010/01/04/1639023.html\
 
1、一个年轻人,如果三年的时间里,没有任何想法,他这一生,就基本这个样子,没有多大改变了。
2、成功者就是胆识加魄力,曾经在火车上听人谈起过温州人的成功,说了这么三个字,“胆子大”。这其实,就是胆识,而拿得起,放得下,就是魄力。
3、这个世界,有这么一小撮的人,打开报纸,是他们的消息,打开电视,是他们的消息,街头巷尾,议论的是他们的消息,仿佛世界是为他们准备的,他们能够呼风唤雨,无所不能。你的目标,应该是努力成为这一小撮人。
4、如果,你真的爱你的爸妈,爱你的女朋友,就好好的去奋斗,去拼搏吧,这样,你才有能力,有经济条件,有自由时间,去陪他们,去好好爱他们。
5、这个社会,是快鱼吃慢鱼,而不是慢鱼吃快鱼。
6、这个社会,是赢家通吃,输者一无所有,社会,永远都是只以成败论英雄。
7、如果你问周围朋友词语,如果十个人,九个人说不知道,那么,这是一个机遇,如果十个人,就个人都知道了,就是一个行业。
8、任何一个行业,一个市场,都是先来的有肉吃,后来的汤都没的喝。
9、这个世界上,一流的人才,可以把三流项目做成二流或更好,但是,三流人才,会把一流项目,做的还不如三流。
10、趁着年轻,多出去走走看看。读万卷书,不如行万里路,行万里路,不如阅人无数。
11、与人交往的时候,多听少说。这就是,上帝为什么给我们一个嘴巴两个耳朵的原因。
12、日常工作之外应当多注意自身修养的提高及自身技能的培训。随着计算机技术的广泛应用,为了不被社会所淘汰,就必须加强计算机技术的培训与提高。无论是企业培训还是个人培训都是不可或缺的。
13、不要装大,对于装大的人,最好的办法就是,捡块砖头,悄悄跟上去,一下子从背后放倒他。
14、不要随便说脏话,这会让别人觉得你没涵养,不大愿意和你交往。即使交往,也是敷衍。因为他内心认定你素质很差。
15、想要抽烟的时候,先问下周围的人可不可以,要学会尊重别人。少在女生面前耍酷抽烟,你不知道,其实她们内心很反感。
16、买衣服的时候,要自己去挑,不要让家人给你买,虽然你第一第二次买的都不怎么样,可是,你会慢慢有眼光的。
17、要想进步,就只有吸取教训,成功的经验都是歪曲的,成功了,想怎么说都可以,失败者没有发言权,可是,你可以通过他的事例反思,总结。教训,不仅要从自己身上吸取,还要从别人身上吸取。
18、学习,学习,再学习,有事没事,去书店看看书,关于管理,金融,营销,人际交往,未来趋势等这些,你能获得很多。这个社会竞争太激烈了,你不学习,就会被淘汰。中国2008底,有一百多万大学生找不到工作。竞争这么激烈,所以,一定要认识一点,大学毕业了,不是学习结束了,而是学习刚刚开始。还有,我个人推荐一个很好的视频节目,《谁来一起午餐》。
19、如果你不是歌手,不是画家,也不是玩行为艺术的,那么,请在平时注意你的衣着。现在这个社会,衣着能表现出你属于哪一个群体,哪一个圈子。
20、记住,平均每天看电视超过三个小时以上的,一定都是那些月收入不超过两千元的,如果你想要月收入超过两千,请不要把时间浪费在电视上。同样的道理,那些平均每天玩网络游戏或聊天超过三个小时以上的,也都是那些月收入不超过两千的。
21、因为穷人很多,并且穷人没有钱,所以,他们才会在网络上聊天抱怨,消磨时间。你有见过哪个企业老总或主管经理有事没事经常在QQ群里闲聊的?
22、无论你以后是不是从事销售部门,都看一下关于营销的书籍。因为,生活中,你处处都是在向别人推销展示你自己。
23、平时的时候,多和你的朋友沟通交流一下,不要等到需要朋友的帮助时,才想到要和他们联系,到了社会,你才会知道,能够认识一个真正的朋友,有多难?
24、如果你想知道自己将来的年收入如何。找你最经常来往的六个朋友,把他们的年收入加起来,除以六,就差不多是你的了。这个例子,可以充分的说明一点,物以类聚。
25、不要听信身边人的话,大一不谈恋爱,好的女孩子就被别人都挑走了。想想,刚上大一就耐不住寂寞,受不住诱惑,而去谈恋爱的女孩子,值得自己去追吗?大学里,可以有一场爱情,可是,不要固执地认为,刚上大一,就必须要谈恋爱。
26、记得,要做最后出牌的人,出让别人觉得出其不意的牌,在他们以为你要输掉的时候,这样,你才能赢得牌局。
27、关于爱情,有这么一句话,没有面包,怎么跳舞?无论什么时候,你决定去好好爱一个人的时候,一定要考虑给她你能给予的最好的物质生活。
28、给自己定一个五年的目标,然后,把它分解成一年一年,半年半年的,三个月的,一个月的。这样,你才能找到自己的目标和方向。
29、无论什么时候,记住尊严这两个字,做人是要有尊严,有原则,有底线的。否则,没有人会尊重你。
30、如果,我只能送你一句忠告,那就是,这个世界上没有免费的午餐,永远不要走捷径!

程序员的编辑器——VIM【转载】

程序员的编辑器——VIM【转载】

转自:http://linux.chinaunix.net.sixxs.org/techdoc/system/2007/01/27/949127.shtml\
 
程序员的编辑器——VIM
一、VIM的历史
1976年左右Bill
Joy开发了vi,他也是伯克利大学的毕业生,后来他跟其他人一起成立了Sun
Microsystems公司并成为了Sun的首席科学家。一开始Bill开发了ex,尔后开发了vi作为ex的visual
interface,也就是说vi允许一次能看到一屏的文本而非一行,vi也因此得名。
“早期,当键盘和视频终端成为最新的计算机交互手
段时,人们开发了VI。那时候的键盘不具有目前熟悉的全部功能键,所以,VI就设计成只需要打字机的键盘加上退出键就能完成对文本的输入和修改(现在有的
还接受一些其他的键输入方式,如光标控制键)。尽管看起来受了限制,不能充分利用现代键盘新增的许多键,可是‘祸中有福’,限制带来的好处是手指不离开打
字区就能完成所有的编辑工作。”
技术不断进步,需求也在不断提高,VI的各种变种也不断涌现,知名的有nvi,elvis,VIM,
vile,yzis,其中移植性最好、特性最多、使用最广的当属VIM,VIM主要是Bram
Moolenaar开发的。最初Bram在Amiga计算机上改进一个叫Stevie的VI版本,他称之为“Vi
IMitation”。随着功能的逐渐丰富,VIM的含义也就改成了“Vi
IMproved”。相比原始的VI,VIM增加的一项最重要的功能便是多级撤销,VI只支持一级撤销。
[separator]
二、VI/VIM基础知识
很多人应该都知道VI是个有模式的编辑器:编辑模式和命令模式,按ESC回到命令模式,用i或者a进入编辑模式,由于区分了模式,导致VI的命令非常简洁,而无模式编辑器比如Emacs,所有的命令都需要加上控制键Ctrl或Alt。
VI继承了ed的理念,另外也有历史原因,VI追求的是快捷——启动程序迅速,编辑文本高效,功能专注,而Emacs追求的是功能的丰富强大以及集成带来的方便。
在VIM里头:help mode可以看到VIM的所有模式,主要有如下几种:
Normal mode 即通常所谓的命令模式,在此模式使用a、i、A、I、o、O等进入Insert mode
Insert mode 即通常所谓的编辑模式,在此模式使用ESC进入Normal mode或者Ctrl-o临时进入Normal mode。
Command-line mode 命令行模式,在Normal mode下按冒号进入,按ESC取消执行命令或者回车执行命令,然后回到Normal mode。(Visual Studio.Net也添加了命令行脚本功能,幸甚)
Visual mode 即选择模式(注意跟用鼠标选择不同),用v,V,C-v或C-q进入
Select mode 鼠标选择
Replace mode 在Normal mode下按R进入,按ESC返回Normal mode,相当于Windows下命令行中按Insert键进入的覆盖模式
从VI/VIM中退出:按ESC确认返回到Normal mode,然后
:wq 保存并退出
:q! 不保存并退出
😡 退出,如果文件更改则保存
ZZ 退出,如果文件更改则保存(按住Shift,再按两次z)
VI的命令是非常具有美感的,下面是几个例子:
i 在光标前插入 I 在行首插入
a 在光标后插入 A 在行末插入
o 在下一行插入 O 在上一行插入
x 删除当前字符 X 删除前一个字符
类似的还有b,B,ge,gE,w,W,e,E,f,F,t,T,这些命令都可以用:help cmdname查到帮助。
dd 删除一行 yy 拷贝一行
h j k l 左下上右移动光标
Ctrl-w h,Ctrl-w j,Ctrl-w k,Ctrl-w l 切换到左下上右窗口
类似ed,VI/VIM的命令大多都可以带一个数字前缀或者一个数字范围,比如:
5dd 从当前行开始删除5行
5yy 从当前行开始拷贝5行
1,3d 删除1至3行
1,3y 拷贝1至3行 (.代表当前行,$代表最后一行)
d,y,c,v分别代表删除/拷贝/修改/选择
命令指定的范围,比如
int main(void)
{
……;
}
将光标放在{处,然后输入v%就可以把大括号中内容选定,然后按=就可以按照C语言格式缩排(:help =可以看到=命令的描述),%命令的作用是跳到匹配处,比如括号之间,C的宏指令#if #else #endif之间。
int some_ugly_modifier and some_ugly_name (void)
如果光标放在第一个s上,想删除到“(”为止,则输入dt(就可以了,t(的作用是跳到下一个
“(“前。
dG可以从当前位置一直删除到文件末尾,因为G的作用是跳到文件最后一行。
VIM的命令可以非常快捷的做到一些复杂的编辑操作。
命令解释如下:
% 全文(“%”是“1,$”范围的缩写)
s 替换
/ 搜索字符串开始
( 左括号
) 开始记录匹配
d+ 一个或多个数字
) 结束记录匹配
) 右括号
/ 搜索字符串结束
= 把后面的表达式计算出来作为替换字符串
“(” 左括号
. 字符串连接运算符
(submatch(1) + 1) 把第一个匹配的结果加一作为一个整体返回
.”)” 添上右括号
/g 替换字符串结束,g表示替换每一行的所有匹配结果。
:set ve=all 使得光标可以定位到屏幕任何位置(缺省下VIM的光标只能放在行内的字符上)
gg 到文件第一行
/s+&s*$ 找以&结尾的行,&前至少一个空白字符,后0或多个空白字符
qa 记录宏到寄存器a
D 删除到行尾
78| 定位到第78列
i& 插入&并返回到命令模式
n 查找下一个&
q 停止记录宏
10000@a 执行一万遍寄存器a中保存的命令
:set ve=”” 恢复ve缺省值
三、编程辅助
既然是程序员的编辑器,自然要show一下它的编程辅助功能。
(1) ctags,cscope
现在的IDE都提供了类、函数的索引功能,可以方便的找到某个类或者函数的在哪里定义的,VIM这方面可以利用ctags、cscope做到,
Exuberant
ctags支持的语言种类非常多,UltraEdit的tags功能也是利用的ctags。cscope只支持C,它能实现Source
Insight的一些功能,比如查找某个函数调用了哪些函数,某个函数被哪些函数调用。VIM对这两个工具集成的非常好,利用它们就可以在源文件中方便的
跳转搜索类和函数了。
Reference:
http://ctags.sourceforge.net.sixxs.org
Exuberant ctags
http://iamphet.nm.ru.sixxs.org/cscope/
cscope for Win32
:help ctags
:help cscope
(2)multi window,multi buffer,multi tab page
一个buffer对应一个文件,它可以对应多个window,这样可以方便的对照编辑一个文件的不同部分,tab
page跟现在许多编辑器上常见的标签页意义并不一样,可以将tab
page理解为一个windows的容器,这样如果想新建一个窗口编辑文件但又不想打乱现在的多窗口布局,那么就可以新开一个tab
page,把新窗口放到这个新的tab page里头。tab page是VIM 7.0不久前新增的特性,目前VIM
7.0还未正式发布。(此文发表至PConline时,已经正式发布。)
Reference:
:help windows
:help buffers
:help tabpage
(3) 语法高亮
VIM发行版里带了450多种语言的语法高亮,在其主页vim.org上还可以找到更多。
Reference:
:help syntax
(4) 自动缩进
在打开自动缩进选项后,VIM会自动的控制缩进,比如输入自动回退缩进。使用=命令可以对选择的程序块排版缩进,这对于整理代码非常有帮助。另外对选择的块用>>和,指37个寄存器中的一个,然后可以进行任何操作,包括在模式间切换,最后在Normal模
式下按q可以结束宏录制,用@命令可以应用这个宏,命令前可以带数字前缀表示执行多少次这个宏。
Reference: :help q
(3) 书签
Normal mode下按m作书签,指26个命名寄存器中的一个,然后可以用’或者`跳到书签处。
Reference: :help m
(4) 映射
VI/VIM可以将某个按键序列映射到一个命令序列上,比如在配置文件.vimrc(Windows下是_vimrc)中写入
map  i=strftime(”%Y-%m-%d”)
即可以在Normal mode下插入当前日期。
Reference: :help :map
(5) 缩写
VI/VIM支持用一个缩写字符串代替一个长的字符串,比如
:ab hw hello world
然后在Insert mode下输入“hw ”(不包括引号)后VIM就自动替换成了“hello world”。这里展示一个Emacs下abbrev功能的动画(没错,是Emacs的):
http://www.bloomington.in.us.sixxs.org/~brutt/msf-abbrev.html

Reference: :help :ab
(6) :s//和:g//,:!g//
这两个命名加上正则表达式,常常能完成非常复杂的编辑任务,可以毫不夸张地说是VIM的两柄瑞士军刀。:s是替换操作,:g是查找匹配模式的行,:!g是查找不匹配模式的行。
http://www.vim.org.sixxs.org/tips/tip.php?tip_id=1063
这个tip可以把:g找到的行拷贝到一个新的缓冲区中,非常有用。
Reference: :help :s
:help :g
(7) 插件
VIM自己有脚本语言,另外也支持用Perl/Python/Tcl/Ruby/Scheme编写插件,这些插件极大的丰富了VIM的功能。
(8) color scheme
VIM有许多配色方案,下面这个链接有许多配色方案效果的图样:
http://www.cs.cmu.edu.sixxs.org/~maverick/VimColorSchemeTest/
(9) 二进制编辑
VIM可以利用xxd实现二进制编辑,不过这项功能还是不够好用。
(10) sign
sign指在编辑窗口的最左列显示一个标记,利用这个功能能实现很多IDE中的书签标记或者断点标记。
Reference: :help sign
六、VIM Scripts
VIM script包含几大类:
color scheme 配色方案
ftplugin File type插件,特定语言语法的设置,比如如何识别注释
syntax 语法高亮的配色
plugin 提供额外功能的插件,比如智能完成、缓冲区管理。
VIM的script安装非常简单,下载的script文件或者压缩包里头都有安装说明,在VIM的安装目录(比如C:VIM64)下面有一个
vimfiles目录,把script放到vimfiles目录下即可。对于多用户系统,可以在HOME目录(一般是c:Documents and
Settings)下面建立一个vimfiles目录,把script放置到这里。
下面是一些好用的VIM插件,具体使用办法请参考各自。vim文件头部的注释。
BufExplorer.vim *****
http://www.vim.org.sixxs.org/scripts/script.php?script_id=42
这个插件可以使编辑多文件更加方便,装完插件后Normal mode下输入be即可打开缓冲区列表,光标放置在某一个文件上按回车即可打开这个文件,而缓冲区列表自动关闭。
Taglist.vim *****
http://www.vim.org.sixxs.org/scripts/script.php?script_id=273
这个插件可以实现类或者函数列表功能,支持C/C++,java,perl,python,tcl,sql,php等语言,它可以在VIM中创建一个窗
口,列出编辑的源文件中的类、函数、变量定义列表,而且更方便的是这个列表也插入在了右键菜单中,分类存放,访问非常方便。
TabBar.vim ***
http://www.vim.org.sixxs.org/scripts/script.php?script_id=1338
这个插件实现了类似UltraEdit中的标签页的功能,而且能通过Alt-来切换,代表1-9。
minibufexpl.vim ***
http://www.vim.org.sixxs.org/scripts/script.php?script_id=159
实现了类似UltraEdit中的标签也功能。
c.vim ***
http://www.vim.org.sixxs.org/scripts/script.php?script_id=213
提供了很多便于C/C++编程的功能,比如文件头模版,代码片断等。
CRefVim **
http://www.vim.org.sixxs.org/scripts/script.php?script_id=614
为VIM定制的C参考手册,这样对于语法或者函数不清楚的地方可以方便的查找了。
latex-suite *****
http://www.vim.org.sixxs.org/scripts/script.php?script_id=475
http://vim-latex.sf.net.sixxs.org/
提供了很多便于编辑TeX/LaTeX文件的功能,比如在VIM里面编译或者预览、自动插入TeX标记等。
word_complete.vim ***
http://www.vim.org.sixxs.org/scripts/script.php?script_id=73
Insert模式下在输入的时候自动补全单词,如果补全正确可以按Tab键接受,否则可以不管它继续输入或者按Ctrl-n,Ctrl-p切换补全。注意是输入三个字符后才开始补全。
Vim JDE
http://www.vim.org.sixxs.org/scripts/script.php?script_id=1213
支持C/C++等的自动完成(需要VIM 7.0,编译时打开+ruby特性).
cppcomplete.vim **
http://www.vim.org.sixxs.org/scripts/script.php?script_id=527
能自动完成C/C++/Java的结构或类成员,注意它的快捷键是Alt-l(字母L)不是Alt-i。
The NEAD Commenter **
http://www.vim.org.sixxs.org/scripts/script.php?script_id=1218
在许多类型的文件中方便的加上注释或者取消注释。
winmanager
http://www.vim.org.sixxs.org/scripts/script.php?script_id=95
把标准的File Explorer以及Buffer Explorer插件集成在一起,提供现代编辑器中常见的文件列表和缓冲区列表功能。
sketch.vim ***
http://www.vim.org.sixxs.org/scripts/script.php?script_id=705
Draw with mouse: boxes, arrows, lines, fills. Transparent/opaque drag and drop.照着它的教程做一遍,你就会震撼于它的创意了。
DrawIt.vim **
http://www.vim.org.sixxs.org/scripts/script.php?script_id=40
可以方便的画连线图。
MultipleSearch ***
http://www.vim.org.sixxs.org/scripts/script.php?script_id=479
MultipleSearch2.vim ***
http://www.vim.org.sixxs.org/scripts/script.php?script_id=1183
Mark.vim ***
http://www.vim.org.sixxs.org/scripts/script.php?script_id=1238
otf.vim **
http://www.vim.org.sixxs.org/scripts/script.php?script_id=634
这些插件可以同时高亮显示多次搜索结果,这个特性非常有利于显示代码中某些变量或函数的调用位置。
SearchComplete.vim *
http://www.vim.org.sixxs.org/scripts/script.php?script_id=474
可以用/搜索时按Tab补全要搜索的单词。
Vim Intellisense
http://insenvim.sourceforge.net.sixxs.org
顾名思义,此插件用于给VIM提供智能完成功能,支持C++,C#,Java,JSP,HTML,SQL,XML,笔者安装后一直懒得配置,也就没用上。
project
http://www.vim.org.sixxs.org/scripts/script.php?script_id=69
提供一些IDE功能,看介绍似乎很不错。
JavaBrower
http://www.vim.org.sixxs.org/scripts/script.php?script_id=588
提供文件中Java类的树状列表。
vimspell
http://www.vim.org.sixxs.org/scripts/script.php?script_id=465
ispell or aspell based spell checker with fly-spelling。
cream
http://cream.sourceforge.net.sixxs.org/
一套配置文件,可以把VIM的界面改成CUA(Common User Access)模型,降低VIM的学习难度,个人不推荐这种做法,不过其中有些高级配置值得学习(有意思的是Emacs也有类似的项目: Easymacs,EmacsW32)。
IComplete
http://icomplete.sf.net.sixxs.org
搭配VIM 7.0的Omni Complete,可以做到C/C++的智能完成功能.
七、VIM资源
http://www.vim.org.sixxs.org
VIM主页,有许多scripts和tips,查找插件的第一去处
http://newsmth.net.sixxs.org
新水木BBS的VIM版,有很多VIM爱好者可以讨论
http://vimdoc.sf.net.sixxs.org
VIM文档工程
http://vcd.gro.clinux.org.sixxs.org/
VIM中文文档
http://tnerual.eriogerg.free.fr.sixxs.org/vim.html
VIM Quick Reference Card
http://edyfox.codecarver.org.sixxs.org/
newsmth VIM版版主的wiki
http://learn.tsinghua.edu.cn.sixxs.org:8080/2001315450/
王垠的个人主页
《学习vi编辑器(第六版)》机械工业出版社译,O’Reilly
几个学习正则表达式的工具(from happyvim at newsmth)
http://weitz.de.sixxs.org/regex-coach/
Regex Coach
http://jregexptester.sourceforge.net.sixxs.org/
JRegexp Tester
http://www.regexbuddy.com.sixxs.org/
Regex Buddy
http://www.yzis.org.sixxs.org/
yzis是一个新的VI变种,它支持变宽字体,目前功能还不够丰富。
http://ex-vi.sourceforge.net.sixxs.org/
传统VI的源代码
八、编译安装最新CVS版的VIM\

  1. 获取源代码
    cvs -z3 -d:pserver:anonymous@cvs.sf.net:/cvsroot/vim co vim7
    源代码位于当前目录的vim7目录下面,假设安装目标在d:workprogramVimvim70b
    2.编译
    注意重新编译前最好clean一下,确保“*obj*”目录被删除了,否则可能出现莫名其妙的问题,比如链接时找不到一些函数。下面是一个批处理脚本:
    rem ———————————————>
    @echo off
    set path=c:winnt;c:winntsystem32
    vcvars32.bat
    cd vim7src
    rem .sh文件跟其它程序有关联,避免运行VC的link时执行了link.sh
    ren link.sh link.sh.old
    @echo clean…
    rem clean时加入这些选项是因为$(OUTDIR)和$(OBJDIR)根据这些标志合成的,
    rem 如果不加这些标志, 在rmdir /s /q时会找不到目录, 从而没有删除掉。
    nmake -f Make_mvc.mak clean FEATURES=HUGE GUI=yes OLE=yes MBYTE=yes
    IME=yes GDYNAMIC_IME=yes GIME=yes PERL=d:workprogramPerl
    DYNAMIC_PERL=yes PERL_VER=58 PYTHON=d:workprogramPython24
    DYNAMIC_PYTHON=yes PYTHON_VER=24 SNIFF=yes CSCOPE=yes CPUNU=i586
    DEBUG=yes MAP=lines
    @echo build big debug version…
    nmake -f
    Make_mvc.mak all FEATURES=HUGE GUI=yes OLE=yes MBYTE=yes IME=yes
    GDYNAMIC_IME=yes GIME=yes PERL=d:workprogramPerl DYNAMIC_PERL=yes
    PERL_VER=58 PYTHON=d:workprogramPython24 DYNAMIC_PYTHON=yes
    PYTHON_VER=24 SNIFF=yes CSCOPE=yes CPUNU=i586 DEBUG=yes MAP=lines
    ren link.sh.old link.sh
    @echo done.
    pause
    @echo on
    rem  保存并退出,:q!=>强行退出,:e!=>放弃修改文件内容,重新载入该文件,:x =>退出,文件更改并保存,ZZ =>同:x命令 (退出vim)
    2.基本设置-命令行模式下
    :set nu 显示行号
    :syn on 显示语法高亮
    :set shiftwidth=4 设置自动缩进 4 个空格, 当然要设自动缩进先.
    :set sts=4 即设置 softtabstop 为 4. 输入 tab 后就跳了 4 格.
    :set tabstop=4 实际的 tab 即为 4 个空格, 而不是缺省的 8 个.
    :set expandtab 在输入 tab 后, vim 用恰当的空格来填充这个 tab.
    :set suffixes=.bak,~,.o,.h,.info,.swp,.aux,.bbl,.blg,.dvi,.lof,.log,.lot,.ps,.toc
    在vim中打开文件时, 按 tab 键补齐文件名时它会忽略上述文件.
    :set enc=utf-8 设置文字编码
    设置配置文件:
    :scriptnames  列出配置文件.vimrc所在的目录
    :version 用户所用的配置文件.vimrc的位置
    3.光标定位(普通模式、可视模式)
    ——————————————————————————–
    $ 当前行的末尾
    0 当前行的开头
    ^ 当前行第一个字母
    gg 文件头
    G 文件尾
    “ 回到光标跳转前的位置
    H 跳到屏幕上的第一行
    M 跳到屏幕的中间行
    L 跳到屏幕上的最后一行
    w: 光标以单词向前移动至单词第一个字母
    b: 与w相反,向后移动至单词的第一个字母
    e: 光标以单词向前移动至单词最后一字母
    ge: 与e相反,向后移动至单词的最后一字母
    %: 移动到与制匹配的括号上去(),{},[],等
    CTRL+G 得到当前光标在文件中的位置
    向下翻页(page down): CTRL+f
    向上翻页(page up): CTRL+b
    向下移动半屏:CTRL+d
    向上移动半屏:CTRL+u
    补记:
    .
    光标定位(普通模式、可视模式)$ 当前行的末尾0 当前行的开头^ 当前行第一个字母gg 文件头G 文件尾“ 回到光标跳转前的位置H
    跳到屏幕上的第一行M 跳到屏幕的中间行L 跳到屏幕上的最后一行w: 光标以单词向前移动至单词第一个字母b:
    与w相反,向后移动至单词的第一个字母e: 光标以单词向前移动至单词最后一字母ge: 与e相反,向后移动至单词的最后一字母%:
    移动到与制匹配的括号上去()…
    光标定位技巧的补充:
    ” 同“ — 此命令相当有用, 它移动光标到上一个标记处, 比如用 gd, * 等查
    找到某个单词后, 再输入此命令则回到上次停留的位置.
    ‘. — 此命令相当好使, 它移动光标到上一次的修改行.
    `. — 此命令相当强大, 它移动光标到上一次的修改点.
    补记:
    行号+G 跳转到指定行
    fx 向右跳到本行字符x处(x可以是任何字符)
    Fx 向左跳到本行字符x处(x可以是任何字符)
    tx 和fx相同,区别是跳到字符x前
    Tx 和Fx相同,区别是跳到字符x后
    4.删除和复制(普通模式、可视模式)
    ——————————————————————————–
    删除:
    dd: 删除一行
    dw: 删除一个单词,需将光标移到单词的第一个字母。
    d$: 删除当前光标到该行的行尾的字母
    daw: 删除一个单词,光标在单词任意位置
    dnw: 删除N个单词
    dnj: 向下删除n行
    dnk: 向上删除n行
    J: 删除换行符,将光标移到改行,按shift+j删除行尾的换行符,下一行接上来了。
    复制:
    yy: 复制一行
    yw: 复制一个单词,需将光标移到单词的第一个字母。
    yaw: 复制一个单词,光标在单词任意位置
    ynw: 复制N个单词
    ynj: 向下复制n行
    ynk: 向上复制n行
    修改:
    cl: 更改当前字符
    cw: 修改当前单词到结尾
    cc: 修改当前行
    粘贴:p,粘贴用x、d、y操作的文本
    可视模式下的方式:
    可视模式下,选中要编辑的文字,可执行d、y,操作。
    寄存器下的操作:
    在复制前可以先指定一个寄存器,方法是在双引号后跟一个字母,例如”a指定了寄存器a,”B指定了寄存器B。所以,”ayy把当前行放进了寄存器a,以后就可以用”ap来粘贴寄存器a里的内容了。如果不确定寄存器里放了什么内容,可以使用:reg来查看。
    Vim提供了一个很有用的特殊寄存器”+,它的内容就是系统剪贴板的内容。可以在Vim里用”+p粘贴出来。
    5.多文件操作
    ——————————————————————————–
    :ls (:buffers) 显示buffer列表
    :bn 转到下一个buffer
    :bp 转到上一个buffer
    :b 3 转到编号为 3 的buffer
    :b index.html 转到名为index.html的buffer
    :sav 另存为……
    :set hidden 切换buffer时不给出保存当前buffer的提示
    CTRL-G 查看当前buffer状态信息,如文件名、总行数、修改后未保存等。
    :sp(:vsp)
    文件名 vim 将分割出一个横(纵)向窗口, 并在该窗口中打开新文件.从 vim6.0 开始,
    文件名可以是一个目录的名称,把该目录打开并显示文件列表, 在文件名上按回车则在本窗口打 开该文件, 若输入O 则在新窗口中打开该文件, 输入
    ? 可以看 到帮助信息 。
    :e 文件名 vim 将在原窗口中打开新的文件, 若旧文件编辑过, 会要求保存.
    c-w-w(即 ctrl 键与 w 键一同按下) vim 割了好几个窗口怎么办? 输入此命令可以将光标循环定位到各个窗口之中.c-w-h光标到左窗口,c-w-j下窗口,c-w-k上窗口,c-w-l右窗口。
    ls 此命令查看本 vim 程序已经打开了多少个文件, 在屏幕的最下方
    会显示出如下数据:
    1 %a “usevim.html” 行 162
    2 # “xxxxxx.html” 行 0 其中:
    1 表示打开的文件序号, 这个序号很有用处.
    %a 表示文件代号, % 表示当前编辑的文件,\

表示上次编辑的文件\

“usevim.html” 表示文件名.
行 162 表示光标位置.:b 序号(代号) 此命令将指定序号(代号)的文件在本窗口打开, 其中的序号(代号)
就是用 :ls 命令看到的.
:set diff 此命令用于比较两个文件, 可以用
:vsp filename
命令打开另一个文件, 然后在每个文件窗口中输入此命令,就能看
到效果了.
6. 查找/替换
——————————————————————————–
查找:
/xxx(?xxx) 表示在整篇文档中搜索匹配xxx的字符串, / 表示向下查找, ? 表示
向上查找.其中xxx可以是正规表达式,关于正规式就不多说了.
一般来说是区分大小写的, 要想不区分大小写, 那得先输入
:set ignorecase
查找到以后, 再输入 n 查找下一个匹配处, 输入 N 反方向查找.
*(#) 当光标停留在某个单词上时, 输入这条命令表示查找与该单词匹配的
下(上)一个单词. 同样, 再输入 n 查找下一个匹配处, 输入 N 反方
向查找.
g*(g#) 此命令与上条命令相似, 只不过它不完全匹配光标所在处的单词, 而
是匹配包含该单词的所有字符串.
gd 本命令查找与光标所在单词相匹配的单词, 并将光标停留在文档的非
注释段中第一次出现这个单词的地方.
% 本命令查找与光标所在处相匹配的反括号, 包括 () [] {}
f(F)x 本命令表示在光标所在行进行查找, 查找光标右(左)方第一个x字符.
找到后:
输入 ; 表示继续往下找
输入 , 表示反方向查找
替换:
替换是 vi 的强项, 因为可以用正规表达式来匹配字符串.以下提供几个例子.
:s/aa/bb/g 将光标所在行出现的所有包含 aa 的字符串中的 aa 替换为 bb
:s//bb/g 将光标所在行出现的所有 aa 替换为 bb, 仅替换 aa 这个单词
:%s/aa/bb/g 将文档中出现的所有包含 aa 的字符串中的 aa 替换为 bb
:12,23s/aa/bb/g 将从12行到23行中出现的所有包含 aa 的字符串中的 aa 替换为 bb
:12,23s/^/#/ 将从12行到23行的行首加入 # 字符
:%s= *$== 将所有行尾多余的空格删除
:g/^s*$/d 将所有不包含字符(空格也不包含)的空行删除.
例:将“(1), …., (2), ….,(100)”替换成“(2), …., (3), …., (101)”。
在文本中一处处找到并修改是很累的,在VIM下一条命令就可以搞定:
:%s/((d+))/=”(“.(submatch(1)+1).”)”/g
命令解释如下:
% 全文(“%”是“1,$”范围的缩写)
s 替换
/ 搜索字符串开始
( 左括号
) 开始记录匹配
d+ 一个或多个数字
) 结束记录匹配
) 右括号
/ 搜索字符串结束
= 把后面的表达式计算出来作为替换字符串
“(” 左括号
. 字符串连接运算符
(submatch(1) + 1) 把第一个匹配的结果加一作为一个整体返回
.”)” 添上右括号
/g 替换字符串结束,g表示替换每一行的所有匹配结果。
宏替换
vi 不仅可以用 abbr 来替换文字, 也可以进行命令的宏定义. 有些命令输起来很费劲,
因此我把它们定义到 – 上, 这样就很方便了.这些配置可以预先写到 ~/.vimrc
(windows 下为 $VIM/_vimrc) 中, 写进去的时候不用写前面的冒号.
:nmap  :nohls 取消被搜索字串的高亮
:nmap  w 命令模式下转移光标到不同窗口
:imap   输入模式下运行
:nmap  :%s= *$== 删除所有行尾多余的空格.
:imap   同上
:java 中: (注, 这里为什么说 java 中, 因为以下定义对其他文件格式不起作用, 下文
会说到如何实现这一点)
:nmap  :comp javac:mak -d . %
此命令用 javac 编译 java 文件, 它会自动将光标定位到出错点. 不过这需要定
义一个 javac.vim 文件在 $VIM/compiler 下, 在 javac.vim 里面只有两行字:
setlocal makeprg=javac
setlocal errorformat=%A%f:%l: %m,%-Z%p^,%-C%.%#
:nmap  :comp ant:mak
此命令用 ant 编译 java 文件, 它会自动将光标定位到出错点. 一般来说, 安装
vim 后已经有了compiler/ant.vim文件, 因此这个命令可以直接使用. 但是需要
在当前目录下有 build.xml 文件, 当然还必须安装 ant 才行.
:nmap  :cl 此命令用于查看所有的编译错误.
:imap
:nmap  :cc 此命令用于查看当前的编译错误.
:imap
:nmap  :cn 此命令用于跳到下一个出错位置.
:imap
:nmap  :cp 此命令用于跳到上一个出错位置.
:imap
:nmap  :JavaBrowser
此命令用于在窗口左部分割出一个新窗口, 里面的内容是 java 的资源树, 包括
本文件中出现的类, 类的成员变量及成员方法, 就好像 JCreator 表现的那样.
在这个窗口中输入 ? 会看到帮助. 嘿嘿, 很好用, 不过需要 ctags 支持.
:imap
TAB AND autocmd
——————————————————————————–
TAB 就是制表符, 单独拿出来做一节是因为这个东西确实很有用.\

输入此命令则光标所在行向右移动一个 tab.
5>> 输入此命令则光标后 5 行向右移动一个 tab.
:12,24> 此命令将12行到14行的数据都向右移动一个 tab.
:12,24>> 此命令将12行到14行的数据都向右移动两个 tab.
那么如何定义 tab 的大小呢? 有人愿意使用 8 个空格位, 有人用4个, 有的用2个.
有的人希望 tab 完全用空格代替, 也有的人希望 tab 就是 tab. 没关系, vim 能
帮助你.以下的设置一般也都先写入配置文件中, 免得老敲.
:set shiftwidth=4 设置自动缩进 4 个空格, 当然要设自动缩进先.
:set sts=4 即设置 softtabstop 为 4. 输入 tab 后就跳了 4 格.
:set tabstop=4 实际的 tab 即为 4 个空格, 而不是缺省的 8 个.
:set expandtab 在输入 tab 后, vim 用恰当的空格来填充这个 tab.
autocmd
这个命令十分的强大, 可以用这个命令实现对不同的文件格式应用不同的配置; 可以
在新建文件时自动添加上版权声明等等. 这些命令一般定义在 ~/.vimrc 这样的配置文件
里面. 由于他很强大, 所以我不能给出很具体的说明, 只能举几个例子, 详细的请看帮助.
:autocmd! 删除所有之前的自动命令.
autocmd FileType java source ~/.vim/files/java.vim
autocmd FileType java source ~/.vim/files/jcommenter.vim
以上两条命令让我在打开 java 文件时才应用后面提到的两个配置文件.
autocmd BufNewFile *.java 0r ~/.vim/files/skeletons/java.skel
以上这条命令让我在新建 java 文件时自动加入 java.skel 文件的内容.
autocmd BufNewFile *.java normal gnp
以上这条命令让我在新建 java 文件时自动运行 gnp 命令, 这个命令进行一些特殊化
处理, 比如将新 java 文件中的 __date__ 替换成今天的日期什么的.
常用脚本和常用配置
——————————————————————————–
常用脚本
在 vim.sf.net 你可以发现很多脚本(script), 这些脚本常常有让你意想不到的作用.
我常用的有:
jcommenter.vim 自动加入 javadoc 风格的注释.
JBrowser.vim 类资源浏览. C, C++ 等可以用 Tlist
还有许多有用的, 比如 checkstyle.vim 可以检验你的编程风格, jad.vim 可以直接
反编译 .class 文件等等.
常用配置
在~/.vimrc 配置文件中你常常需要一些个性化配置. 比如上面写的一些宏定义, 一些
autocmd 定义等等. 比如:
set suffixes=.bak,~,.o,.h,.info,.swp,.aux,.bbl,.blg,.dvi,.lof,.log,.lot,.ps,.toc
这样在vim中打开文件时, 按 tab 键补齐文件名时它会忽略上述文件.
set nu 显示行号
set ai 设置自动缩进
map Y y$ 让 Y 和 D 一样, 要不然 Y 的本意和 yy 一样
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net.sixxs.org/u/24474/showart_238643.html

C语言中time函数【转载】

C语言中time函数【转载】

转自:http://www.examda.com/ncre2/C/jichu/20100825/08150493.html\
 
 
C/C++中的日期和时间
头文件 time.h
函数用途 函数名
得到处理器时间 clock
得到时间差 difftime
设置时间 mktime
得到时间 time
得到以ASCII码表示的时间 asctime
得到字符串表示的时间 ctime
得到指定格式的时间 strftime
摘要:
本文从介绍基础概念入手,探讨了在C/C++中对日期和时间操作所用到的数据结构和函数,并对计时、时间的获取、时间的计算和显示格式等方面进行了阐述。本文还通过大量的实例向你展示了time.h头文件中声明的各种函数和数据结构的详细使用方法。
关键字:
UTC(世界标准时间),Calendar Time(日历时间),epoch(时间点),clock tick(时钟计时单元)
1.概念
在C/C++中,对字符串的操作有很多值得注意的问题,同样,C/C++对时间的操作也有许多值得大家注意的地方。最近,在技术群中有很多网友 也多次问到 过C++语言中对时间的操作、获取和显示等等的问题。下面,在这篇文章中,笔者将主要介绍在C/C++中时间和日期的使用方法.
通过学习许多C/C++库,你可以有很多操作、使用时间的方法。但在这之前你需要了解一些“时间”和“日期”的概念,主要有以下几个:
Coordinated Universal Time(UTC):协调世界时,又称为世界标准时间,也就是大家所熟知的格林威治标准时间 (Greenwich Mean Time,GMT)。比如,中国内地的时间与UTC的时差为+8,也就是UTC+8。美国是UTC-5。
Calendar Time:日历时间,是用“从一个标准时间点到此时的时间经过的秒数”来表示的时间。这个标准时间点对不同的编译器来说会有所不同,但 对一个编译系统来说,这个标准时间点是不变的,该编译系统中的时间对应的日历时间都通过该标准时间点来衡量,所以可以说日历时间是“相对时间”,但是无论 你在哪一个时区,在同一时刻对同一个标准时间点来说,日历时间都是一样的。
epoch:时间点。时间点在标准C/C++中是一个整数,它用此时的时间和标准时间点相差的秒数(即日历时间)来表示。
clock tick:时钟计时单元(而不把它叫做时钟滴答次数),一个时钟计时单元的时间长短是由CPU控制的。一个clock tick不是CPU的一个时钟周期,而是C/C++的一个基本计时单位。
我们可以使用ANSI标准库中的time.h头文件。这个头文件中定义的时间和日期所使用的方法,无论是在结构定义,还是命名,都具有明显的C语言风格。下面,我将说明在C/C++中怎样使用日期的时间功能。
2. 计时
C/C++中的计时函数是clock(),而与其相关的数据类型是clock_t。在MSDN中,查得对clock函数定义如下:
clock_t clock( void );
这个函数返回从“开启这个程序进程”到“程序中调用clock()函数”时之间的CPU时钟计时单元(clock tick)数,在MSDN中称之为挂钟 时间(wal-clock)。其中clock_t是用来保存时间的数据类型,在time.h文件中,我们可以找到对它的定义:
#ifndef _CLOCK_T_DEFINED
typedef long clock_t;
#define _CLOCK_T_DEFINED
#endif
很明显,clock_t是一个长整形数。在time.h文件中,还定义了一个常量CLOCKS_PER_SEC,它用来表示一秒钟会有多少个时钟计时单元,其定义如下:
#define CLOCKS_PER_SEC ((clock_t)1000)
可以看到每过千分之一秒(1毫秒),调用clock()函数返回的值就加1。下面举个例子,你可以使用公式clock()/CLOCKS_PER_SEC来计算一个进程自身的运行时间:
void elapsed_time()
{
printf(“Elapsed time:%u secs.n”,clock()/CLOCKS_PER_SEC);
}
当然,你也可以用clock函数来计算你的机器运行一个循环或者处理其它事件到底花了多少时间:
#include “stdio.h”
#include “stdlib.h”
#include “time.h”
int main( void )
{
long i = 10000000L;
clock_t start, finish;
double duration;
/* 测量一个事件持续的时间*/
printf( “Time to do %ld empty loops is “, i );
start = clock();
while( i– )
finish = clock();
duration = (double)(finish – start) / CLOCKS_PER_SEC;
printf( “%f secondsn”, duration );
system(“pause”);
}
在笔者的机器上,运行结果如下:
Time to do 10000000 empty loops is 0.03000 seconds
上面我们看到时钟计时单元的长度为1毫秒,那么计时的精度也为1毫秒,那么我们可不可以通过改变CLOCKS_PER_SEC的定义,通过把它定义的大一些,从而使计时精度更高呢?通过尝试,你会发现这样是不行的。在标准C/C++中,最小的计时单位是一毫秒。
3.与日期和时间相关的数据结构
在标准C/C++中,我们可通过tm结构来获得日期和时间,tm结构在time.h中的定义如下:
#ifndef _TM_DEFINED
struct tm {
int tm_sec; /* 秒 – 取值区间为[0,59] */
int tm_min; /* 分 – 取值区间为[0,59] */
int tm_hour; /* 时 – 取值区间为[0,23] */
int tm_mday; /* 一个月中的日期 – 取值区间为[1,31] */
int tm_mon; /* 月份(从一月开始,0代表一月) – 取值区间为[0,11] */
int tm_year; /* 年份,其值等于实际年份减去1900 */
int tm_wday; /* 星期 – 取值区间为[0,6],其中0代表星期天,1代表星期一,以此类推 */
int tm_yday; /* 从每年的1月1日开始的天数 – 取值区间为[0,365],其中0代表1月1日,1代表1月2日,以此类推 */
int tm_isdst; /* 夏令时标识符,实行夏令时的时候,tm_isdst为正。不实行夏令时的进候,tm_isdst为0;不了解情况时,tm_isdst()为负。*/
};
#define _TM_DEFINED
#endif
ANSI C标准称使用tm结构的这种时间表示为分解时间(broken-down time)。而日历时间(Calendar Time)是通过 time_t数据类型来表示的,用time_t表示的时间(日历时间)是从一个时间点(例如:1970年1月1日0时0分0秒)到此时的秒数。在 time.h中,我们也可以看到time_t是一个长整型数:
#ifndef _TIME_T_DEFINED
typedef long time_t; /* 时间值 */
#define _TIME_T_DEFINED /* 避免重复定义 time_t */
#endif
 
大家可能会产生疑问:既然time_t实际上是长整型,到未来的某一天,从一个时间点(一般是1970年1月1日0时0分0秒)到那时的秒数(即日 历时 间)超出了长整形所能表示的数的范围怎么办?对time_t数据类型的值来说,它所表示的时间不能晚于2038年1月18日19时14分07秒。为了能够 表示更久远的时间,一些编译器厂商引入了64位甚至更长的整形数来保存日历时间。比如微软在Visual C++中采用了__time64_t数据类型来 保存日历时间,并通过_time64()函数来获得日历时间(而不是通过使用32位字的time()函数),这样就可以通过该数据类型保存3001年1月 1日0时0分0秒(不包括该时间点)之前的时间。
在time.h头文件中,我们还可以看到一些函数,它们都是以time_t为参数类型或返回值类型的函数:
double difftime(time_t time1, time_t time0);
time_t mktime(struct tm * timeptr);
time_t time(time_t * timer);
char * asctime(const struct tm * timeptr);
char * ctime(const time_t *timer);
此外,time.h还提供了两种不同的函数将日历时间(一个用time_t表示的整数)转换为我们平时看到的把年月日时分秒分开显示的时间格式tm:
struct tm * gmtime(const time_t *timer);
struct tm * localtime(const time_t * timer);
通过查阅MSDN,我们可以知道Microsoft C/C++ 7.0中时间点的值(time_t对象的值)是从1899年12月31日0时0分0秒到 该时间点所经过的秒数,而其它各种版本的Microsoft C/C++和所有不同版本的Visual C++都是计算的从1970年1月1日0时0分0 秒到该时间点所经过的秒数。
4.与日期和时间相关的函数及应用
在本节,我将向大家展示怎样利用time.h中声明的函数对时间进行操作。这些操作包括取当前时间、计算时间间隔、以不同的形式显示时间等内容。
4.1 获得日历时间
我们可以通过time()函数来获得日历时间(Calendar Time),其原型为:time_t time(time_t * timer);
如果你已经声明了参数timer,你可以从参数timer返回现在的日历时间,同时也可以通过返回值返回现在的日历时间,即从一个时间点(例 如:1970 年1月1日0时0分0秒)到现在此时的秒数。如果参数为空(NUL),函数将只通过返回值返回现在的日历时间,比如下面这个例子用来显示当前的日历时间:
#include “time.h”
#include “stdio.h”
int main(void)
{
struct tm *ptr;
time_t lt;
lt =time(NUL);
printf(“The Calendar Time now is %dn”,lt);
return 0;
}
运行的结果与当时的时间有关,我当时运行的结果是:
The Calendar Time now is 1122707619
其中1122707619就是我运行程序时的日历时间。即从1970年1月1日0时0分0秒到此时的秒数。
4.2 获得日期和时间
这里说的日期和时间就是我们平时所说的年、月、日、时、分、秒等信息。从第2节我们已经知道这些信息都保存在一个名为tm的结构体中,那么如何将一个日历时间保存为一个tm结构的对象呢?
其中可以使用的函数是gmtime()和localtime(),这两个函数的原型为:
struct tm * gmtime(const time_t *timer);
struct tm * localtime(const time_t * timer);
其中gmtime()函数是将日历时间转化为世界标准时间(即格林尼治时间),并返回一个tm结构体来保存这个时间,而localtime() 函数是将日 历时间转化为本地时间。比如现在用gmtime()函数获得的世界标准时间是2005年7月30日7点18分20秒,那么我用localtime()函数 在中国地区获得的本地时间会比世界标准时间晚8个小时,即2005年7月30日15点18分20秒。下面是个例子:
#include “time.h”
#include “stdio.h”
int main(void)
{
struct tm *local;
time_t t;
t=time(NUL);
local=localtime(&t);
printf(“Local hour is: %dn”,local->tm_hour);
local=gmtime(&t);
printf(“UTC hour is: %dn”,local->tm_hour);
return 0;
}
运行结果是:
Local hour is: 15
UTC hour is: 7
4.3 固定的时间格式
我们可以通过asctime()函数和ctime()函数将时间以固定的格式显示出来,两者的返回值都是char*型的字符串。返回的时间格式为:
星期几 月份 日期 时:分:秒 年n
例如:Wed Jan 02 02:03:55 1980n
其中n是一个换行符,是一个空字符,表示字符串结束。下面是两个函数的原型:
char * asctime(const struct tm * timeptr);
char * ctime(const time_t *timer);
其中asctime()函数是通过tm结构来生成具有固定格式的保存时间信息的字符串,而ctime()是通过日历时间来生成时间字符串。这样 的话, asctime()函数只是把tm结构对象中的各个域填到时间字符串的相应位置就行了,而ctime()函数需要先参照本地的时间设置,把日历时间转化为 本地时间,然后再生成格式化后的字符串。在下面,如果t是一个非空的time_t变量的话,那么:
printf(ctime(&t));
等价于:
struct tm *ptr;
ptr=localtime(&t);
printf(asctime(ptr));
那么,下面这个程序的两条printf语句输出的结果就是不同的了(除非你将本地时区设为世界标准时间所在的时区):
#include “time.h”
#include “stdio.h”
int main(void)
{
struct tm *ptr;
time_t lt;
lt =time(NUL);
ptr=gmtime(<);
printf(asctime(ptr));
printf(ctime(<));
return 0;
}
运行结果:
Sat Jul 30 08:43:03 2005
Sat Jul 30 16:43:03 2005
4.4 自定义时间格式
我们可以使用strftime()函数将时间格式化为我们想要的格式。它的原型如下:
size_t strftime(
char *strDest,
size_t maxsize,
const char *format,
const struct tm *timeptr
);
我们可以根据format指向字符串中格式命令把timeptr中保存的时间信息放在strDest指向的字符串中,最多向strDest中存放maxsize个字符。该函数返回向strDest指向的字符串中放置的字符数。
函数strftime()的操作有些类似于sprintf():识别以百分号(%)开始的格式命令集合,格式化输出结果放在一个字符串中。格式 化命令说明 串strDest中各种日期和时间信息的确切表示方法。格式串中的其他字符原样放进串中。格式命令列在下面,它们是区分大小写的。
%a 星期几的简写
%A 星期几的全称
%b 月分的简写
%B 月份的全称
%c 标准的日期的时间串
%C 年份的后两位数字
%d 十进制表示的每月的第几天
%D 月/天/年
%e 在两字符域中,十进制表示的每月的第几天
%F 年-月-日
%g 年份的后两位数字,使用基于周的年
%G 年分,使用基于周的年
%h 简写的月份名
%H 24小时制的小时
%I 12小时制的小时
%j 十进制表示的每年的第几天
%m 十进制表示的月份
%M 十时制表示的分钟数
%n 新行符
%p 本地的AM或PM的等价显示
%r 12小时的时间
%R 显示小时和分钟:hh:mm
%S 十进制的秒数
%t 水平制表符
%T 显示时分秒:hh:mm:ss
%u 每周的第几天,星期一为第一天 (值从0到6,星期一为0)
%U 第年的第几周,把星期日做为第一天(值从0到53)
%V 每年的第几周,使用基于周的年
%w 十进制表示的星期几(值从0到6,星期天为0)
%W 每年的第几周,把星期一做为第一天(值从0到53)
%x 标准的日期串
%X 标准的时间串
%y 不带世纪的十进制年份(值从0到99)
%Y 带世纪部分的十进制年份
%z,%Z 时区名称,如果不能得到时区名称则返回空字符。
%% 百分号
如果想显示现在是几点了,并以12小时制显示,就象下面这段程序:
#include “time.h”
#include “stdio.h”
int main(void)
{
struct tm *ptr;
time_t lt;
char str[80];
lt=time(NUL);
ptr=localtime(<);
strftime(str,100,”It is now %I %p”,ptr);
printf(str);
return 0;
}
其运行结果为:
It is now 4PM
而下面的程序则显示当前的完整日期:
#include
#include
void main( void )
{
struct tm *newtime;
char tmpbuf[128];
time_t lt1;
time( <1 );
newtime=localtime(<1);
strftime( tmpbuf, 128, “Today is %A, day %d of %B in the year %Y.n”, newtime);
printf(tmpbuf);
}
运行结果:
Today is Saturday, day 30 of July in the year 2005.
4.5 计算持续时间的长度
有时候在实际应用中要计算一个事件持续的时间长度,比如计算打字速度。在第1节计时部分中,我已经用clock函数举了一个例子。Clock()函数可以精确到毫秒级。同时,我们也可以使用difftime()函数,但它只能精确到秒。该函数的定义如下:
double difftime(time_t time1, time_t time0);
虽然该函数返回的以秒计算的时间间隔是double类型的,但这并不说明该时间具有同double一样的精确度,这是由它的参数觉得的(time_t是以秒为单位计算的)。比如下面一段程序:
#include “time.h”
#include “stdio.h”
#include “stdlib.h”
int main(void)
{
time_t start,end;
start = time(NUL);
system(“pause”);
end = time(NUL);
printf(“The pause used %f seconds.n”,difftime(end,start));//<-
system(“pause”);
return 0;
}
运行结果为:
请按任意键继续. . .
The pause used 2.000000 seconds.
请按任意键继续. . .
可以想像,暂停的时间并不那么巧是整整2秒钟。其实,你将上面程序的带有“//<-”注释的一行用下面的一行代码替换:
printf(“The pause used %f seconds.n”,end-start);
其运行结果是一样的。
4.6 分解时间转化为日历时间
这里说的分解时间就是以年、月、日、时、分、秒等分量保存的时间结构,在C/C++中是tm结构。我们可以使用mktime()函数将用tm结构表示的时间转化为日历时间。其函数原型如下:
time_t mktime(struct tm * timeptr);
其返回值就是转化后的日历时间。这样我们就可以先制定一个分解时间,然后对这个时间进行操作了,下面的例子可以计算出1997年7月1日是星期几:
#include “time.h”
#include “stdio.h”
#include “stdlib.h”
int main(void)
{
struct tm t;
time_t t_of_day;
t.tm_year=1997-1900;
t.tm_mon=6;
t.tm_mday=1;
t.tm_hour=0;
t.tm_min=0;
t.tm_sec=1;
t.tm_isdst=0;
t_of_day=mktime(&t);
printf(ctime(&t_of_day));
return 0;
}
运行结果:
Tue Jul 01 00:00:01 1997
现在注意了,有了mktime()函数,是不是我们可以操作现在之前的任何时间呢?你可以通过这种办法算出1945年8月15号是星期几吗?答 案是否定的。因为这个时间在1970年1月1日之前,所以在大多数编译器中,这样的程序虽然可以编译通过,但运行时会异常终止。
5.总结
本文介绍了标准C/C++中的有关日期和时间的概念,并通过各种实例讲述了这些函数和数据结构的使用方法。笔者认为,和时间相关的一些概念是相当重要的,理解这些概念是理解各种时间格式的转换的基础,更是应用这些函数和数据结构的基础。
 \

GDB 命令详细解释【转】

GDB 命令详细解释【转】

(转)GDB 命令详细解释

文章分类:JavaEye

http://blog.csdn.net.sixxs.org/wei801004/archive/2009/06/09/4253911.aspx

GDB 命令详细解释
Linux中包含有一个很有用的调试工具--gdb(GNU Debuger),它可以用来调试C和C++程序,功能不亚于Windows下的许多图形界面的调试工具。

和所有常用的调试工具一样,gdb提供了以下功能:\

监视程序中变量的值\

在程序中设置断点\

程序的单步执行\

在使用gdb前,必须先载入可执行文件,因为要进行调试,文件中就必须包含调试信息,所以在用gcc或cc编译时就需要用-g参数来打开程序的调试选项。

调试开始时,必须先载入要进行调试的程序,可以用以下两种方式:
* 在启动gdb后执行以下命令:
file 可执行文件路径
* 在gdb启动时就载入程序:
gdb 可执行文件路径

载入程序后,接下来就是要进行断点的设置,要监视的变量的添加等工作,下面对在这个过程中常会用到的命令逐一进行介绍:
* list :显示程序中的代码,常用使用格式有:
list
输出从上次调用list命令开始往后的10行程序代码。
list –
输出从上次调用list命令开始往前的10行程序代码。
list n
输出第n行附近的10行程序代码。
list function
输出函数function前后的10行程序代码。
* forward/search :从当前行向后查找匹配某个字符串的程序行。使用格式:
forward/search 字符串
查找到的行号将保存在$_变量中,可以用print $_命令来查看。
* reverse-search :和forward/search相反,向前查找字符串。使用格式同上。
* break :在程序中设置断点,当程序运行到指定行上时,会暂停执行。使用格式:
break 要设置断点的行号
* tbreak :设置临时断点,在设置之后只起作用一次。使用格式:
tbreak 要设置临时断点的行号
* clear :和break相反,clear用于清除断点。使用格式:
clear 要清除的断点所在的行号
* run :启动程序,在run后面带上参数可以传递给正在调试的程序。
* awatch :用来增加一个观察点(add watch),使用格式:
awatch 变量或表达式
当表达式的值发生改变或表达式的值被读取时,程序就会停止运行。
* watch :与awatch类似用来设置观察点,但程序只有当表达式的值发生改变时才会停止运行。使用格 式:
watch 变量或表达式
需要注意的是,awatch和watch都必须在程序运行的过程中设置观察点,即可运行run之后才能设置。
* commands :设置在遇到断点后执行特定的指令。使用格式有:
commands
设置遇到最后一个遇到的断点时要执行的命令
commands n
设置遇到断点号n时要执行的命令
注意,commands后面跟的是断点号,而不是断点所在的行号。
在输入命令后,就可以输入遇到断点后要执行的命令,每行一条命令,在输入最后一条命令后输入end就可以结束输入。
* delete :清除断点或自动显示的表达式。使用格式:
delete 断点号
* disable :让指定断点失效。使用格式:
disable 断点号列表
断点号之间用空格间隔开。
* enable :和disable相反,恢复失效的断点。使用格式:
enable 断点编号列表
* ignore :忽略断点。使用格式:
ignore 断点号 忽略次数
* condition :设置断点在一定条件下才能生效。使用格式:
condition 断点号 条件表达式
* cont/continue :使程序在暂停在断点之后继续运行。使用格式:
cont
跳过当前断点继续运行。
cont n
跳过n次断点,继续运行。
当n为1时,cont 1即为cont。
* jump :让程序跳到指定行开始调试。使用格式:
jump 行号
* next :继续执行语句,但是跳过子程序的调用。使用格式:
next
执行一条语句
next n
执行n条语句
* nexti :单步执行语句,但和next不同的是,它会跟踪到子程序的内部,但不打印出子程序内部的语句。使用格式同上。
* step :与next类似,但是它会跟踪到子程序的内部,而且会显示子程序内部的执行情况。使用格式同上。
* stepi :与step类似,但是比step更详细,是nexti和step的结合。使用格式同上。
* whatis :显示某个变量或表达式的数据类型。使用格式:
whatis 变量或表达式
* ptype :和whatis类似,用于显示数据类型,但是它还可以显示typedef定义的类型等。使用格式:
ptype 变量或表达式
* set :设置程序中变量的值。使用格式:
set 变量=表达式
set 变量:=表达式
* display :增加要显示值的表达式。使用格式:
display 表达式
* info display :显示当前所有的要显示值的表达式。
* delete display/undisplay :删除要显示值的表达式。使用格式:
delete display/undisplay 表达式编号
* disable display :暂时不显示一个要表达式的值。使用格式:
disable display 表达式编号
* enable display :与disable display相反,使用表达式恢复显示。使用格式:
enable display 表达式编号
* print :打印变量或表达式的值。使用格式:
print 变量或表达式
表达式中有两个符号有特殊含义:$和$$。
$表示给定序号的前一个序号,$$表示给定序号的前两个序号。
如果$和$$后面不带数字,则给定序号为当前序号。
* backtrace :打印指定个数的栈帧(stack frame)。使用格式:
backtrace 栈帧个数
* frame :打印栈帧。使用格式:
frame 栈帧号
* info frame :显示当前栈帧的详细信息。
* select-frame :选择栈帧,选择后可以用info frame来显示栈帧信息。使用格式:
select-frame 栈帧号
* kill :结束当前程序的调试。
* quit :退出gdb。

如要查看所有的gdb命令,可以在gdb下键入两次Tab(制表符),运行“help command”可以查看命令command的详细使用格式。
本文仅对使用gdb调试过程中的一些常用指令的用法进行简单地总结,如要获取关于gdb的更详细的资料,请参阅gdb的官方文档:
http://www.gnu.org.sixxs.org/software/gdb/documentation/

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net.sixxs.org/wei801004/archive/2009/06/09/4253911.aspx

windows xp下 glassfish安装及部署【转载】

windows xp下 glassfish安装及部署【转载】

转自:http://www.blogjava.net/ann/articles/260260.html\
 
一. 下载解压glassfish\

  1. 下载地址:\

https://glassfish.dev.java.net/public/downloadsindex.html
2. 解压glassfish :
java -Xmx256m -jar glassfish-installer-v2.1-b57-windows.jar(只要配置好java环境都可以执行)
注意: 必须将协议滚动条从上拖到下,接受按钮就可以点击了。
你的目录下面将会有个glassfish目录。
3. 安装glassfish。
1). 修改配置:  ………./glassfish/setup.xml(在解压后的glassfish目录下面有setup.xml),不修改也可以。
2). 执行命令:  ant -f setup.xml
4.启动glassfish server
asadmin start-domain domain1 这个是默认的domain
5. 测试是否正常启动: 在浏览器里输入:http://localhost:8080
看看是否能正常显示
6. 创建domain
执行命令asadmin create-domain –adminport 4849 customerCenter
二. 部署\

  1. 直接把war或者ear 文件 放在 glassfish/domain/domain1/autodeploy下面,系统会自动部署。\
  2. 是通过命令asadmin deploy部署应用, 另外 asadmin updeploy 卸载应用
    通过asadmin deploy –help 和 asadmin undeploy –help 获得更多帮助\
  3. 通过glassfish管理控制台
    http://localhost:4848\
  4. 目录部属方式:直接把WEB应用目录直接copy到glassfish/domains/domain1/applications/下
    然后通过命令:glassfish/bin/asadmin deploydir full_path/applications/your_app

普通人的编辑利器——VIM(全)【转】

普通人的编辑利器——VIM(全)【转】

转自:http://blog.chinaunix.net/u/22185/showart\_323989.html\
 
2005年5月,我开始用VIM。此后渐入佳境,原来因版权自律而放弃盗版UltraEdit的遗憾一扫而空。并且,从VIM我才体会到,什么才是真正的编辑利器。在善用佳软或 其他论坛发文,我都是先在VIM中输入,并方便高效地编辑好格式,再贴到网上。而我的通讯录、记事、读书笔记、工作记录也是在VIM中完成的。包括一些文 档、数据的处理,让VIM过一下,也会提高不少效率。一句话,自用VIM以来,对它迷恋日深,几乎要超过Total Commander。但是,正如善用佳软及论坛发文所提,我大力推荐“用IrfanView/XnView代替ACDSee、用7-zip代替 WinRar/WinZip、用GIMP代替PhotoShop”,但并未推荐VIM代替UltraEdit。这并不意味着VIM不能胜任,恰恰相反,如 果说IrfanView等替代品比原共享软件还有些差距的话,VIM则远胜UltraEdit。不推荐的唯一原因是,VIM对初学者有点难。

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








3 体验之旅
3.1 初见界面

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

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

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

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

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

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

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

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

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

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

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

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

太神奇了!回放一下?先u,再来一次6@a。既然可以6,当然可以千千万万!
补充说明:高手使用VIM是千变万化的。上面的前2个操作(分行+删标点),完全可以合成一个:%s/(为.)./1r/gc;或再把第3个操作(错落有致)融合到前一个操作中。
*3.10 自由体验*  体验光标移动:请随意按几下j和k,看看反应;再多按几下l和h,看看反应;然后,当你的光标在英文时,请按几下w和b。
对了,gVIM的每一种功能,都有无限可能,因此,你也可以在上面几个字母前加上数字,比如 9w 2h,看它的反应。
体验自动补全:i进来吧,到目前为止还没写过字呢!为简单起见,你直接把用鼠标放到中文的下一行,我们把 Eight Do’s and Eight Don’ts 输入一遍。但是,输入一个E,先别动!按ctrl+p是不是自动补全了?
体验大小写(每次操作后,都用u恢复原状),试一下g~~和guu和gUU和g??(g??后可以不按u,再按一次g??也能恢复原状)
神奇吗?这还是VIM功能的单个表演,真正的高手是把它们组合在一起,完成你自己独特的编辑需求。
3.11 体验语法高亮和折叠
此部分讲起来太复杂。如果你有其他编辑器如UltraEdit基础,会有助于你理解。但VIM在此方面的强大灵活,UltraEdit是难忘其项背的。
仍然是我们编辑的原文件,为简化计,请下载test2.txt;下载tx1.vim并保存在d:program filesvimvimfilessyntaxtx1.vim
用VIM打开(比如要打开d:test2.txt,请在VIM中:tabnew d:test2.txt)它。平平无奇是吗?这是因为VIM并不知道这个文件要加亮。键入一个命令:setf tx1,这就相当于告诉VIM此文件的类型是tx1,所以就按照刚下载的tx1.vim进行高亮和折叠。
  此时你会发现test2.txt完全折起来了。如何打开?你可用鼠标点最左边的+,当然,也可以用命令zr或zR打开(zR打开全部;zr打开当前;zM折叠全部;zm折叠当前)。打开后,看到高亮效果了吧。可以对文字设定前景色、背景色、粗、斜、下划线风格。
3.12 加密文件
文本文件打开最快,编辑起来最容易,并且在VIM中查找非常方便。因此,我用它来记日记,并作为通讯录。但是安全问题怎么办呢?很简单,VIM本身即 可加密(录然解密也要用VIM)。在上述打开的文件中键入:X(是大写X),VIM就提示你设定密码,安全起见要确认第2次。然后,保存(键入:w)。把 VIM或此文件关闭,再打开时,就要输入密码了。只有你输入正确的密码,才能得到正确的文件。
*4 我的应用*  VIM和Total Commander一样,我把它们都设定为开机自动运行,其应用不可胜数。
比如说通讯录管理,我未用任何软件,就用VIM管理一个address.txt。它可以实现:快速启动(我在VIM中定义了书签,键入A就会打 开),加密(用VIM的:X),超强搜索(无须多说),分组折叠(fold),email和电话号的高亮显示(自定义语法文件)吧。\ 再比如,笔者会用VIM来辅助word, excel, bbs发文,安全删除文件,制作精简的五笔词库等。具体可参见 《[我常用的VIM功能](http://blog.sina.com.cn/u/46dac66f010004gy)》,《[活学善用gVIM,提高工作效率:实例篇(合集)](http://blog.sina.com.cn/u/46dac66f010002xz)》,《[用gVIM打造个性化记事本](http://blog.sina.com.cn/u/46dac66f010002he)》等文章。\ 如下两图分别是我的个性化txt示例,和用VIM写此篇文章时的情况:\ ![](images/061008_v6_8720d501.png)\ ![](images/061008_v7_5308af27.png)\ **5 后记**\ 这篇文章比最初计划写得长很多,但仍感觉很多非常优秀的功能没有提到。比如,眼下我写这篇文章,当然用VIM。但是因为有插图,所以用了htm格式。在插入图片时,我只要输入img,VIM会自动换为“<img src=””>”,并把光标放到两个引号中间,以便于我输入图片名称。我输入lnk后,VIM会替换为“<a href=””></a>”。当我想看一下效果时,我只要:! g:studyitpconlinevimxbeta-vim.htm 它就自动在浏览器中打开了。而这一个长长的路径,因为有了自动补全和命令行历史,也非常容易。而当一些url还未确定,需要标注时,我就用一个1,VIM就会以醒目的红色块标出来,一目了然。而下次再打开此文件,它会记得我最后编辑的位置。
在用VIM之前,我曾试过几十种pad和editor,包括长期用Editpad,也曾经比较精通过UltraEdit,也曾经测过EmEditor, EditPlus等。但用了VIM之后,我不再关心windows世界的成千上万的编辑器。因为使用它们的逻辑是“如果有新需求,只能等软件升级或换一个软件”,而使用VIM的逻辑则是“如果有新需求,请做个性化配置或下载插件”。
VIM在手,夫复何求!
最后,向VIM所代表的追求卓越、开源共享的精神致敬!并希望有责任感的用户逐渐减少盗版!
 
最后给个vim资源列表
1.vim的老家
http://vim.sf.net 或者 www.vim.org, 这里有很多vim的tips和scripts
2.vim的中文文档
http://vimcdoc.sourceforge.net/, 这里有pdf格式下载,可以下载了慢慢看.
3.Best of Vim Tips
http://www.rayninfo.co.uk/vimtips.html
在你询问某个技巧之前,先看看这篇Best of Vim Tips,很有可能你就找到答案了.作者搜集整理了大量的vim技巧, 15 Years of Vi + 3 years of Vim and still learning ,作者这么说.
那我们呢?vim的学习是无止境的,学的越多,你的效率就越高
4.VIM Quick Reference Card
这个对于新手很有用,也许刚开始你记不住那么多vim的快捷键,没关系,打印一张卡片放在手边,忘记了可以看看.
http://tnerual.eriogerg.free.fr/vim.html, 这里有pdf, dvi 和tex格式的供下载
5.vim 新手指南
vimtutor: vim内置的快速指南,强烈建议新手先看看这个交互式的入门教程
执行方法: vimtutor, 如果是windows,在vim的安装目录下也有一个vimtutor.bat文件
6.http://www.vi-improved.org/
这里有给新手的一些建议,还有vimrc和gvimrc的实例,稍作修改就可以为己所用.
7.Vim Cookbook
http://www.oualline.com/vim-cook.html
这里也有一些技巧可以学习
8.VIM Reference Card
这里的参考页面作的不错,需要什么可以来这里查找
http://www.linux.ie/articles/tutorials/vim-3.0.refcard.html
9.如果需要用vim编辑XML,看看这里的文章 Vim as XML Editor
http://www.pinkjuice.com/howto/vimxml/index.xml
10.如果需要用vim编辑LaTex,看看这里
http://vim-latex.sourceforge.net/
11.如果你需要vim也能像source insight一样的代码自动完成,可是试试这个: Vim Intellisense
http://insenvim.sourceforge.net/
它支持c++,c#,java,JSP,xml,html 和SQL种语言,依赖perl .缺点是仅仅支持windows平台
12.Vim 的杯子
http://www.cafepress.com/vimrefmug.25635024
你没有看错,是vim的杯子!上面印着Vim Reference ,不过一个需要$10.99,看清楚,是美元
13.color scheme
a) for JAVA
http://www.cs.cmu.edu/~maverick/VimColorSchemeTest/index-java.html
b) for HTML
http://www.cs.cmu.edu/~maverick/VimColorSchemeTest/index-html.html
c) for PERL
http://www.cs.cmu.edu/~maverick/VimColorSchemeTest/index-pl.html
d) for LaTex
http://www.cs.cmu.edu/~maverick/VimColorSchemeTest/index-tex.html
最后强烈推荐水木社区bbs的vim版面: http://bbs.newsmth.net,那里面高手如云,是国内最好的有关vim的专业版面。\

在Glassfish上部署web实际运用【转】

在Glassfish上部署web实际运用【转】

转自:http://www.verybc.com/a/hulianwang/2009/1124/9298.html\
 \

本文介绍了在Glassfish上部署Web应用的操作流程。这个教程中使用的配置是Netbeans5.5.1以及Glassfish V2。

本文介绍了在Glassfish上部署Web实际运用的操作程序。那个教程中应用的配置是Netbeans5.5.1以及Glassfish V2。
本文介绍如何在Glassfish上部署web实际运用。
一,开发道具的选取
Java EE,或者是JSF实际运用开发,Netbeans和Glassfish是最好的搭配选取,前者对于后者有非比寻常好的支持。但要留意netbeans的 版本,5.5是不支持glassfish v2的。而netbeans6还很不稳定,所以现阶段最好的版本是netbeans5.5.1。
涉及Netbeans下开发Java EE实际运用,官方有文档介绍:Java EE 实际运用程序有关教程,那里主要介绍一下生产环境中web实际运用在glassfish下的部署和配置

二,下载安装Glassfish V2

1)下载并解压缩。下载完毕後,运行以下命令:

java -Xmx256m -jar glassfish_filetitle.jar

点击接受弹出的规则后(那里sun较量无聊啊,所有软件 都是,明明一个的普通压缩包,非压成jar让你看一下规则才行),glassfish会解压到一个的名为glassfish的列表里。
2) 改正端口

glassfish是经过ant来安装的,安装脚本在setup.xml下,在里面没成绩改正一些配置,比如端口等等。在setup.xml中主要有以下设置:

xml 源代码

﹤property title=”domain.title” value=”domain1″/﹥  域名 ﹤property title=”instance.title” value=”server”/﹥ ﹤property title=”admin.user” value=”admin”/﹥ 编程用户名 ﹤property title=”admin.passexpress” value=”adminadmin”/﹥ 编程密码 ﹤property title=”admin.port” value=”4848″/﹥ 管理平台端口 ﹤property title=”instance.port” value=”8080″/﹥ 举例端口,也那是经过那个端口来访问web实际运用 ﹤property title=”orb.port” value=”3700″/﹥ ﹤property title=”imq.port” value=”7676″/﹥ ﹤property title=”https.port” value=”8181″/﹥ https端口

根据需求改正以上设置,运行:ant -f setup.xml,假如系统没有安装ant,在glassfishlibant下有一个的ant1.6版。安装结束后,进入glassfish/bin下,在控制台运行下面命令启动glassfish:

asadmin start-domain domain1     // domain1是上面设置的domain.title,系统默认domain1

启动结束后,进入测试也许已经正确启动

asadmin stop-domain domain1  //停止服务器
三,部署web实际运用

有三种方法,没成绩直接将war或ear放在glassfish/domain/autodeploy列表 下,glassfish启动后会自动部署。第二是经过命令asadmin deploy部署实际运用, 另外 asadmin updeploy 卸载实际运用。经过asadmin deploy –help 和 asadmin undeploy –help 获得更多帮助。

第三是经过我推荐的方法,经过glassfish管理控制台进入,默认用户admin,密码adminadmin。打开後看到如下界面:

进入左边菜单, Applications -> Web Applications,在列表中没成绩看到已经部署的实际运用,如要部署新实际运用,点击deploy按钮,选取本地的war,设定好context path,点击OK,无论部署胜利或失败,都会看到相应的消息提示

注:经过这种方法,没成绩停止远程部署,只要打开目的服务器上的管理控制台,选取一个的本地的war,就没成绩快速的部署到远程服务器上,非比寻常方便,这也是推荐的理由。对于EJB实际运用,在Enterprise Applications下部署,窍门同上

四,配置jdbc数据源

对于Java EE实际运用,经常需求事先设定数据源,否则部署时会报javax.naming.NameNotFoundException

配置窍门是进入Resources -> JDBC,会看到JDBC Resources和Connection pools

先设定Connection pools,以MySql为例,点击New,命名为MySqlPools,ResourceType选取 javax.sql.ConnectionPoolDataSource,Database vendor肯定选取mysql,然后点击beside进入下一页面。最主要的是设定Additional Properties,也那是jdbc连接配置,设定好url, user, passexpress,更多相关的保持默认value,也没成绩根据需求自己添加属性。设定好连接池后,接着设定JDBC Resources,新建一个的JDBC,名称要和你的web实际运用里的持久化单元采用的数据源的名称一致。
然后再次部署web实际运用,就会正常运行了。

\

自由职业者:如何找到你的第一个客户 【转载】

自由职业者:如何找到你的第一个客户 【转载】

转自:http://www.jobbole.com/entry.php/200\
对很多自由职业者新手而言,第一个客户非常重要。其实不仅全职的自由职业者, 第一个客户对想要兼职的人而言也非常关键。第一个客户可以为你带来实践的机会、一笔收入(尽管可能不多),更重要的是为你积累一个成功案例。伯乐在线 职场博客编译的这篇文章将和你分享如何找到你的第一个客户。

如何找到你的第一个客户 - 伯乐在线-职场博客

一旦你在专业领域有了较好的知名度,客户会不断地找到你,而不是你不停地寻找他们。你经常都会忙个不停,通常也就不需要再去宣传、推广业务了。
不过,当你才刚刚起步或者没有知名度,你该怎么做呢?在你还没有拿到订单前,很难去计划一整天该做什么。其实,这正好是你宣传、推广自己的最佳时期。伯乐在线 职场博客曾经介绍过《自由职业者该如何宣传、推广》,有兴趣的伯友可以进一步了解其中介绍到的方法和技巧。
如何找客户对每个人而言都不一样,对有些人可行的,对其他人却效果不好。不过,笔者还是想分享几个在刚起步时运用过的方法。
不要总是盯着竞标网站
当你一整天都没什么事情时,可能情不自禁地去看看各类的项目网站。在那里,有非常多的客户发布新项目。你不停地看新项目、不停地竞标……希望有一、两个项目拿到手。
实际情况往往不如你所愿,这种竞标类网站给自由职业者带来了很多麻烦,因此也要慎重地这么做。你花费那么多时间浏览网站、竞标、和客户沟通,相对于最后只赚到很低(有时候低的可怕)的报酬,显得很不值。通常来讲,远不如将这些时间花费在宣传、推广上面更有意义。
经常在到处“踩”个脚印
客户来找我是因为几乎在他们出现的地方总是可以“见”到我。我会在他们留过言的博客也留言。然后,我也向那些博客写些文章(投稿)。我每天都会在Twitter上面发布有用的文章和建议,而且我也会在自己的博客上写些原创文章。
每个人总是会问我如何保持长时间地在线。其实,工作时间外或者周末我不常上线,但我还会继续发Twitter消息。由于我的Twitter关联到了 Facebook, 我的网站,Linkedin和其他一些社交网站,因此我看起来就像到处有更新(国内新浪微博也有关联功能,这点确实帮用户节省了很多时间)。通过这种方 式,客户会记得你是谁,认为你是这方面的专家,有相应的项目时也会找到你。
完善你的案例
我有很多兴趣爱好。当建起第一个展示案例的网站时,我把那些做过的事情全部都囊括进来:印刷设计,网页设计,Logo设计,编码, 摄影和绘画。甚至有些草稿都放上去了。
可笑的是,即使我展示了如此多的才能,也没有得到任何的项目。这其实也和《自由职业者要懂得专注》相关,我做这些案例让客户觉得很困惑。如今,我会保持案例简单化,而且只含有那些我提供的编码服务的最好项目。这样的话,客户就可以非常清楚我到底是做什么的。
不断地写文章
客户都期望他们可以得到业内最好的服务。当他们正从两位候选人做选择时,如果一位是从没有听说过的自由职业者,而另一位则是写过些广受欢迎的博客和书籍,你觉得哪位更像是一个专家呢?(客户会选哪位呢?)
当然,你不一定非得要写书。博客其实就是一个让其他人认识你的超好途径。很多网站甚至还会付费让你写博客文章(文章结尾会附上你的简介),这或许会成 为你赚取“外快”的好途径。例如:职场博客的有些文章就是翻译或编译的,伯乐在线会支付给翻译或编译作者报酬,而且在文章末尾保留姓名。
传统的推广方式
社会媒体不会让你变得富有,也不能解决所有的市场推广问题。有时候,一些传统的市场推广方法可能是得到新客户的最好途径。
a 工作网站-工作网站不同于竞标类网站,因为那里只有很多简短的公司描述和那些需要完成的任务。这类客户通常会支付比竞标网站更合理的报酬。
b 邮件宣传 – 这是笔者最初得到客户的最好途径。你简单地通过Google搜索你的客户类型,然后发一份预先写好的宣传材料。虽然早在一年多前我就没有这么做了,但我现在仍然会从那些宣传材料过来客户。
c 面对面接触 – 大部分的自由职业者很少和外界直接接触(这可能因为是自由职业这在家办公的原因),不过,参与相应的活动(大会),同其他的自由职业者建立的人际圈子不但有趣,而且有很大的价值。
通过RSS订阅来寻找客户
大多数的社交网站都提供可以订阅的RSS,这对你寻找新客户非常的有用。例如,如果你上Twitter,然后搜索“招自由职业者(兼职)”,看看会有多少相关的消息? (想想)你还可以用哪些其他的关键字来找客户呢?
你会看到一个RSS按钮在搜索后,因此,通过订阅这种带搜索条件的RSS,可以很好地跟进潜在客户发布的消息。
同样地,几乎所有的工作网站也有RSS。通过这种订阅,可以帮你节省宝贵的时间,而且你也不会错过好的消息,不必记着每天都要跟进每个网站。
告诉每一个人你是做什么的
已经起步以后,让你认识的每个人知道你是做什么的(业务是什么)。你认识的这些人或许知道有人正好需要你提供的服务,因此,尽可能地让他们知道你从事的业务。
尽可能把你的信息到处展示
豪不夸张地讲,起码有几千个网站你可以用来展示和你的网站。这不仅仅是为了做网站SEO而去增加反向链接,还可以让你的“足迹”到处都是。以下列举一些不错的网站(大部分都带链接,其他的自己搜索一下):

不要显得迫不及待
当你有很多工作(业务)时,更多的业务会接踵而至。迫不及待的心态会把客户马上吓跑,因此,绝不要表现的你像没事可做的那样。
例如,经过了几个月的连续工作,你开始闲下来。你可以在Twitter 上说现在闲下了,这是没有问题的。不过,那种每周或每月都发这种Twitter消息的,就显得他们无所事事。(让人觉得他们能力差,工作做的不好)
你有什么见解? 欢迎和我们分享你在刚起步时,如何找到了第一个客户?
——————————————————————-
关注伯乐在线的微博,和喜欢此文的伯友一起交流互动!
@伯乐在线官方微博(新浪微博)
@伯乐在线(腾讯微博)
@伯乐在线(网易微博)
@伯乐在线微博(搜狐微博)
——————————————————————-
您可能对以下文章也感兴趣
自由职业者:挣钱的事从来不曾完美
自由职业者的梦想与现实
自由职业者,如何改善你的职业
资深自由职业者经验谈:自由职业者的5种窘境
自由职业者在家工作的好处与不足
自由职业者,你如何挤出时间?
——————————————————————-
译文来源:伯乐在线 – 职场博客
译文链接:http://www.jobbole.com/entry.php/200
VIA: Freelance Folder  编译:伯乐在线 – 敏捷翻译组 – Martin 编译
转载请注明原文、译文出处及链接和译者,否则视为侵权!\

Linux虚拟机安装VMware Tool

Linux虚拟机安装VMware Tool

转自:http://robert-liu.javaeye.com/blog/534051\
 
 
在虚拟机上安装完系统,可能会遇到一些使用不方便的问题,比如 鼠标切入切出,刚安装的系统分辨率低等等。
     这个时候,我们可以安装VMware Tool来解决这些问题。

  • 启动系统后,鼠标切出,点击“VM—>Settings”,
  • 在弹出的对话框里选择“CD-Rom”,在右边的框中选择“Use ISO image”,并设置其值,在VMware的安装路径下,如D:Program FilesVMwareVMware Workstationlinux.iso。(根据你安装的虚拟系统,选择不同的image,这些是VMWare自带的。)
  • 然后关闭,再单击“VM—>Install VMware Tools”。

      这时,虚拟机系统中会弹文件选择对话框,就是我们导入的VMware Tools。
      接下来在系统中操作。
以root身份执行:
cd /media/cdrom
cp VMwareTools-5.5.1-19175.tar.gz /tmp
cd /tmp
tar zxpf VMwareTools-5.5.1-19175.tar.gz
cd vmware-tools-distrib
./vmware-install.pl
接下来一路回车就可以了。
安装成功后,重启系统,之前遇到的问题,就能解决了。
 \