索引
- 跳轉
- undo
- 程式碼摺疊功能
- 緩衝區
- 標籤
- 檔案開啟與儲存
- 插入
- 游標移動
- 複製粘貼刪除
- 縮排
- 尋找替換
- bookmarks
- ctags
- bash
- 自動補全
- 分屏
- diff
- 其他
跳躍指令 (jumps)
跳躍指令類似於遊覽器中的<前進><後退>按鈕
CTRL-] -> 跟著link/tag轉入 (follow link/tag)
CTRL-o -> 回到上一次的jump (go back)
CTRL-i -> 跳回下一個 (go forward)
:ju -> 顯示所有的可以跳躍的地方 (print jump list)
重做/回複
u -> undo
CTRL-r -> redo
vim的undo是樹結構的,你可以回到這個結構中的任何地方
:undo 2 -> undo 到結構的2層 (undo to tree 2)
:undolist -> 顯示所有的undo列表 (show undo list)
:earlier 10s -> undo到10秒前的編輯 (undo to 10 seconds ago)
:earlier 10h -> undo到10小時前的編輯 (back to 10 hours ago)
:earlier 1m -> undo到1分鐘前 (back to 1 minutes ago)
下面是undo的tree結構的解釋
………..one
…………. |
……..change 1
…………. |
………one too
………. /……..\
…..change 2 ……. change 3
………… | ………………… |
…….one two ………. me too
……….. |
….. change 4
………..|
…… not two
程式碼摺疊功能
1. 摺疊方式
可用選項 'foldmethod' 來設定摺疊方式:set fdm=*****。
有 6 種方法來選定摺疊:
manual 手工定義摺疊
indent 更多的縮排表示更進階別的摺疊
expr 用運算式來定義摺疊
syntax 用文法高亮來定義摺疊
diff 對沒有更改的文本進行摺疊
marker 對文中的標誌摺疊
注意,每一種摺疊方式不相容,如不能即用expr又用marker方式,我主要輪流使用indent和marker方式進行摺疊。
使用時,用:set fdm=marker 命令來設定成marker摺疊方式(fdm是foldmethod的縮寫)。
要使每次開啟vim時摺疊都生效,則在.vimrc檔案中添加設定,如添加:set fdm=syntax,就像添加其它的初始化設定一樣。
2. 摺疊命令
選取了摺疊方式後,我們就可以對某些代碼實施我們需要的摺疊了,由於我使用indent和marker稍微多一些,故以它們的使用為例:
如果使用了indent方式,vim會自動的對大括弧的中間部分進行摺疊,我們可以直接使用這些現成的摺疊成果。
在可摺疊處(大括弧中間):
zc 摺疊
zC 對所在範圍內所有嵌套的摺疊點進行摺疊
zo 展開摺疊
zO 對所在範圍內所有嵌套的摺疊點展開
[z 到當前開啟的摺疊的開始處。
]z 到當前開啟的摺疊的末尾處。
zj 向下移動。到達下一個摺疊的開始處。關閉的摺疊也被計入。
zk 向上移動到前一摺疊的結束處。關閉的摺疊也被計入。
當使用marker方式時,需要用標計來標識代碼的摺疊,系統預設是{{{和}}},最好不要改動之:)
我們可以使用下面的命令來建立和刪除摺疊:
zf 建立摺疊,比如在marker方式下:
zf56G,建立從當前行起到56行的程式碼摺疊功能;
10zf或10zf+或zf10↓,建立從當前行起到後10行的程式碼摺疊功能。
10zf-或zf10↑,建立從當前行起到之前10行的程式碼摺疊功能。
在括弧處zf%,建立從當前行起到對應的匹配的括弧上去((),{},[],<>等)。
zd 刪除 (delete) 在游標下的摺疊。僅當 'foldmethod' 設為 "manual" 或 "marker" 時有效。
zD 迴圈刪除 (Delete) 游標下的摺疊,即嵌套刪除摺疊。
僅當 'foldmethod' 設為 "manual" 或 "marker" 時有效。
zE 除去 (Eliminate) 視窗裡“所有”的摺疊。
僅當 'foldmethod' 設為 "manual" 或 "marker" 時有效。
關於vim的程式碼摺疊功能,小弟也是初學,僅做參考。
* zo 將當前摺疊開啟
* zc 摺疊游標所在處
* zr 開啟所有摺疊層次(依層次開啟)
* zm 摺疊所有層次(依層次摺疊)
* zR 開啟所有摺疊 zn
* zM 摺疊所有 zN
* zi 切換摺疊與不摺疊指令
緩衝區
* vim file1 file2 多個檔案調入緩衝
* :e filename 在vim中再開啟檔案
* :ls 列出所有的緩衝區
* :n 編輯下一個檔案
* :bp 跳轉到上一個緩衝區
* :bn 跳轉到下一個緩衝區
* :bN 跳轉到指定編號的緩衝區:b3
* :bd1 刪除編號為1的緩衝區
標籤
* :tabnew 開啟新標籤頁.
* :tabe <file> 在新標籤頁開啟檔案.
* <ctrl> + PageUp, PageDown 切換標籤頁.
* :tabnext, tabprev 切換標籤頁,Putty 下只能用這個.
檔案開啟儲存
* :e <file> 開啟檔案.
* :enew 新檔案.
* :w 儲存.
* :wa 全部儲存.
* :w <file> 另存新檔.
* :wq 儲存並退出.
* :q 退出.
* :qa 全部退出.
* :q! 強制退出.
* ZZ 退出vim並儲存文檔
快捷插入
* esc 切換命令模式 (距離太遙遠了,用 Ctrl+C 代替吧).
* i 插入模式.
* I 在當前行開頭插入.
* R 替換模式.
* a 在游標後插入.
* A 在當前行尾部插入.
* o 將在游標所在行下面加入一行,並進入編輯模式。
* O 將在游標上面加入一行,注意是大寫。
* v Visual 模式按字元選擇.
* V Visual 模式按行選擇.
游標移動
- h 左移游標.
- j 下移游標.
- k 上移游標.
- l 右移游標.
- gg 將游標移到檔案頭部.
- G 將游標移到檔案尾部.
- #G 移動游標到指定行#. 例如: 5G
- % 跳轉到配對的括弧去
- [[ 跳轉到代碼塊的開頭去(但要求代碼塊中’{‘必須單獨佔一行)
- gD 跳轉到局部變數的定義處
- ” 跳轉到游標上次停靠的地方, 是兩個’, 而不是一個”
- mx 設定書籤,x只能是a-z的26個字母
- `x 跳轉到書籤處(“`”是1左邊的鍵)
- fx:移動游標到當前行的下一個 x 處。很明顯,x 可以是任意一個字母,而且你可以使用 ; 來重複你的上一個 f 命令。
- tx:和上面的命令類似,但是是移動到 x 的左邊一個位置。(這真的很有用)
- Fx:和 fx 類似,不過是往回找。
- w : 向後詞移動 (前面加數字移動多少個詞)
- b : 向前詞移動 (前面加數字移動多少個詞)
- e : 向後移到詞末
- ge : 向前移到詞末
- 0:移動游標到當前行首。
- ^:移動游標到當前行的第一個字母位置。
- $:移動游標到行尾。
- ):移動游標到下一個句子。
- ( :移動游標到上一個句子
- tx : 向右尋找本行的x並移到那兒(大寫時向左)
- 33G : 移到檔案的第33行
- gg : 檔案首行
- G : 檔案尾行
- 33% : 檔案的33%處
- H/M/L : 螢幕的首/中/尾行
- zt/zz/zb : 當前行移到螢幕的首/中/底部
複製粘貼刪除
- yy 拷貝當前行到剪貼簿.
- nyy 複製從當前行開始的n行
- y^ 從檔案頭開始拷貝.
- y$ 拷貝到檔案尾部.
- :#,&y 拷貝 # 到 & 行. 例如: 4,5y
- p 在游標後粘貼.
- P 粘貼到游標前.
- dd 刪除當前行.
- d^ 刪除到行首.
- d$ 刪除到行尾.
- :#,&d 刪除 # 到 & 行. 例如: 3,5d
- D 當前游標開始刪除到行尾
- ndd 從當前行開始向後刪除n行
- d1G 刪除第1行到當前行的資料
- dnG 刪除第n行到當前行的資料
- dG 刪除當前行到最後一行的資料
- x 向後刪除1個字元
- nx 向後刪除n個字元
- X 向前刪除1個字元
縮排
>> 增大縮排.
<< 減少縮排.
== 自動縮排.
尋找替換
- /# 尋找 #. 例如: /printf
- ?# 反向尋找 #.
- n 尋找下一個.
- N 反向尋找下一個.
- :s/old/new/g 當前行無提示替換.
- :%s/old/new/g 無提示替換.
- :%s/old/new/gc 確認替換.
- :#,&s/old/new/g 從 # 到 & 行無提示替換.
- * 尋找游標所在單詞
書籤跳轉
* :marks 查看所有書籤, 輸入 “:<num>” 可跳轉.
* m<name> 定義書籤, 如 ma 在當前行定義名為 a 的書籤.
* `<name> 跳轉到某書籤, “`” 為鍵盤 Tab 上一行第一鍵.
* :jumps 查看所有跳轉記錄, 輸入 “:<num>” 可跳轉.
* <ctrl> + o 返回上一次跳轉處.
* <ctrl> + i 和 <ctrl> + o 反向轉處.
Ctags
* :! ctags -R . 產生 ctags 檔案.
* <ctrl> + ] 查看函數定義.
* <ctrl> + T 返回.
* shift + k 查看函數 man 協助資訊.
cmd
* ! <command> 執行命令.
* :r <file> 插入檔案內容.
* :r !<command> 插入命令輸出結果.
* :cd <path> 修改預設工作目錄.
自動補全
Ctrl+X Ctrl+L整行補全
Ctrl+X Ctrl+N 根據當前檔案裡關鍵字補全
Ctrl+X Ctrl+K 根據字典補全
Ctrl+X Ctrl+T 根據同義字字典補全
Ctrl+X Ctrl+I 根據標頭檔內關鍵字補全
Ctrl+X Ctrl+] 根據標籤補全
Ctrl+X Ctrl+F 補全檔案名稱
Ctrl+X Ctrl+D 補全宏定義
Ctrl+X Ctrl+V 補全vim命令
Ctrl+X Ctrl+U 使用者自訂補全方式
Ctrl+X Ctrl+S 拼字建議
分屏
分屏啟動Vim 注釋: n是數字,表示分成幾個屏。
vim -On file1 file2 … 使用大寫的O參數來垂直分屏。
vim -on file1 file2 … 使用小寫o參數來水平分屏。
Ctrl+W c 關閉分屏 關閉當前視窗。
Ctrl+W q 關閉當前視窗,如果只剩最後一個了,則退出Vim
分屏
Ctrl+W s 上下分割當前開啟的檔案。
:sp filename 上下分割,並開啟一個新的檔案。
Ctrl+W v 左右分割當前開啟的檔案。
:vsp filename 左右分割,並開啟一個新的檔案。
移動游標 Vi中的游標鍵是h, j, k, l,要在各個屏間切換,只需要先按一下Ctrl+W
Ctrl+W l 把游標移到右邊的屏。
Ctrl+W h 把游標移到左邊的屏中。
Ctrl+W k 把游標移到上邊的屏中。
Ctrl+W j 把游標移到下邊的屏中。
Ctrl+W w 把游標移到下一個的屏中。.
移動分屏 這個功能還是使用了Vim的游標鍵,只不過都是大寫。當然了,如果你的分屏很亂很複雜的話,這個功能可能會出現一些非常奇怪的癥狀。
Ctrl+W L 向右移動。
Ctrl+W H 向左移動
Ctrl+W K 向上移動
Ctrl+W J 向下移動
螢幕尺寸 下面是改變尺寸的一些操作,主要是高度,對於寬度你可以使用Ctrl+W <或是>,但這可能需要最新的版本才支援。
Ctrl+W = 讓所有的屏都有一樣的高度。
Ctrl+W + 增加高度。
Ctrl+W - 減少高度。
ctrl+w > 向右擴充
ctrl+w < 向左擴充
diff 模式
參考
比較 A , B 檔案, vim – d A B 或者這樣
或先開啟檔案 A,然後 :vsp(全名vsplit) 開啟 B,然後輸入命令 :diffthis
或 vimdiff FILE_LEFT FILE_RIGHT
]c 跳轉到下一差異點
[c 反向跳轉
上下文摺疊 參考
預設情況下,vimdiff會將檔案中不同之處上下6行之外的相同文本摺疊隱藏,可通過 :set diffopt=context:3 修改顯示的上下文行數。
zo 開啟摺疊
zc 關閉摺疊
檔案合并
dp 將當前視窗游標位置處的內容複寫到另一視窗
do 將另一視窗游標位置處的內容複寫到當前視窗
diffupdate 重新比較兩個檔案,如果手動修改檔案的話有時不會自動同步
其他
gg=G 源碼格式化
:e! 強行重新編輯
shift insert 從系統拷貝到vim
u 撤銷上一步操作.
U 撤銷最後編輯的行上的操作
* . 重做.