紫風亂寫

          除了他眼前的屏幕,這個人什么也沒看見。
          被周圍的電腦簇擁著,他只知道他所創造的現實,但又意識到那是虛幻。
          他已經超越了技術。也超越了機器。
          posts - 62, comments - 93, trackbacks - 0, articles - 0
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          前言
          vi是一個跨平臺的文本編輯工具,在我工作中所遇到的所有操作系統平臺都能找到它,同時vi支持手放在主鍵盤上就可以完成所有的操作, 對于我這種非常反感右手在鍵盤、數字鍵、方向鍵和鼠標之間來回切換的懶人來說,實在是太方便了。雖然以前也學習過一點基本的vi操作,但是總是不全,比如 不知道怎么進行字符選中。
          前幾天花了一點時間學習了一下gvim。主要是學習它的一些快捷鍵?,F在的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 閱讀(2042) | 評論 (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 閱讀(3406) | 評論 (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 閱讀(3449) | 評論 (0)編輯 收藏

          從原來的blog中轉了幾個技術文章過來,原來還想轉幾篇非技術的文章,但是想了想,還是算了。

          posted @ 2006-02-04 23:28 Justfly Shi 閱讀(496) | 評論 (0)編輯 收藏

          對于ORACLE9i的初步安裝完成后,接下來由于“ORA-12571:TNS:包寫入程序失敗”錯誤,數據庫并沒有建立問題的解決方法:
          打開“D:\oracle\ora92\network\admin\sqlnet.ora”文件,把其中的“NTS”改為“NONE”

          posted @ 2006-02-04 23:22 Justfly Shi 閱讀(1850) | 評論 (0)編輯 收藏

          Eclipse3.1中的Alt+/快捷鍵除了分配給content assistent之外還分配給了Word Completion。所以在默認的情況下它是不好使的。
          解決方案:把Word Completion的快捷鍵給改成別的,我是改成Alt+shift+/。

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

          posted @ 2006-02-04 23:21 Justfly Shi 閱讀(1225) | 評論 (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 閱讀(792) | 評論 (3)編輯 收藏

          今天在和小彭聊天的時候談到了他在最近的項目中的設計的時候,我說了這么一句“做設計的時候需要從用戶的角度來考慮,寫設計文檔的時候需要從開發人員的角度來考慮”。
          晚 上重新想到了這句話,是挺有用的,但是也是挺簡單的一個道理:做一個工作的時候想好了這個工作的目標是什么,然后從這個目標反過來對這個工作進行要求。比 如,做設計是為了實現需求,所以要從用戶使用的角度來考慮,設計文檔是為了指導開發人員寫代碼的,所以需要從開發人員編碼的角度來考慮。
          這些很簡 單的道理,我們這些IT人能不懂嗎?能不理解嗎?但是很多時候我們都忘了這個道理,很多時候總會說:什么什么事情我不知道該怎么做?OK,真的不知道嗎? 考慮一下做這個事情的目標是什么,然后回過頭來推一下,為了達到這個目標需要做什么?好的,有方案了吧?可能是錯誤的,也可能遺漏了很重要的事情,但是至 少不是不知道該怎么做了吧?

          posted @ 2006-01-17 23:56 Justfly Shi 閱讀(439) | 評論 (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 閱讀(3578) | 評論 (0)編輯 收藏

          就在org.apache.log4j.PatternLayout這個類的說明文檔中

          posted @ 2005-12-08 18:15 Justfly Shi 閱讀(593) | 評論 (0)編輯 收藏

          僅列出標題
          共6頁: 上一頁 1 2 3 4 5 6 下一頁 
          主站蜘蛛池模板: 山丹县| 通化市| 奉节县| 临洮县| 安化县| 高淳县| 黄山市| 兰西县| 来安县| 柳林县| 霍林郭勒市| 瑞丽市| 彭水| 黔西县| 涡阳县| 柳林县| 深圳市| 太仆寺旗| 龙陵县| 双城市| 武宣县| 会宁县| 桂阳县| 双江| 鄂州市| 黔西县| 宝清县| 宿州市| 天全县| 米林县| 元江| 奎屯市| 西城区| 乌鲁木齐市| 宁国市| 房山区| 于田县| 张家界市| 老河口市| 安远县| 苍南县|