1 引言
VIM是unxi或類unix操作系統必備的一款文本編輯器(當然目前也有windows版本GVim),其基本功能還是用來瀏覽編輯文本文件的。本文也是闡述文件的編輯保存功能,其他的一些高級功能請另行查閱相關文檔。
編輯文件前確定鍵盤大寫鎖定未開啓。先看一個實例:
打開文件test.txt,並將第一行刪除:
vim test.txt --> gg --> dd --> shift + : --> wq
vim test.txt : VIM打開文件test.txt,如果文件不存在就是新建
gg : 跳轉到第一行
dd : 刪除當前光標所在行
shift + : : 同時按下鍵盤shift鍵和:(L旁邊的冒號分號鍵),進入命令模式
wq : 在上一步執行後的光標出,輸入wq,保存文件並退出
關於保存文件的一點說明:
w : 英文write的縮寫,即寫入更新文件,也叫保存文件
q : 英文quit的縮寫,退出當前文件編輯
w filename : 保存到文件filename中
q! : 放棄更改,強制退出
VIM的熟練使用,可以解放鼠標及光標,雙手一直在鍵盤字母輸入區域,可以大大提高輸入效率。另外由於VIM的操作涉及各個字符按鍵,多用VIM也可以提高對鍵盤操作熟練度。
2 操作模式
VIM的靈魂在於它的操作模式,不同模式間切換,能夠極大的豐富按鍵功能。VIM的操作模式有正常模式、插入模式、命令模式,以上三種是最基本必用的,還有一種可視模式,主要用於塊操作,可用要不用,但對程序員來說其列編輯模式還是十分有用的。
正常模式(normal-mode)
在其他模式下,按下Esc按鍵(一次不行多按幾次)就能回到正常模式。
正常模式,各種按鍵就相當於是一個功能鍵,代表的是某個功能。
正常模式也是最主要的一種模式,也是用的最多的,通常切換到其他模式下,都要先切換到正常模式,即其他模式間是不支持相互切換的。
插入模式(insert-mode)
插入模式,就是普通文本輸入模式。
從正常模式進入到插入模式有多種方式,以下列舉出一些常用的:
i : 在光標前插入
I : 在行首插入
a : 在光標後插入
A : 在行尾新增輸入(**大寫字母,未開啓大寫鎖定,可以shift+字母,**)
o : 在光標下方新增一行,進行輸入
O : 在光標上方新增一行,進行輸入
s : 刪除光標所在字符,後進行插入
S : 刪除光標所在行,後進行輸入
命令模式(command-mode)
命令模式下,可以執行各種命令,如w保存文件命令,還有諸如查找、替換、配置VIM選項等命令。
正常模式下,輸入:(shift+冒號分號鍵)可進入到命令模式,在屏幕出現:命令行,可輸入功能命令。
可視模式(visual-mode)
可視模式,主要是用來高亮選中一大段塊內容,正常模式只能移動光標,但不能選中一段內容。選中一段數據後,可以用於複製、保存、刪除等操作(此處的保存相當於實現部分保存功能,選中某部分內容,另存爲文件)。
可視模式有三種常見的模式,在可視模式下,即可相互切換:
v : 普通可視,移動光標可以選中一段數據
V : 可視行,移動光標*以行爲單位*選中一段數據
ctrl + v : 可視列,移動光標*以列爲單位*選中一段數據,可進行可視列編輯
3 基本操作
文件的打開,保存在引言部分已有說明,在此不再複述。
本章節操作無特別說明都是在正常模式下使用,其他模式下會特意說明。
光標移動
基本移動
h j k l 分別相當於光標 ←↓↑→,hjkl用於移動光標用得是最基本也是最多的。其他的光標移動
按鍵 功能說明 備註 0 行首 按下按鍵0,光標會移動到所在行的行首 $ 行尾 b 單詞起始 b是begin首字母 e 單詞結尾 e是end首字母 w 下一個單詞 w是word首字母 + 下一行行頭 行頭錶行第一個非空字符 - 上一行行頭
光標移動的操作是其他一切操作的基礎。
輸入內容
切換到插入模式,即可輸入文本內容,見第2節操作模式部分。
剪切、更改、複製、粘貼
剪切
按鍵 功能說明 備註 x 剪切字符 將光標所在字符剪切 dd 剪切整行 D 剪切到行尾 dw 從光標處剪切到下個單詞起始位置 d是一個組合功能按鍵,單獨按沒有意義 db 從光標處剪切到所在單詞起始位置 de 從光標處剪切到所在單詞結束位置 d0 剪切到行首 行頭錶行第一個非空字符 d$ 剪切到行尾 與D效果一致,比D要多按個鍵 d… d還可以接其他的光標移動操作按鍵,此處不再一一列舉
關於剪切組合功能d, d是delete的首字母,其與光標移動的操作配合,能實現靈活的剪切操作功能,所有的光標移動操作都能與d組合使用。另外還可配合重複操作(下文有介紹),可快速實現多項的剪切,如5dd,表示刪除5行。剪切的數據存在於vim的緩衝區。更改
按鍵 功能說明 備註 cc 更改整行 先剪切整行,進入插入模式,進行輸入 C 更改至行尾 先剪切至行尾,進入插入模式,進行輸入 cw 更改到下個單詞起始位置 c是一個組合功能按鍵,與d用法相似 c… c還可以接其他的光標移動操作按鍵,此處不再一一列舉
其實更改d功能與剪切c功能相比,就是多了個進入插入模式功能。cw與dwi是一樣的效果。 c是單詞change的首字母。複製
按鍵 功能說明 備註 yy 複製整行 將光標所在行複製下來,複製到行尾只能用y$ Y 同上 同上 yw 複製到下個單詞起始位置 y也是一個組合功能按鍵,與d用法相同 y… y還可以接其他的光標移動操作按鍵,此處不再一一列舉
y組合按鍵的的用法,同剪切d的用法,與光標移動按鍵及重複操作配合,靈活實現複製操作。y用於複製,是單詞yank的首字母,之所以不用copy的首字母c, 是因爲c同時也是change的首字母,用於更改。複製的數據也是存在於vim的緩衝區。粘貼
p : 字母p,是用於正常模式下的粘貼,粘貼來自vim緩衝區的內容,包括剪切、更改去除、複製的內容。p是paste的首字母p如果要粘貼外部複製的數據,如在vim外的crtl+c複製來的數據,那麼切換到插入模式下,使用shift+Insert組合按鍵來實現粘貼,vim內部是不支持crtl+c、ctrl+v。
小結:剪切(d)、更改(c)、複製(y)都是可以配合光標移動按鍵使用,用法相同,需要熟練掌握。
查找、替換
查找
vim的查找支持基本的正則表達式查找。按鍵 功能說明 備註 /[pattern] 向下查找模式[pattren],按下Enter鍵開開始查找 /a 表示向下查找字母a; /[1-9] 表示向下查找1-9的任意一位數字 ?[pattern] 向上查找模式[pattren] n 順方向查找下一處 n是next的首字母 N 反方向查找下一處 % 括號匹配 顯示匹配的括號,程序編寫檢查括號常用
有些字符有特殊功能使用,需要轉義字符/轉義,如查找/, 要用“/\/”。下方的替換操作也是如此。
/及?查找,最後需要按下Enter鍵纔開始執行動作。tips:
查找單詞全詞匹配: /\<plus\> 查找單詞plus。
其中\是轉義字符,<表示單詞開頭,>表示單詞結尾。查找時忽略大小寫:/plus\c 結尾使用\c表示忽略大小寫。
如果要默認忽略大小寫,需要通過設置命令,下文會加以介紹。替換
s替換操作要切換到命令模式,在命令行上輸入,支持正則表達式模式操作。按鍵 功能說明 備註 r+單字符 單字符替換,將光標所在字符替換爲r後的字符 正常模式下使用,r是replace首字母 R 連續替換多個字符 正常模式下使用 s/old/new 將所在行匹配到的第一個old替換成new s/old/new/g 將所在行匹配到的所有old替換成new g是global的首字母 s/old/new/c 將所在行匹配到的所有old替換成new,但替換前會提示確定 c是confirm的首字母 %s/old/new/gc 將整個文件匹配到的old替換成new #,#s/old/new/gc 是一個數字表行數,將兩個數字之間的行中的old替換成new 10,20s/old/new/g 表示將10到20行中的old替換成new
s替換操作,也是最後要按下Enter鍵纔開始執行
重複及撤銷類操作
重複操作
重複操作在前面已有提及,5dd表示刪除5行。
重複操作就是在動作前面加個一個數字,表示用於連續執行動作次數。
5j 向下移動五行;
5dd 刪除5行;
5yy 複製5行。
撤銷類操作
撤銷類的操作,是針對文件修改的撤銷,未修改操作如光標移動,沒有撤銷說法,即光標移動後,再撤銷按鍵,是無法回到上次光標位置。按鍵 功能說明 備註 u 撤銷上一次的修改操作 ctrl+r 恢復撤銷 r是recover的首字母;如果誤操作撤銷,可按ctrl+r恢復 U 撤銷或者恢復整行的修改 按下U,撤銷整行的修改,撤銷後再按一次U是恢復整行的修改
文件定位及狀態
本節主要介紹文件的定位操作(包括跳轉,翻頁等功能),以及查看文件狀態。
按鍵 | 功能說明 | 備註 |
---|---|---|
ctrl+g | 在屏幕下方顯示當前文件狀態 | |
gg | 跳轉到文件開頭 | |
G | 跳轉到文件末尾 | |
數字+G | 跳轉指定數字行 | |
數字+gg | 同上 | |
ctrl+f | 前滾一屏,也即下一頁 | |
ctrl+b | 後滾一屏,也即上一頁 |
命令模式操作
本節介紹下命令模式下的一些常用命令操作,顧名思義,首先得按:進入到命令模式下。
按鍵 | 功能說明 | 備註 |
---|---|---|
set xxx | 設置類命令,設置xxx選項,支持簡寫爲se | |
w FILENAME | 以文件名FILENAME保存文件,相當於另存爲 | w 保存當前文件 |
r FILENAME | 提取文件FILENAME內容插入到當前光標處 | |
r ![shell cmd] | 執行shell cmd提取其標準輸出內容,插入到當前光標處 | 如r !ls表示在外部shell下執行ls命令並將其輸出內容,插入到當前光標處 |
!shell cmd | 在外部shell中執行shell cmd |
關於設置類常用命令:
按鍵 | 功能說明 | 備註 |
---|---|---|
se nu | 在每一行前顯示出行號 | se是set的簡寫,number的簡寫 |
se nonu | 取消設置行號,即不顯示出行號 | 取消設置某一命令,都是在相應命令前加上no組成取消命令,nonu就是nonumber的簡寫 |
se ic | 設置查找時忽略大小寫 | ic是igorecase的簡寫 |
se hls | 將查找到的字符串高亮顯示 | hls是hlsearch的簡寫 |
se is | 在輸入查找內容時,就實時顯示出第一個找到的內容 | is是incsearch的簡寫 |
help cmd | 獲取命令幫助 | 如:help set、help incsearch |
列塊操作,不常用(notepad++支持,程序員用的多)
1、保存部分內容
shift+v --> 移動光標選中若干行 --> : w FILENAME
2、列編輯插入
crtl+v --> 移動光標選中若干列 --> shift+i 列插入--> 輸入文本 --> 連按兩次Esc鍵 --> 選中的列前都有輸入文本
crtl+v --> 移動光標選中若干列 --> d --> 刪除選中列
例:
//a[0].no = 1;
//a[0].name = "XiaoMing";
//a[0].grade = 1;
//a[0].class = 2;
將每行前的//刪除,且將a[0]中的0改成1
按如下操作:
光標移動到第一行行首處 --> crtl+v --> 按j跟l選中所有的// --> d --> 光標移動到第一行的0上 --> 移動j選中所有的0 --> 輸入r1,將所有0替換成1 --> 結束
tips:
I : 列編輯下,在光標處插入
A : 列編輯下,在光標後插入
小結
掌握以上基本操作,相信就可以實現大部分的文件編輯功能。當然VIM的功能按鍵多如牛毛,往往在正常模式誤按到某個鍵而調用了其相應功能,只要使用撤銷操作,以及Esc鍵,回到正常模式下。