VIM操作指令
* 同一操作有兩種以上指令可用時,以打字區按鍵為主
= 頁面捲動 = c-e c-y 向下/上捲動一行 Ctrl+x needed first for insert mode zt scroll current line to top of window = 游標移動 = == 基本 == hjkl =方向鍵 左下上右,或方向鍵 (左右不跳行),可配合數字一次跳多行/字 bs sp 左右 (可跳行) c-f c-b 向下/上翻頁(=PgDn PgUp, ps-上下也可) c-d c-u 向下/上翻半頁 == 跳行 == gg 移至檔首 (=1G) G 移至檔尾 (=0G) :54 Goto line 54 (=54gg或54G) 100往後跳100行 (=+或c-m) 100- 往前跳100行 40% 跳到檔案40%的地方 '' 回到上一個位置(雙引號那顆鍵按兩下) H M L 游標跳至畫面 頂 中 底 (停在非空白字元) 3H 3L 游標跳至畫面 頂 底 3行處 === Bookmarks === ma mark position as (a-z) 'a move to position (a-z) '0 open previous file (0~n) :marks 列出Bookmarks == 行內操作 == 0 =Home ^ 移到行首但不包括indent $ =End 80| 跳至column 80 (中文OK) fc Fc 向後/跳至c的位置 tc Tc 向後跳至c的位置之前,向前跳至c的位置之後 ;和, 正向/反向重覆上一個fFtT動作 == 字操作 == e 往後移至字尾(大寫時跳過標點符號) w 往後移至下個字首(大寫時跳過標點符號) b 往前移至字首(大寫時跳過標點符號) == 區塊移動 == ) 移至下一個句子(sentence)首。 ( 移至上一個句子(sentence)首。 } 移至下一個段落(paragraph)首。 { 移至上一個段落(paragraph)首。 * sentence 是以 . ! ? 為區格。 * paragraph 是以空白行為區格。 % 跳躍至與{} [] ()匹配的符號上(目前游標在其中一個符號上) [( 跳躍至前一個( [) 跳躍至下一個) [{ 跳躍至前一個{ ]} 跳躍至下一個} = Command Mode = ~ 大小寫互換 (一個字母或選擇範圍) g?w ROT13 encoding gu{motion} gU{motion} gU2b 把前兩個字換為大寫 (Visual Mode直接按U就好) gu2b 把前兩個字換為小寫 (Visual Mode直接按u就好) (需要研究gu用法) c-n 5c-x 游標下的數字+/-5 . 重覆上一個指令 == 復原/重作 == u undo U 回復整行的所有編輯動作(從游標進入開始算),再按一次Redo c-r redo == 取代 == r 取代 gr 取代,但保持排版 R 連續取代 gR 連續取代,但保持排版 s 取代後進編輯模式 (c/s指令相當於d指令之後進編輯模式,再加上游標位置處理方式不同) cw ce 取代至字尾(不含空白) cb 向前取代至字首 C 取代至行尾 c0 c^ 向前取代至行首/行首縮排(不含游標位置)(=d0a) cc S 取代整行(=0DA) == 刪除(剪下) == x =Del,剪下。 (Insert mode時按Del只是單純的刪除) X 向前刪,相當於一般的backsapce de dw 向後刪至字尾/+空白 db 向前刪至字首(不含游標位置) D 向後刪至行尾(或d$) d0 d^ 向前刪至行首/行首縮排(不含游標位置) 0D 清除本行(不包括換行字元) J 刪除換行字元,並將游標移到該位置。如果本行有字,會在結合的兩行中間插入一個space。 gJ 刪除換行字元,並將游標移到該位置。 dd 刪行 (=:d) dgg 刪至檔首 dG 刪至檔尾 * 所有d和x的指令都是"剪下",不止是刪除。 * J不會"剪下"換行符號,只是單純刪除。 == 複製貼上 == y 複製 (用法跟d一樣,但大Y=yy,並非複製至行尾) yy或Y 複製整行 p 或 P 貼到游標後(下) 或 前(上) ]p 或 [P 與p/P相同,但調整indent gp 或 gP 與p/P相同,但游標會移到貼上的文字之後。(原本是在文字最後一個字) == 暫存器 == * 暫存器說明 * " 上一次複製的內容。 * 0~9 再之前複製的內容。 * a~z 使用者自行使用 * A~Z 同a~z,但為Append功能 * % 目前編輯的檔案名稱 * # 前次編輯的檔案名稱 * + 系統暫存器 (例如Windows剪貼簿) :reg 查看暫存器 "ayy 複製本行至暫存器a "Ayy 附加本行至暫存器a (Append) ""p (=p) == 系統剪貼簿 == "+dd 剪下 (或用s-del) "+yy 複製 (或用c-ins) "+p 貼上 (或用s-ins) 滑鼠中鍵 貼到滑鼠游標指的地方 == 加數字應用 == 3x 刪3個字元 d3w 也是刪3個字元 y3w 複製3個字元 2yy 複製2行 (y2y也行) 5a AB 輸入5次個AB (按ESC後才會跑出) 5dd 刪5行 5J 5行併一行(合併行之間插space) 5j 向下移動5行 = Insert Mode = == 進入 == i a 從游標前/後進入 I 從行首第一個非空白字元進入 A 從行尾進入 o O 游標行下/上加一行進入 == 操作 == c-r0 貼上reg 0的內容 c-a 重覆上次貼上動作 (只試成功一次) c-v 按鍵 輸入特定按鍵,例如c-v tab c-v 數字 輸入ASC碼代表的字元 (Hex還是Dec?) c-n c-p 文字自動完成 向後/向前 c-w 刪除游標前的字元 c-u 刪除本行所有插入的內容 c-d 縮排 = Visual mode = v V 分別為Visual Mode和Visual Line Mode(選字和選行) o 變換選取起始點 (再按一次回復為變換結束點) gv 選擇上一次的選取範圍 aw as ap select a word, a sentence, a paragraph ab aB select a block ( ), a block { } == Visual Block == * c-v進入vitual block * 用鍵盤選擇區塊 * 按大寫I或A進入Inser Mode * 輸入資料 (只會出現在第一行) * 按ESC!過一秒才全部會跑出來 == visincr == 在column mode下產生自動遞增的數字 = 排版 = (依據sw(shiftwidth)) >> indent 水平調整視窗大小 c-w +/- 垂直調整視窗大小 = TAB 操作 = tabe[dit] tabnew tabo[nly] tabn[ext] {count} tabm[ove] = 折疊功能 = 手動產生折疊的指令是 zf、zF zfap ,zf^ 將游標所在處的那個段落折疊成一行。 zf7G 自游標所在處至全文第 7 行折疊起來。 5zF 將游標所在處起算 5 行的內容折疊起來。 zo 將游標所在處的折疊打開。open。 zc 將游標所在處已打開的內容再度折疊起來 zC 將游標所在處已打開的內容全部折疊起來 zR 全部展開。 za Open/close (toggle) a folded group of lines. zA Open a closed fold or close an open fold recursively. zd Delete a folded line. zD Delete all folded lines recursively. zE Eliminate all folded lines in file. zF Create "N" folded lines. = Tags = :ta t jump to tag t :nta jump to n th newer tag in list c-] c-T jump to the tag under cursor, return from tag :ts t list matching tags and select one for jump :tj t jump to tag or select one if multiple matches :tags print tag list :nc-T jump back to n th older tag in tag list :npo jump back from n th older tag in tag list :tl jump to last matching tag c-W{ :pt t preview tag under cursor, tag t c-W] split window and show tag under cursor c-Wz or :pc close tag preview window = 括號指令 = `[[` `]]` start of section backward, forward `[]` `][` end of section backward, forward [( ]) unclosed (, ) backward, forward [{ [} unclosed {, } backward, forward [m ]m start, end of backward, forward java method [# ]# unclosed #if, #else, #endif backward, forward [* ]* start, end of /* */ backward, forward = diff = $ vimdiff filename1 filename2 :diffsplit {filename} :diffthis ]c Jump to next change [c Jump to previous change do diff obtain (:diffget) dp diff put (:diffput) = 其它 = :sh :!c start shell, execute command c in shell K lookup keyword under cursor with man :make start make, read errors and jump to first :cn :cp display the next, previous error :cl :cf list all errors, read errors from file c-L c-G redraw screen, show filename and position gc-G show cursor column, line, and character position ga show ASCII value of character under cursor gf open file which filename is under cursor :redirf redirect output to file f = 常用set指令 = nu[mber] 顯示行號 autoindent tabtop background = 好用指令 = :retab 可以將目前文件中的tab轉換成設定的space。 :1,$s/\t/ /g 取代tab為4 spaces :set filetype= 設定目前檔案的類型,可以讓vim識別文件 ex: set filetype=python ; set filetype=java =可以重新排版 所以可以用gg 跳到第一行,=G重新排版到最後一行 gg=G 就可以把整份文件重新排版 :set hls 搜尋字串高亮顯示,hls!可以關閉這個功能。 :set wrap 自動折行,wrap!可以關閉這個功能。 :set nu 顯示行號,nu!可以關閉這個功能。 = Code Trace = * Ctags * Exuberant Ctags http://ctags.sourceforge.net/ apt-get install exuberant-ctags * 操作 * $ ctags –R * : 為當前目錄(含子目錄)產生tags檔案。 * $ vi –t tag : 打開定義某變數的文件,並移到該變數。 * :ts : tag list * :tp : tag previous * :tn : tag next * Ctrl + ] : 跳到變數定義 * Ctrl + T : 退回原本地方(一步一步) * 語言類型 * $ ctags --list-maps (看目前支援的檔案類型) * $ ctags --langmap=Tcl:+.exp (不用+號的話會變替代) * $ ctags --language-force=language (強制指定語言類型) * Cscope * quickfix * Project * trinity * Source Explore * taglist (Ctag) * NERD_Tree
--
現在還在寫blog分享資訊的人越來越少,如果覺得文章對您有幫助,歡迎在底下留言,這樣我也比較有動力繼續寫下去,謝啦!
睡不著寫東西幫助睡眠對吧XD
嗯嗯,這跟唸經是同樣的道理
怎麼最近都不見了啊?
公司沒法上msn啦,我有傳msn給你有沒看到
用gtalk找我~