紫风乱写

除了他眼前的屏幕,这个人什么也没看见。
被周围的电脑簇拥着,他只知道他所创造的现实,但又意识到那是虚幻。
他已经超越了技术。也超越了机器。
posts - 62, comments - 93, trackbacks - 0, articles - 0
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

前言
vi是一个跨平台的文本编辑工具,在我工作中所遇到的所有操作系统平台都能找到它,同时vi支持手放在主键盘上就可以完成所有的操作, 对于我这种非常反感右手在键盘、数字键、方向键和鼠标之间来回切换的懒人来说,实在是太方便了。虽然以前也学习过一点基本的vi操作,但是总是不全,比如 不知道怎么进行字符选中。
前几天花了一点时间学习了一下gvim。主要是学习它的一些快捷键。现在的gvim已经是7.0版本,自带了一份中文的简短的教程,对于我这个只需要学习一下简单操作的初级用户来说已经足够了。


目录
移动
字符编辑
搜索替换
命令格式
文件操作


移动

           k (上行) 
h (左移)            l (右移)
           j (下行)          
0行头 $行尾 e 单词结尾 w单词开头 Ctrl+e 窗口内容向下移动 Ctrl+y窗口内容向上移动
Ctrl-g 显示当前光标所在位置和文件状态信息。
Shift-G 用于将光标跳转至文件最后一行。
LineNumber Shift-G 将光标移动至该行号代表的行


字符编辑

i 在当前位置开始编辑
a 在当前位置之后开始编辑
x 删除光标所在位置的字符
A 在当前行末尾开始编辑
dw 从当前光标删除至单字/单词末尾
d$ 从当前光标删除至当前行末尾
dd 删除整行
u 撤消以前的操作
U 撤消在一行中所做的改动
CTRL-R    撤消以前的撤消命令,恢复以前的操作结果
p 重新置入已经删除的文本内容
r 替换光标所在位置的字符
cw 替换当前光标到单词的末尾的内容
c$ 替换当前光标到行末的内容
小写的 o 在光标下方打开新的一行并将光标置于新开的行首,进入插入模式
大写的 O 在光标上方打开新的一行并将光标置于新开的行首,进入插入模式
小写的 a 在光标所在位置之后插入文本
大写的 A 在光标所在行的行末之后插入文本
大写的 R 进入替换模式,直至按 <ESC> 键退出替换模式而进入正常模式。
%  将光标移动到配对的括号上


搜索替换

   输入 / 然后紧随一个字符串是则是在当前所编辑的文档中向后查找该字符串。
     输入问号 ? 然后紧随一个字符串是则是在当前所编辑的文档中向前查找该字
     符串。完成一次查找之后按 n 键则是重复上一次的命令,可在同一方向上查
     找下一个字符串所在;或者按 Shift-N 向相反方向查找下该字符串所在。


   在一行内替换头一个字符串 old 为新的字符串 new,请输入  :s/old/new
     在一行内替换所有的字符串 old 为新的字符串 new,请输入  :s/old/new/g
     在两行内替换所有的字符串 old 为新的字符串 new,请输入  :#,#s/old/new/g
     在文件内替换所有的字符串 old 为新的字符串 new,请输入  :%s/old/new/g
     进行全文替换时询问用户确认每个替换需添加 c 选项,请输入 :%s/old/new/gc


命令格式

   在正常模式下一个命令的格式是∶

       [number]   command   object     或者     command    [number]   object
     其意是∶
       number - 代表的是命令执行的次数
       command - 代表要做的事情,比如 d 代表删除
       object - 代表要操作的对象,比如 w 代表单字/单词,$ 代表到行末等等。



文件操作

  :w FILENAME  可将当前 VIM 中正在编辑的文件保存到名为 FILENAME 的文
     件中。

  :#,#w FILENAME 可将当前编辑文件第 # 行至第 # 行的内容保存到文件
     FILENAME 中。

  :r FILENAME 可提取磁盘文件 FILENAME 并将其插入到当前文件的光标位置
     后面。

posted @ 2006-06-02 20:06 Justfly Shi 阅读(2031) | 评论 (3)编辑 收藏

<label for="myId">点一下这里<input type="checkbox" name="abc" value="nil" id="myId">也可以点一下这里</label>
<input type="checkbox" name="abc" value="nil" id="myId2"><label for="myId2">点一下这里</label>

posted @ 2006-04-14 12:38 Justfly Shi 阅读(3399) | 评论 (0)编辑 收藏

首先,为了能运行ant相关的svn任务,我们到subclipse的子项目svnant里去下载一个svnant
地址是:http://subclipse.tigris.org/servlets/ProjectDocumentList?folderID=1731&expandFolder=1731&folderID=0
这个时候如果linux上已经装有了svn命令行工具的话,那么就可以直接按照把svnant里面的相关的jar放到ant的lib目录下使用就可以了。
不过由于一般新安装的linux系统或者是其他没有svn客户端的系统都没有svn命令行工具,那么可以使用一个全部用java实现的svn客户端实现来作替代。
具体的替代办法在下面这个网址里面提供了
http://tmate.org/svn/kb/user-guide-svnant.html

其内容如下:

Making SvnAnt use JavaSVN

Step-by-step instructions:

  • Remove existing javahl.jar and svnClientAdapter.jar (libraries distirbuted with the svnant) from your Ant classpath (ANT_HOME/lib/ directory).
  • Download latest version of JavaSVN library. You will need javasvn.jar and javasvn-javahl.jar files from the library distribution.
  • Get patched version of svnClientAdapter.jar (version 0.9.32).
  • Put javasvn.jarjavasvn-javahl.jar and svnClientAdapter-0.9.32.jar files on your Ant classpath (ANT_HOME/lib/ directory).

After performing the steps above svnant will use JavaSVN instead of JavaHL bindings.

If you have any questions regarding JavaSVN, would like to report a bug or contribute a patch, please write to support@tmatesoft.com

posted @ 2006-03-30 15:11 Justfly Shi 阅读(3439) | 评论 (0)编辑 收藏

从原来的blog中转了几个技术文章过来,原来还想转几篇非技术的文章,但是想了想,还是算了。

posted @ 2006-02-04 23:28 Justfly Shi 阅读(492) | 评论 (0)编辑 收藏

对于ORACLE9i的初步安装完成后,接下来由于“ORA-12571:TNS:包写入程序失败”错误,数据库并没有建立问题的解决方法:
打开“D:\oracle\ora92\network\admin\sqlnet.ora”文件,把其中的“NTS”改为“NONE”

posted @ 2006-02-04 23:22 Justfly Shi 阅读(1839) | 评论 (0)编辑 收藏

Eclipse3.1中的Alt+/快捷键除了分配给content assistent之外还分配给了Word Completion。所以在默认的情况下它是不好使的。
解决方案:把Word Completion的快捷键给改成别的,我是改成Alt+shift+/。

改快捷键的方法windows->preference->keys

posted @ 2006-02-04 23:21 Justfly Shi 阅读(1218) | 评论 (3)编辑 收藏

http://www.jdom.org/docs/faq.html#a0350

How do I keep the DTD from loading? Even when I turn off validation the parser tries to load the DTD file.

Even when validation is turned off, an XML parser will by default load the external DTD file in order to parse the DTD for external entity declarations. Xerces has a feature to turn off this behavior named "http://apache.org/xml/features/nonvalidating/load-external-dtd" and if you know you're using Xerces you can set this feature on the builder.

builder.setFeature(
"http://apache.org/xml/features/nonvalidating/load-external-dtd", false);

If you're using another parser like Crimson, your best bet is to set up an EntityResolver that resolves the DTD without actually reading the separate file.

import org.xml.sax.*;
import java.io.*;
public class NoOpEntityResolver implements EntityResolver {
public InputSource resolveEntity(String publicId, String systemId) {
return new InputSource(new StringBufferInputStream(""));
}
}

Then in the builder...

builder.setEntityResolver(new NoOpEntityResolver());

There is a downside to this approach. Any entities in the document will be resolved to the empty string, and will effectively disappear. If your document has entities, you need to setExpandEntities(false) code and ensure the EntityResolver only suppresses the DocType.

posted @ 2006-02-04 23:19 Justfly Shi 阅读(782) | 评论 (3)编辑 收藏

今天在和小彭聊天的时候谈到了他在最近的项目中的设计的时候,我说了这么一句“做设计的时候需要从用户的角度来考虑,写设计文档的时候需要从开发人员的角度来考虑”。
晚 上重新想到了这句话,是挺有用的,但是也是挺简单的一个道理:做一个工作的时候想好了这个工作的目标是什么,然后从这个目标反过来对这个工作进行要求。比 如,做设计是为了实现需求,所以要从用户使用的角度来考虑,设计文档是为了指导开发人员写代码的,所以需要从开发人员编码的角度来考虑。
这些很简 单的道理,我们这些IT人能不懂吗?能不理解吗?但是很多时候我们都忘了这个道理,很多时候总会说:什么什么事情我不知道该怎么做?OK,真的不知道吗? 考虑一下做这个事情的目标是什么,然后回过头来推一下,为了达到这个目标需要做什么?好的,有方案了吧?可能是错误的,也可能遗漏了很重要的事情,但是至 少不是不知道该怎么做了吧?

posted @ 2006-01-17 23:56 Justfly Shi 阅读(432) | 评论 (0)编辑 收藏

这两天在修改代码中的log4j的配置。
log4j的配置有两种,一种是按照属性进行配置,一种是使用代码进行配置。
1、按照属性进行配置
按照属性进行配置可以分为按照properties格式的进行配置,一种是按照XML格式的进行配置,后者没有研究过,在此就不写了。
按照properties 的设置比较简单。使用org.apache.log4j.PropertyConfigurator类就可以了
最简单的当时是如下所示的代码了。

PropertyConfigurator.configure(_log4jProperties);
另外在这个类中还有别的方法也相当有用,如:
 static  public  void configureAndWatch(String configFilename)
2、使用代码进行配置
这个比较罗嗦,不过可控制性比较高
代码示例如下:
Layout layout = new PatternLayout(logPattern);
RollingFileAppender fileAppendar 
= new RollingFileAppender(layout,_fileName, true);
fileAppendar.setMaximumFileSize(_fileSize 
* 1024 * 1024);
fileAppendar.setMaxBackupIndex(_fileNum);


ConsoleAppender consoleAppendar 
= new ConsoleAppender(layout, "System.out");
consoleAppendar.setLayout(layout);

Logger mainLogger 
= Logger.getLogger("cn.justfly");
mainLogger.setLevel(Level.toLevel(_logLevel, Level.INFO));
mainLogger.addAppender(fileAppendar);
mainLogger.addAppender(consoleAppendar);

需要分别配置Layout、Appender和Logger
然后把Layout配置给Appender,把Appender添加给Logger,于是乎就大功告成了。
3、去掉原有的属性配置
在上面的两种方面中只是会添加原有的配置。并不会删除掉原先的配置项。
可以使用LogManager.resetConfiguration();来删除原有的配置。
4、锁定
在执行配置代码的时候,当有Logger在干活的时候怎么办?
比如在你去掉原有的配置项而还没有来得及设置新的属性的时候的时候
这个时候Log4j的配置是空的,如果这个时候有一个Logger正在log的话是会出错的。
所以我们需要一个锁,它可以让你在进行配置的时候阻塞其它Logger的动作。
这个锁就是rootLogger。可以通过Logger.getRootLogger()获取到。

posted @ 2005-12-26 21:21 Justfly Shi 阅读(3567) | 评论 (0)编辑 收藏

就在org.apache.log4j.PatternLayout这个类的说明文档中

posted @ 2005-12-08 18:15 Justfly Shi 阅读(585) | 评论 (0)编辑 收藏

仅列出标题
共6页: 上一页 1 2 3 4 5 6 下一页