給程式設計師的Vim入門圖解說明
12-09 Update: The English version of Vim Visual Cheat Sheet is also available. PNG, PDF)
(更新: 在圖內加入基本指令表和說明以及PDF版,方便大家列印出來貼在牆上隨時查看。)
剛在寫那篇關於vi和文字編輯器的文章時,本來想附上一個vim的超簡單入門連結,但找了一下都沒有很滿意的,所以決定自己動手先來畫個入門用的說明圖。
這個圖把vim中基本的移動方法都畫上去了,為了方便programmer,特別列出了很多只有寫程式才會用的按鍵。除了這些以外,其實還有一些好用的東西我還沒想到怎麼畫上去比較好(像是tags、沒有標準快速鍵的tab、man..),如果大家有idea歡迎提供。
這些圖示依照移動的單位大小分為以下幾個種類,分別用不同顏色標示:
(注意,這不是完整的vim快速鍵列表,只是我覺得比較常用的鍵而已。)
| 字元(character) | |
|---|---|
|
h
|
左 |
|
j
|
下 |
|
k
|
上 |
|
l
|
右 |
| 單字(word) | |
|---|---|
|
w
|
下一個word |
|
W
|
下一個word(跳過標點符號) |
|
b
|
前一個word |
|
e
|
跳到目前word的尾端 |
| 行(line) | |
|---|---|
|
0
|
跳到目前行的開頭 |
|
^
|
跳到目前行第一個非空白字元 |
|
$
|
跳到行尾 |
| 段落(paragraph)、區塊(block) | |
|---|---|
|
{
|
上一段(以空白行分隔) |
|
}
|
下一段(以空白行分隔) |
|
[{
|
跳到目前區塊開頭 |
|
]}
|
跳到目前區塊結尾 |
|
%
|
跳到目前對應的括號上(適用各種括號,有設定好的話連HTML tag都能跳) |
| 螢幕(screen)、絕對位置 | |
|---|---|
|
H
|
螢幕頂端 |
|
M
|
螢幕中間 |
|
L
|
螢幕底部 |
|
:x
xG
|
跳到第x行(x是行號) |
| 搜尋(search) | |
|---|---|
|
/xxxx
|
搜尋xxxx |
|
#
|
往前搜尋目前游標所在的字(word) |
|
*
|
往後搜尋目前游標所在的字(word) |
|
fx
|
在目前行往後搜尋字元x |
|
gd
|
跳到目前游標所在的字(word)的定義位置(寫程式用, 跳到定義變數/函式的地方) |
| 分割視窗 | |
|---|---|
|
:split
|
分割視窗(可加檔名順便開啟另一檔案) |
|
:diffsplit xxx
|
以分割視窗和檔案xxx做比較(diff) |
|
Ctrl-W p
|
跳到前一個分割視窗(在兩個分割窗來回切換) |
|
Ctrl-W j
|
跳到下面的分割窗 |
|
Ctrl-W h
|
跳到左邊的分割窗 |
|
Ctrl-W k
|
跳到上面的分割窗 |
|
Ctrl-W l
|
跳到右邊的分割窗 |
| 自動補齊(Auto-completion) (在Insert Mode中使用) | |
|---|---|
|
Ctrl-N
|
自動補齊檔案內的下一個可能字(word) |
|
Ctrl-P
|
自動補齊檔案內的上一個可能字(word) |
|
Ctrl-X Ctrl-F
|
自動補齊檔名 |




December 8th, 2009 at 12:04 am
[...] This post was mentioned on Twitter by Tsung-Hsiang Chang, MacTalks. MacTalks said: 給程式設計師的Vim入門圖解說明 http://ff.im/-cyVEG [...]
December 8th, 2009 at 12:18 am
因為使用寬螢幕的關係,分割視窗個人偏好使用 :vsp (vertical split)
- 回覆留言(Reply)
Cornelius Reply:
December 8th, 2009 at 10:26 am
C-w v 就可以少打兩個字元了
)
- 回覆留言(Reply)
December 8th, 2009 at 12:48 am
呃….其實vim最應該強調的是最基本的操作,因為和一般的editor差太大 (不論GUI還是console的)
一般模式
esc (切入/離開命令模式, save/quit都要在命令模式做…)
i (進入輸入模式[Insert mode],不然沒法打字…)
命令模式
:w (save)
:q (end program)
:u (undo)
Find, replace, copy & paste都有特殊按鍵…方法有幾個,不詳述了
- 回覆留言(Reply)
vgod Reply:
December 8th, 2009 at 1:35 am
這張圖以游標移動為主,基本操作應該要另外畫一張圖了 :p
- 回覆留言(Reply)
vgod Reply:
December 8th, 2009 at 9:09 am
我後來把基本命令也加到圖中了, 感謝你的意見
- 回覆留言(Reply)
December 8th, 2009 at 8:43 am
请问vgod,用的是什么绘图工具,这张图表做的很好看.
- 回覆留言(Reply)
vgod Reply:
December 8th, 2009 at 9:10 am
我用Mac上的OmniGraffle畫的。
- 回覆留言(Reply)
December 8th, 2009 at 9:58 am
可不可以順便請版主介紹一下 常用的vim plug-in
例如寫java時常用的
Mac上Eclipse好慢阿~
- 回覆留言(Reply)
Cornelius Reply:
December 8th, 2009 at 10:21 am
java 的 plugin 很多
像是
javabrowser – Shows java file class, package in a tree as in IDEs. Java source browser.
editjava – lookup source file for classname under cursor
java-apidoc.vim – Java API documentation viewer (JavaDoc)
javacomplete – Omni Completion for JAVA
- 回覆留言(Reply)
December 8th, 2009 at 10:30 am
Cool Stuff~

BTW, c9s 有弄一個 vim-taiwan 的討論區有興趣的朋友可以來交流
http://groups.google.com/group/vim-taiwan
- 回覆留言(Reply)
December 8th, 2009 at 1:45 pm
漏掉 gg=G 阿阿阿阿阿
- 回覆留言(Reply)
vgod Reply:
December 8th, 2009 at 2:15 pm
剛又更新了一次,把gg和G加進去了。
其實我也蠻想放=的,但似乎沒地方塞了orz..
- 回覆留言(Reply)
December 8th, 2009 at 1:45 pm
將編刪指令加上動作,如d3w就是刪除三個字
使用者可以隨意組合~
補充:ctrl-w H/J/K/L會將目前的視窗弄到最左/下/上/右
而且會盡量變成最大化,這個功能也蠻好用的
ctrl-W o 將目前視窗唯一化
ctrl-w ctrl-w跳到下一個視窗
- 回覆留言(Reply)
vgod Reply:
December 8th, 2009 at 2:16 pm
好用指令真是太多了 要塞在小小的表中真是困難呀orz..
- 回覆留言(Reply)
December 8th, 2009 at 2:27 pm
有個command我覺得最重要
就是用ctrl-[ 來取代esc,這樣手指就不用離開鍵盤中央
我覺得這樣對於使用normal mode的意願會增加
而不是在insert mode慢慢地移動上下左右鍵
- 回覆留言(Reply)
vgod Reply:
December 8th, 2009 at 10:18 pm
的確, 我把這個鍵也加到圖上了:)
- 回覆留言(Reply)
December 8th, 2009 at 3:20 pm
您好!我想學習 使用vi編輯器,來撰寫程式~
我以前都是使用IDE開發平台,像是Visual Studio, XCode,以及其他的Ultraedit等等
很久以前就聽說vi很好用~但是,一直沒有機會可以踏入
想了解一下,大家都用vi開發什麼類型的程式呢?如“視窗程式(任何平台)“ “手機程式(任何平台)“ “網頁(這個我有看過)“
在IDE有許多東西都會幫你準備好,所以如果我換vi的話,我是否都要將IDE準備好的東西,寫成template等等之類的
不好意思,問題有點亂!感謝大家@@“
- 回覆留言(Reply)
vgod Reply:
December 8th, 2009 at 10:26 pm
我用vim寫*所有*的程式。
我不確定你說的IDE幫你準備好的東西包括什麼,如果只是一些code template,那的確就自己先寫一份就行了。比較難轉換的是compile, deploy這種事,通常還要順便學個make、ant之類的工具才行。當然不想研究這些的話,也可以呼叫原本IDE的command指令來做這些事,或是乾脆用IDE裡面的vi plugin。但我個人推薦自己寫makefile就是了,這樣可以順便了解IDE底下到底做了什麼事,如果有特殊需求也方便自己動手做而不用在IDE裡找設定找半天。
- 回覆留言(Reply)
Charlie Brown Reply:
December 9th, 2009 at 11:06 am
恩!我了解了!我也來踏入vi的領域!
基本上,我也想了解ㄧ下哪個方向是比較好的,像是您說
“自己寫makefile就是了,這樣可以順便了解IDE底下到底做了什麼事,如果有特殊需求也方便自己動手做而不用在IDE裡找設定找半天“
表示從這個方像去學習可以了解更多的東西是不錯的
非常感謝您!
- 回覆留言(Reply)
December 8th, 2009 at 10:17 pm
基本上各種程式都可以開發啊XD
最近在籌劃在Ptt開一個Editor版,主要用來討論vim和emacs
歡迎前來捧場:)
- 回覆留言(Reply)
vgod Reply:
December 9th, 2009 at 3:18 am
期待開板:)
- 回覆留言(Reply)
Charlie Brown Reply:
December 9th, 2009 at 11:08 am
我會常過去的!
謝謝您!
- 回覆留言(Reply)
dryman Reply:
January 8th, 2010 at 3:43 pm
結果連署完成兩個禮拜了Editor版都還沒開成… so sad
目前只能等了(已寄信催了,卻沒有回覆)
如果開好了還望大家多多捧場
- 回覆留言(Reply)
December 10th, 2009 at 8:58 am
這應該要來個英文版的!
- 回覆留言(Reply)
vgod Reply:
December 10th, 2009 at 10:18 am
其實已經做了:p
- 回覆留言(Reply)
December 12th, 2009 at 7:04 pm
[...] Windows 或者是 UNIX 系統上面非常強大的編輯器,在 vgod’s blog 看到一篇:『給程式設計師的Vim入門圖解說明』,原作者提供了 pdf 以及 png [...]
December 16th, 2009 at 7:53 pm
很棒的教程~~
- 回覆留言(Reply)
December 16th, 2009 at 10:07 pm
[...] 文章来源:http://blog.vgod.tw/2009/12/08/vim-cheat-sheet-for-programmers/ 发表评论 | Trackback 目前还没有任何评论. [...]
December 16th, 2009 at 11:59 pm
很有用,谢谢分享了
- 回覆留言(Reply)
December 19th, 2009 at 5:46 pm
是个好东西,现bookmark了
- 回覆留言(Reply)
December 25th, 2009 at 4:54 pm
[...] 命令图解包括中文和英文版,并提供 PNG 及 PDF 格式,可从 vgod’s blog 下载。 This entry was posted on , 2009年12月25日 at 12:55 上午 and is filed under Linux. [...]
January 2nd, 2010 at 1:51 am
你好,看到你這篇文章後,讓我開始想要學習Vim, 所以我就到網站上
下載了Vim 7.2 for windowsXp的版本回來,再學習的過程中, 使用
Ctags和TagList的套件時,發現如果文件在有中文的路徑下使用TagList
會發生個錯誤:
Taglist: Failed to generate tags for C:\Documents and Settings\yehchge\桌面\test.php
………. 的錯誤, 上網 Google了好久,好像都沒有解決的方法,
好像在解析中文路徑的時候,會出現這樣的問題,不知是否有解決的方法?? 謝謝!
- 回覆留言(Reply)
January 21st, 2010 at 5:48 pm
[...] vim – 很多進階的用法,作者對 vim 非常熟稔,也寫了很多很棒的文章。 給程式設計師的Vim入門圖解說明 – 這陣子推薦非常多人看。 vi / vim 圖解鍵盤指令 – [...]
January 27th, 2010 at 9:24 am
有三個我常用的command是
自動內縮
set autoindent
用空格取代tab
set expandtab
和滑鼠整合(可是在mac下沒辦法和touchpad整合…)
set mouse=a
- 回覆留言(Reply)
January 29th, 2010 at 8:51 pm
o 在游標下方插入一空白行並進入insert mode
這個也蠻好用的
- 回覆留言(Reply)
February 10th, 2010 at 7:22 pm
[...] Vim常用操作命令-1-移动:h/j/k/l: 左/下/上/右 移一格w : 向后词移动 (前面加数字移动多少个词)b : 向前词移动 (前面加数字移动多少个词)e : 向后移到词末ge : 向前移到词末$ : 行末0 : 行首tx : 向右查找本行的x并移到那儿(大写时向左)33G : 移到文件的第33行 *G = shift+ggg : 文件首行G : 文件尾行33% : 文件的33%处H/M/L : 屏幕的首/中/尾行zt/zz/zb : 当前行移到屏幕的首/中/底部-2-跳转:” : 回到跳转来的地方CTRL-O : 跳到一个 “较老” 的地方CTRL-I : 则跳到一个 “较新” 的地方-3-查找:/ : 向下查找(后加关键字)? : 向上查找(后加关键字)n : 下一条符合的记录-4-编辑:i : 转换到插入模式x : 删除当前字符. : 重复最后一次的修改操作(同PS里ctrl+f执行滤镜)u : 撤销操作CTRL-R : 重做p : 将删除的字符插入到当前位置(put)-5-保持退出操作::q : 退出:q! : 不保存退出ZZ : 保存后退出:e! : 放弃修改重新编辑Vim命令壁纸两张适合于初学者的VIM命令图解:原文:给程式设计师的Vim入门图解说明下面这张壁纸也是不错的东东: [...]
February 23rd, 2010 at 12:53 am
請問一下,vim有自動生成程式碼的功能嗎?因為目前寫一些類別其部分程式碼都是固定的,但卻不知道如何著手…..
- 回覆留言(Reply)
March 2nd, 2010 at 6:13 pm
This is coo;
- 回覆留言(Reply)