vim使用手冊
[toc]
一. vim簡介
Vim是從vi發展出來的一個文本編輯器。代碼補完、編譯及錯誤跳轉等方便編程的功能特別豐富,在程序員中被廣泛使用。和Emacs並列成爲類Unix系統用戶最喜歡的編輯器。
Vim的第一個版本由布萊姆·米勒在1991年發佈。最初的簡稱是Vi IMitation,隨着功能的不斷增加,正式名稱改成了Vi IMproved。現在是在開放源代碼方式下發行的自由軟件。
布萊姆·米勒在80年代末購入他的Amiga計算機時,Amiga上還沒有他最常用的編輯器vi。Bram從一個開源的vi複製Stevie開始,開發了Vim的1.0版本。最初的目標只是完全複製vi的功能,那個時候的Vim是Vi IMitation(模擬)的簡稱。1991年Vim 1.14版被"Fred Fish Disk #591"這個Amiga用的免費軟體集所收錄了。1992年1.22版本的Vim被移植到了UNIX和MS-DOS上。從那個時候開始,Vim的全名就變成Vi IMproved(改良)了。
在這之後,Vim加入了不計其數的新功能。做爲第一個里程碑的是1994年的3.0版本加入了多視窗編輯模式(分區視窗)。從那之後,同一螢幕可以顯示的Vim編輯文件數可以不止一個了。1996年發佈的Vim 4.0是第一個利用GUI(圖形用戶界面)的版本。1998年5.0版本的Vim加入了highlight(語法高亮)功能。2001年的Vim 6.0版本加入了代碼摺疊、插件、多國語言支持、垂直分區視窗等功能。2006 年5月發佈的Vim 7.0版更加入了拼字檢查、上下文相關補全,標籤頁編輯等新功能。2008年8月發佈的Vim 7.2,合併了Vim 7.1以來的所有修正補丁,並且加入了腳本的浮點數支持。現在最新的版本是2013年8月發佈的Vim 7.4,這個版本除了包含最新修正的補丁之外,還加入了“永久撤銷”、“Blowfish算法加密”、“文本隱藏”和“Lua以及Python3的接口”等新功能。
二. vim的使用方法
1. 打開文件
vim是以vim命令後加文件名的方式來打開文件的,但vim功能強大,在打開文件時還可以加入參數實現更多的功能。用法:vim [OPTION]... FILE...
vim命令的選項及作用:
選項 |
含義 |
+ |
打開文件後光標默認在尾行行首。 |
+# |
打開文件後光標處於第#行的行首。 |
+/PATTERN |
打開文件後,直接讓光標處於第一個被PATTERN匹配到的行的行首 |
-b file |
以二進制方式打開文件 |
-d file1 file2… |
比較多個文件 |
-m file |
以只讀方式打開文件,打開後對文件的修改無法保存。 |
ex file或vim –e |
直接進入擴展命令模式 |
補充:
- 如果該文件存在,文件被打開並顯示內容
- 如果該文件不存在,當編輯後第一次存盤時創建它
- 如果目錄不存在,將無法保存編輯內容
2. vim的三種模式
vim是一款模式編輯器,對vim的操作進行在vim的三種模式之上。所謂三種模式分別是:1.命令(Normal)模式 ,默認模式,主要作用是移動光標,剪切/粘貼文本。2.插入(Insert)或編輯模式 ,主要作用是修改文本。3.擴展命令(extended command )模式 ,主要作用是保存,退出等。所以想要嫺熟操作vim,在三種模式之間的切換是必不可少的。vim的模式切換是以命令模式爲基礎的,也就是打開文件時的第一個界面,vim打開文件默認是在命令模式界面。所以無論你是要進入擴展模式還是插入模式,都需要在命令模式進行切換,擴展模式和插入模式之間是不能直接切換的。
vim三種主要模式之間的切換:
按鍵 |
作用 |
Esc鍵 |
退出當前模式 |
2Esc鍵 |
總是返回到命令模式 |
ESC |
插入模式轉到命令模式 |
: |
命令模式轉到擴展命令模式 |
2ESC,enter |
擴展命令模式轉到命令模式 |
3.命令模式
1.命令模式進入插入模式
按鍵 |
作用 |
i |
insert, 在光標所在處輸入 |
I |
在當前光標所在行的行首輸入 |
a |
append, 在光標所在處後面輸入 |
A |
在當前光標所在行的行尾輸入 |
o |
在當前光標所在行的下方打開一個新行 |
O |
在當前光標所在行的上方打開一個新行 |
2.命令模式光標間跳轉
2.1字符間跳轉:
按鍵 |
作用 |
h |
左 |
l |
右 |
j |
下 |
k |
上 |
#command |
跳轉由#指定的個數的字符 |
2.2單詞間跳轉:
按鍵 |
作用 |
w |
下一個單詞的詞首 |
e |
當前或下一單詞的詞尾 |
b |
當前或前一個單詞的詞首 |
#COMMAND |
由#指定一次跳轉的單詞數 |
2.3當前頁跳轉:
2.4行首行尾跳轉:
按鍵 |
作用 |
^ |
跳轉至行首的第一個非空白字符 |
0 |
跳轉至行首 |
$ |
跳轉至行尾 |
2.5行間移動:
按鍵 |
作用 |
#G |
跳轉至由#指定行 |
G |
最後一行 |
1G,gg |
第一行 |
2.6句間移動
2.7 段落間移動:
3.命令模式翻屏操作
按鍵 |
作用 |
Ctrl+f |
向文件尾部翻一屏 |
Ctrl+b |
向文件首部翻一屏 |
Ctrl+d |
向文件尾部翻半屏 |
Ctrl+u |
向文件首部翻半屏 |
4.命令模式編輯操作
4.1字符編輯:
按鍵 |
作用 |
x |
刪除光標處的字符 |
#x |
刪除光標處起始的#個字符 |
xp |
交換光標所在處的字符及其後面字符的位置 |
~ |
轉換大小寫 |
J |
刪除當前行後的換行符 |
gU |
變大寫 |
gu |
變小寫 |
100 i sun [ESC] |
粘貼“sun”100次 |
4.2替換命令(r, replace)
按鍵 |
作用 |
r |
替換光標所在處的字符 |
R |
切換成REPLACE模式,可進行選擇替換 |
4.3刪除命令(d,delete)
按鍵 |
作用 |
d |
刪除命令,可結合光標跳轉字符,實現範圍刪除 |
d$ |
刪除到行尾 |
d^ |
刪除到非空行首 |
d0 |
刪除到行首 |
dw |
刪除到下一個單詞的詞首 |
de |
刪除到當前或下一單詞的詞尾 |
db |
刪除到當前或前一個單詞的詞首 |
#COMMAND |
刪除到由#指定一次跳轉的單詞數 |
dd |
刪除光標所在的行 |
#dd |
刪除光標所在處由#指定的多行 |
D |
從當前光標位置一直刪除到行尾,留空行,等同於d$ |
4.4複製命令(y, yank):
按鍵 |
作用 |
y |
複製,行爲相似於d命令 |
y$ |
複製到行尾 |
y0 |
複製到行首 |
y^ |
複製到非空行首 |
ye |
複製到當前或下一單詞的詞尾 |
yw |
複製到下一個單詞的詞首 |
yb |
複製到當前或前一個單詞的詞首 |
#COMMAND |
複製到由#指定一次跳轉的單詞數 |
yy |
複製整行 |
#yy |
複製光標所在處由#指定的多行 |
Y |
從當前光標位置一直複製到行尾,留空行,等同於d$ |
4.5粘貼命令(p, paste):
按鍵 |
作用 |
p |
緩衝區存的如果爲整行,則粘貼當前光標所在行的下方;否則,則粘貼至當前光標所在處的後面 |
P |
緩衝區存的如果爲整行,則粘貼當前光標所在行的上方;否則,則粘貼至當前光標所在處的前面 |
4.6改變命令(c, change)
按鍵 |
作用 |
c |
修改後切換成插入模式 |
c$ |
刪除到行尾,並切換成插入模式 |
c^ |
刪除到非空行首,並切換成插入模式 |
c0 |
刪除到行首,並切換成插入模式 |
cb |
刪除到當前或前一個單詞的詞首,並切換成插入模式 |
ce |
刪除到當前或下一單詞的詞尾,並切換成插入模式 |
cw |
刪除到下一個單詞的詞首,並切換成插入模式 |
#COMMAND |
刪除到由#指定一次跳轉的單詞數,並切換成插入模式 |
cc |
刪除當前行,並切換成插入模式 |
#cc |
刪除#指定的多行,並切換成插入模式 |
C |
刪除當前光標到行尾,並切換成插入模式 |
4.7撤銷更改
按鍵 |
作用 |
u |
撤銷最近的更改 |
#u |
撤銷之前多次更改 |
U |
撤消光標落在這行後所有此行的更改 |
Ctrl-r |
重做最後的“撤消”更改 |
. |
重複前一個操作 |
n. |
重複前一個操作n次 |
4. 擴展命令模式
4.1擴展命令模式下的簡單命令用法:
在命令模式下按“:”進入擴展命令模式,進入後,編輯器的底部左下角會出現一個命令提示符,在這個命令提示符後面輸入命令,可以進行擴展命令模式下的操作。
命令 |
作用 |
w |
寫(存)磁盤文件 |
wq |
寫入並退出 |
x |
寫入並退出 |
q |
退出 |
q! |
不存盤退出,即使更改都將丟失 |
r filename |
讀文件內容到當前文件中 |
w filename |
將當前文件內容寫入另一個文件 |
!command |
執行命令 |
r!command |
讀入命令的輸出 |
4.2擴展命令模式:地址定界
在擴展命令模式下進行地址定界方法一:利用行數進行定界
格式|:開始#,結束#
用法 |
含義 |
# |
具體第#行,例如2表示第2行 |
#,# |
從左側#表示起始行,到右側#表示結尾行 |
#,+# |
從左側#表示的起始行,加上右側#表示的行數 |
2,+3 |
表示2到5行 |
. |
表示當前行 |
$ |
表示最後一行 |
. 或$-1 |
當前行到倒數第二行 |
% |
全文, 相當於1,$ |
在擴展命令模式下進行地址定界方法二:利用正則進行定界,從第一次被pat1模式匹配到的行開始,一直到第一次被pat2匹配到的行結束。
格式| :/正則1/,/正則2/
#,/pat/ -------->從第#行開始,一直到第一次被pat匹配到的行結束。
/pat/,$ --------->從第一次被pat模式匹配到的行開始,到行尾結束。
使用方式:後跟一個編輯命令
用法 |
含義 |
d |
刪除匹配到的內容 |
y |
複製匹配到的內容 |
w file |
將範圍內的行另存至指定文件中 |
r file |
在指定位置插入指定文件中的所有內容 |
4.3擴展命令模式:查找
查找命令:
按鍵 |
作用 |
/PATTERN |
從當前光標所在處向文件尾部查找 |
?PATTERN |
從當前光標所在處向文件首部查找 |
n |
與命令同方向 |
N |
與命令反方向 |
4.4擴展命令模式:查找並替換
擴展命令模式下,在命令提示符後面輸入字母“s”,然後按格式輸入要查找和替換的內容,便可進行查找替換。
格式:s/要查找的內容/替換爲的內容/修飾符
格式項 |
作用 |
要查找的內容 |
分割符後輸入要查找的內容,可使用模式,也就是正則表達式。 |
替換爲的內容 |
不能使用模式,但可以使用\1, \2, ...等後向引用符號;還可以使用“&”引用前面查找時查找到的整個內容 |
修飾符: |
i |
忽略大小寫 |
g |
全局替換;默認情況下,每一行只替換第一次出現 |
gc |
全局替換,每次替換前詢問 |
如果查找和替換的內容中包含路徑,再使用"/"作爲分割符就不方便了,這時可以使用@、#等特殊符號來做分割符。
例如:
s@/etc@/var@g
s#/boot#/#i
5.vim的寄存器
6.編輯二進制文件
以二進制方式打開文件,例如:vim –b binaryfile
擴展命令模式下,利用xxd命令轉換爲可讀的十六進制
:%!xxd
擴展命令模式下,利用xxd命令轉換回二進制,進行二進制文件的編輯。
:%!xxd –r
7.可視化模式
在可視化模式下允許移動光標選擇文本塊,選中的文字可被刪除,複製,變更,過濾,搜索,替換等 。
按鍵 |
作用 |
v |
命令模式下,進入面向字符的可視化模式 |
V |
命令模式下,進入面向行的可視化模式 |
ctrl-v |
命令模式下,進入面向塊的可視化模式 |
w |
選擇一個單詞 |
) |
選擇一句 |
} |
選擇一段 |
箭頭 |
字符間移動 |
8.多文件模式
多文件模式可以同時打開多個文件,
用法:vim FILE1 FILE2 FILE3 ...
命令 |
作用 |
:next |
下一個 |
:prev |
前一個 |
:first |
第一個 |
:last |
最後一個 |
:wall |
保存所有 |
:qall |
退出所有 |
:wqall |
保存退出所有 |
9.使用多個“窗口”
多窗口模式可以同時打開多個窗口進行編輯,
用法:vim -o|-O FILE1 FILE2 ...
-o: 水平分割
-O: 垂直分割
在窗口間切換:Ctrl+w
單文件窗口分割方法:
按鍵 |
作用 |
Ctrl+w,s或 :split, |
水平分割 |
Ctrl+w,v或:vertical, |
垂直分割 |
ctrl+w,q |
取消相鄰窗口 |
ctrl+w,o |
取消全部窗口 |
:wqall |
退出 |
10.關閉文件
10.1擴展模式退出編輯器:
選項 |
含義 |
:q |
退出 |
:q! |
強制退出,丟棄做出的修改 |
:wq |
保存退出 |
:x |
保存退出 |
10.2命令模式下退出編輯器:
三. 定製vim的工作特性
定義vim的工作特性可以爲使用帶來許多便利,增加使用樂趣。定製vim的工作特性有兩種方法,一種是將設置寫入配置文件,這樣可以永久有效。另一種方法是在vim的擴展模式下直接設置,只對當前vim進程有效。
擴展模式:當前vim進程有效
配置文件:永久有效
全局:/etc/vimrc ----->將配置寫入此文件將對所有用戶有效。
個人:~/.vimrc ------->將配置寫入此文件只對個人有效。
常用工作特性設置參數:
特性 |
參數 |
行號顯示 |
set number, 簡寫爲set nu |
行號取消顯示 |
set nonumber, 簡寫爲set nonu |
括號成對匹配 |
set showmatch, 簡寫爲set sm |
括號取消成對匹配 |
set nosm |
自動縮進啓用 |
set ai |
自動縮進禁用 |
set noai |
高亮搜索啓用 |
set hlsearch |
高亮搜索禁用 |
set nohlsearch |
語法高亮啓用 |
syntax on |
語法高亮禁用 |
syntax off |
忽略字符的大小寫啓用 |
set ic |
忽略字符的大小寫不忽略 |
set noic |
文件格式啓用windows格式 |
set fileformat=dos |
文件格式啓用unix格式 |
set fileformat=unix |
設置文本寬度 |
set textwidth=65 (vimonly) |
設置文本寬度 |
set wrapmargin=15 |
四. vi/vim內置幫助
vimtutor 命令是以vim編輯器打開vim幫助文檔,在裏面可以邊看幫助文檔邊練習操作,非常便捷,是學習vim的必備工具。而且在裏面做的修改不會保存。
在擴展命令模式下輸入以下命令可以查看vim內置幫助:
- help
- helptopic
- help option-list
- setor:set all