V1. 默認字符編碼為utf8,打開使用gb2312編碼的文件,中文全為亂碼,如何恢復正常顯示?
輸入 edit ++enc=cp936
V2. 如何在vim系統中執行命令?
輸入 !cmd
V3. 使用vim直接打開並編輯.*gz文件,而無須解壓,讀取,編輯,再壓縮.
壓縮文件的支持是通過plugin
vim ls-lrR.txt.gz
V4. 如何Vim支持語法加亮?
一勞永逸的方法,在~/.vimrc中增加如下語句
syntax on
臨時性的方法, 輸入命令:syntax on
V5. Vim如何在結構文檔中快速切換,比如 C語言{ }塊之間切換.
輸入在{}之間,輸入%即可
V6. 如何讓Vim記下我的編輯狀態,以便下次快速恢復工作?
輸入 :mksession file_name_your_session
V7. 如何讓Vim告訴你編輯文件的字節數,字數,當前位置信息?
輸入 g CTRL_G
V8. 輸入help,打開了幫助窗口,如何快速關閉?
輸入CTRL-W ,然後再輸入CTRL-Q,
或者輸入CTRL-W q
V9. 我要每天編輯日志,我不想去輸入日期與時間,該怎麼辦?
現要如這樣的日期形式Mon Sep 19 23:19:03 CST 2005,簡單,定義
一個快捷鍵F2,在vim中做這樣一個映射
:map gg:read !date
V10. 如何使用Vim改變文本文件的編碼?
比如,原有1個文檔為utf-8編碼的,現在要將它改為cp936編碼,可用如下指令
:set fileencoding=cp936
然後再保存文件:w
V11. 如何將vim記住我的配置選項(比如默認的編碼方式,文件類型等)?
請將你的配置命令寫到~/.vimrc配置腳本文件中
V12. 如何查看當前編輯的C/C++源文件所有include文件路徑?
輸入:checkpath
V13. 如何保存全局的配置選現(對所有用戶都可用)?
先輸入:version, 查看系統vimrc配置文件的值
再編輯系統vimrc配置文件,加入你想要vim執行的命令
V14. 如何快速復制Buffer中的一行文字?
輸入yy先記錄到緩沖區, 移動光標到想要粘貼處,按p
V15. 如何利用宏命令,生成數字順序列表?
1. Create the first list entry, make sure it starts with a number.
2. qa - start recording into buffer ‘a’
3. Y - yank the entry
4. p - put a copy of the entry below the first one
5. CTRL-A - increment the number
6. q - stop recording
7. @a - repeat the yank, put and increment times
V16. 如何實現文本的折疊(Fold)?
自動Fold,假設你的文件是C源文件,輸入
:set foldmethod=indent
:set foldenable
手動Fold,選中你要折的行,在Normal模式下
輸入命令 zf
當Fold創建後,移動光標到Fold所在行
輸入 zo, 打開相應的Fold
zc, 關閉相應的Fold
zM, 關閉文件中所有的Fold
zR, 打開文件中所有的Fold
za, 自動打開或關閉相應的Fold
V17. 如何查看當前文件中的字,字符個數?
輸入g CTRL-G 即可,所有字節數按UTF-8的形式進行計數.
V18. 如何在Visual模式下快速搜索當前選中的文字?
為了不改變用戶使用習慣,我們依然沿用*和#這兩鍵
vnoremap * y/“
vnoremap # y?“
注: 指令插入命名寄存器的內容
V19. 如何在源代碼中不同塊/段落間來回跳躍?
輸入 { , 前進至上一段落
輸入 } , 前進至後一段落
V20. 如何文本中的TAB轉化為固定長度的空格?
輸入 :set expandtab
輸入 :set tabstop=4
輸入 :retab
V21. vim中paste剪貼板中的數據如何讓它不縮進,保持原格式?
paste時,輸入的文本大多會包含換行字符,還有一些特殊字符,vim會自動對文本縮進,並
且自動換行等,為了避免這些智能選項的影響,可以把paste開關打開
V22. 有趣的幾個功能
gg 到文件首
gd 到變量聲明
gg=G 全篇自動縮進 , =G 單行縮進
K(shift+k) man
crl+] 函數原型處 crl+t 回 ( ctags )
ctl+p 自動補全( 編輯狀態 )
:X 加密保存( 要輸入密碼 )
使用說明:
以下的例子中 xxx 表示在命令模式下輸入 xxx 並回車
以下的例子中 :xxx 表示在擴展模式下輸入 xxx 並回車
小括號中的命令表示相關命令.
在編輯模式或可視模式下輸入的命令會另外注明.
1. 查找
/xxx(?xxx) 表示在整篇文檔中搜索匹配xxx的字符串, / 表示向下查找, ? 表示向上查找.其中xxx可以是正規表達式,關於正規式就不多說了.
一般來說是區分大小寫的, 要想不區分大小寫, 那得先輸入
:set ignorecase
查找到以後, 再輸入 n 查找下一個匹配處, 輸入 N 反方向查找.
*(#) 當光標停留在某個單詞上時, 輸入這條命令表示查找與該單詞匹配的
下(上)一個單詞. 同樣, 再輸入 n 查找下一個匹配處, 輸入 N 反方
向查找.
g*(g#) 此命令與上條命令相似, 只不過它不完全匹配光標所在處的單詞, 而
是匹配包含該單詞的所有字符串.
gd 本命令查找與光標所在單詞相匹配的單詞, 並將光標停留在文檔的非
注釋段中第一次出現這個單詞的地方.
% 本命令查找與光標所在處相匹配的反括號, 包括 () [] {}
f(F)x 本命令表示在光標所在行進行查找, 查找光標右(左)方第一個x字符.
找到後:
輸入 ; 表示繼續往下找
輸入 , 表示反方向查找
2. 快速移動光標
在 vi 中, 移動光標和編輯是兩件事, 正因為區分開來, 所以可以很方便的進行光標定
位和編輯. 因此能更快一點移動光標是很有用的.
w(e) 移動光標到下一個單詞.
b 移動光標到上一個單詞.
0 移動光標到本行最開頭.
^ 移動光標到本行最開頭的字符處.
$ 移動光標到本行結尾處.
H 移動光標到屏幕的首行.
M 移動光標到屏幕的中間一行.
L 移動光標到屏幕的尾行.
gg 移動光標到文檔首行.
G 移動光標到文檔尾行.
c-f (即 ctrl 鍵與 f 鍵一同按下) 本命令即 page down.
c-b (即 ctrl 鍵與 b 鍵一同按下, 後同) 本命令即 page up.
” 此命令相當有用, 它移動光標到上一個標記處, 比如用 gd, * 等查
找到某個單詞後, 再輸入此命令則回到上次停留的位置.
‘. 此命令相當好使, 它移動光標到上一次的修改行.
`. 此命令相當強大, 它移動光標到上一次的修改點.
3. 拷貝, 刪除與粘貼
在 vi 中 y 表示拷貝, d 表示刪除, p 表示粘貼. 其中拷貝與刪除是與光標移動命令
結合的, 看幾個例子就能夠明白了.
yw 表示拷貝從當前光標到光標所在單詞結尾的內容.
dw 表示刪除從當前光標到光標所在單詞結尾的內容.
y0 表示拷貝從當前光標到光標所在行首的內容.
d0 表示刪除從當前光標到光標所在行首的內容.
y$ 表示拷貝從當前光標到光標所在行尾的內容.
d$ 表示刪除從當前光標到光標所在行尾的內容.
yfa 表示拷貝從當前光標到光標後面的第一個a字符之間的內容.
dfa 表示刪除從當前光標到光標後面的第一個a字符之間的內容.
特殊地:
yy 表示拷貝光標所在行.
dd 表示刪除光標所在行.
D 表示刪除從當前光標到光標所在行尾的內容.
關於拷貝, 刪除和粘貼的復雜用法與寄存器有關, 可以自行查詢.
4. 數字與命令
在 vi 中數字與命令結合往往表示重復進行此命令, 若在擴展模式的開頭出現則表示行
號定位. 如:
5fx 表示查找光標後第 5 個 x 字符.
5w(e) 移動光標到下五個單詞.
5yy 表示拷貝光標以下 5 行.
5dd 表示刪除光標以下 5 行.
y2fa 表示拷貝從當前光標到光標後面的第二個a字符之間的內容.
:12,24y 表示拷貝第12行到第24行之間的內容.
:12,y 表示拷貝第12行到光標所在行之間的內容.
:,24y 表示拷貝光標所在行到第24行之間的內容. 刪除類似.
5. 快速輸入字符
在 vi 中, 不要求你輸入每一個字符, 可以有很多種方法快速輸入一些字符.
使用 linux/unix 的同學一定有一個經驗, 在命令行下輸入命令時敲入頭幾個字符再按
TAB 系統就會自動將剩下的字符補齊, 假如有多個匹配則會打印出來. 這就是著名的命令
補齊(其實windows中也有文件名補齊功能). vi 中有許多的字符串補齊命令, 非常方便.
c-p(c-n) 在編輯模式中, 輸入幾個字符後再輸入此命令則 vi 開始向上(下)搜
索開頭與其匹配的單詞並補齊, 不斷輸入此命令則循環查找. 此命令
會在所有在這個 vim 程序中打開的文件中進行匹配.
c-