歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux綜合 >> Linux資訊 >> 更多Linux

VIM - 小技巧,大改變(和盤托出,無所保留)

  1. 已經在編輯狀態(insert mode)了,如何快速執行 normal mode 的命令? 在編輯文本時,需要快速定位到某個位置,如下一個 d 的位置,難道要 <ESC>、fd、i 這般繁瑣嗎? 其實,使用 Ctrl-O 就可以臨時切換到 normal mode, 執行一個命令後自動返回 insert mode。 於是上述命令序列可以改為: Ctrl-O、fd 即可。 Ctrl-O 要按兩個鍵呢,很麻煩,於是來個 keymap " make ` functions <C-O> in insert mode inoremap ` <C-O> nnoremap ` i`<ESC> 在 normal mode 下按 ` (左上角那個),會正常插入 `, 而在 insert mode 下則相當於按 Ctrl-O, 於是上述命令序列又可簡化為 `fd 即可。 在 insert mode 想粘貼剪貼板內容時,可以輸入 `P,爽吧? 這樣就可以在 insert mode 下天馬行空,不用再按 <ESC>和a 切來切去了。 2. vim 的剪貼板怎麼怪怪的? 用 y 命令拷貝的文本怎麼不能在 X/Windows 的其它應用中使用呢? 事實上,vim 有多個所謂寄存器來寄存剪切的內容。 平時是不是只用 y <motion> 和 p 命令呢? 其實這時使用的是 unamed 寄存器(對應寄存器*,不知對否?),即沒有給定名稱的, 而給定名稱的,可以加前綴 "r 使用。 例如,將當前行放到寄存器a中,輸入: "aY 將另一行(先移到其它行)放到寄存器b中,輸入: "bY 粘貼寄存器a,輸入:"aP 粘貼寄存器b,輸入:"bP 好了,扯遠了,X/Windows 的剪貼板的內容是存在寄存器+中,不信,自己試試:"+P 能不能將簡單的 y 和 p命令與系統剪貼板聯系起來呢? 就這句,浪費了我許多口水:) set clipboard+=unnamed " set clipboard 3. 我不要每次都輸入 this_object.set_... 呵,在 C 的結構或 C++ 的對象設置時,那個結構名或對象名總是重復 n 次要輸入,挺煩的:( 添加這兩句到配置文件中吧: " Ctrl-F to yank line upstairs inoremap <silent> <C-F> <C-O>:exe "norm! kly0jPD"<CR> 這是在編輯模式中使用的,怎麼個用法?舉個例子吧(括號內是我的注釋): (在編輯模式下,先輸入這句:) this_object.set_height(1.80); ( ^) ( ) (用<tab>啊,空格啊移到箭頭所示處,即h處,然後按Ctrl-F) (自動補全成:) this_object.set_ (於是你可以繼續輸入"weight(100);" 了) 不知大家明白沒有,不明白的先試試:) 4. 我想注釋一堆 C++ 代碼 當然,這有許多種我不知道的方法,我的通用方法為,先在配置文件裡添加: vnoremap . :normal .<CR> 呵,一句就夠了,示例如下: 假設你有如下幾行代碼需要注釋: this_object.set_height(1.60); this_object.set_weight(100); this_object.run(); 你先移到第一行,輸入 I//<ESC> (<ESC>就是ESC鍵),將第一行注釋。 然後移到第二行,按 V 進行 line visual mode,按 j 或其它方向移動鍵選好要注釋的所有代碼行, 最後按: . 是不是很神奇? 呵,說白了,這只是在 visual mode 裡使用 redo 的功能而已,有點跑題了。 當然,殊途是同歸的,只是路的長遠而已。 這是條通用的路,可以用在很多地方。 回到主題,誰有更直接的辦法注釋一堆 C++ 代碼?一堆 C 代碼呢(用/* */ 風格) ? 5. vi 的自動完成有什麼新奇的東東? 不就是根據 buffer 的內容來自動完成嗎? 有些插件是可以動態地讀取頭文件或模塊來提供自動完成的,例如 python 的 pydict。(此列表待補全:) 我想介紹的是 vi 基於字典的自動完成: 1. 增加基於字典的自動完成 set complete+=k "add dictionary complete 2. 設定字典文件,字典文件其實是個文件文件,每個單詞占一行 (以下字典文件可能並不存在) set dictionary=/usr/share/dict/Words "set dictionary 3. 呵,因此我是不用什麼英文字典來自動完成的,很少寫英文文章,使用字典後反應很慢。 我用基於字典完成的原因是,使用編輯語言的關鍵字自動完成,見:


" complete from filetype syntax file autocmd Syntax * execute "setlocal dictionary=".$VIMRUNTIME."/syntax/".getbufvar("%","current_syntax").".vim" 對應的語言語法文件必須存在才可使用,於是寫新的 C 文件時,可以直接 inc<Ctrl>-N, cont<Ctrl>-N (請大家不吝賜教,to be continued) 編輯者: zslevin (10/16/04 10:53)



Copyright © Linux教程網 All Rights Reserved