vi就是linux命令行下的最著名的編輯器之一,Vim常被稱作“程序員的編輯器”,其功能如此強(qiáng)大以致許多人認(rèn)為它就是個(gè)完整的IDE。不過現(xiàn)在實(shí)際使用的都是vim,它是vi的改進(jìn)版本,所以現(xiàn)在的vi基本上就是vim了。代碼補(bǔ)完、編譯及錯(cuò)誤跳轉(zhuǎn)等方便編程的功能特別豐富,在程序員中被廣泛使用。和Emacs并列成為類Unix系統(tǒng)用戶最喜歡的編輯器。
1、簡介
在UNIX系統(tǒng)中,創(chuàng)建和修改配置文件、shell腳本、初始化文件、編寫程序都離不開VI。
1 vi[1]屬于兩個(gè)主要的UNIX規(guī)范:POSIX和單一UNIX規(guī)范。
2 vi編輯器由Bill Joy于1976年創(chuàng)建。
3 vi是一種面向屏幕的編輯器。
4 vi來源于另一個(gè)編輯器ex。
5 vim是vi的增強(qiáng)版。
2、使用幫助
學(xué)習(xí)vi,學(xué)會使用聯(lián)機(jī)手冊或幫助命令是非常重要的。Unix有兩個(gè)最重要的文檔資料系統(tǒng):Unix手冊和Info(GNU項(xiàng)目的官方文檔資料系統(tǒng))。
常用命令:
1 man vi
2 vi --help
3 info vi
對于較長的說明頁,可使用分頁程序分頁顯示。常用的分頁程序有:less、more、pg。例如:man cp | less
查找說明書頁的其它方法(基于web):
1 使用google搜索:(一定要確保包含雙引號)
○ “man vi ”
○ “man pages” vi
2 另外一種基于web的說明書頁的方法是xman,xman是一個(gè)基于GUI的程序,它充當(dāng)說明書頁瀏覽器。在命令行啟動xman:xman&。
Vi的幫助命令::help
3、模式和命令
3.1 輸入模式和命令模式
命令模式[2](command mode):所鍵入的鍵都被解釋成命令。
輸入模式(input mode):鍵入的任何內(nèi)容都直接插入到編輯緩沖區(qū)中。
當(dāng)離開輸入模式時(shí),使用Esc鍵切換到命令模式。
了解所處模式的方法:
:set showmode
3.2 vi和ex命令
vi和ex是同一個(gè)程序的兩種不同的表現(xiàn)形式。也就是說可以同時(shí)使用vi和ex命令。
vi:
①大多數(shù)vi命令都是單字母或雙字母的表現(xiàn)形式。
②vi鍵入時(shí)命令不回顯。
ex:
①ex命令比vi命令長。
②所有的ex命令都以一個(gè):(冒號)開頭。鍵入:后,vi就將光標(biāo)移動到命令行上(屏幕最底部)。
③ex命令的每個(gè)字符都將回顯。
④ex命令結(jié)束,必須按下
4、啟動與編輯vi-vim
4.1編輯一個(gè)文件
語法:vi 【-rR】 【file……】
常用命令:
1 vi file 啟動vi,編輯指定的文件
2 vi -R file 以只讀模式啟動vi
3 view file 以只讀模式啟動vi (vi -R file等同于view file)
4 vim file 啟動vim,編輯指定的文件
5 vim -C file 以兼容模式啟動vi
4.2編輯多個(gè)文件
語法:vi a.txt b.txt c.txt
切換文件: :next
4.3 編輯技巧
編輯技巧:
1 vi +[num] file 打開文件,并將光標(biāo)置于第n行首
2 vi + file 打開文件,并將光標(biāo)置于最后一行首
3 vi +/pattern file 打開文件,并將光標(biāo)置于第一個(gè)與pattern匹配的字符串
4 vi +?pattern file 編輯工作從匹配pattern的最后一行開始
5 vi -r file (-r 即recover,恢復(fù))
4.4 寫入文件
常用命令:
1 :w 將數(shù)據(jù)寫入到原始文件
2 :w file 將數(shù)據(jù)寫入到指定文件
3 :w >> file 將數(shù)據(jù)追加到指定文件
4 :r [filename] 在編輯的數(shù)據(jù)中,讀取另一個(gè)檔案的數(shù)據(jù),亦將檔案內(nèi)容加到游標(biāo)所在行的后面
5 :n1,n2 w [filename] 將n1到n2的內(nèi)容存儲成另一個(gè)檔案。
4.5 退出文件、停止vi
常用命令:
1 :q 退出文件
2 :q! 不保存數(shù)據(jù),強(qiáng)制退出
3 :wq 保存退出文件
4 shift+ZZ 停止vi
5 ZQ 無條件退出
4.6 vi與vim命令行常用選項(xiàng)
-b 以二進(jìn)制模式編輯文件
-c command 啟動后立即運(yùn)行給定的ex命令
-d 以diff模式運(yùn)行
-o[num] 啟動vim時(shí)打開num個(gè)窗口
-O[num] 啟動vim時(shí)打開num個(gè)水平排列
-r 恢復(fù)模式
-R 于只讀模式中編輯文件
-t tag 編輯包含tag的文件,并將光標(biāo)置于tag位置
-T type 設(shè)置可選終端類型
5 插入
輸入模式:
操作鍵 | 說明 |
i | 在當(dāng)前光標(biāo)位置前插入數(shù)據(jù) |
a | 在當(dāng)前光標(biāo)位置后插入數(shù)據(jù) |
I | 在當(dāng)前行開頭處插入數(shù)據(jù) |
A | 在當(dāng)前行末尾處插入數(shù)據(jù) |
o | 在當(dāng)前行下面出入一行 |
O | 在當(dāng)前行上面插入一行 |
6、移動和跳轉(zhuǎn)
6.1獲取光標(biāo)當(dāng)前位置
獲取方式:^G
6.2 緩沖區(qū)移動
操作鍵 | 說明 |
^F | 向下移動一屏 |
^B | 向上移動一屏 |
n^F | 向下移動n屏 |
n^B | 向上移動n屏 |
^D | 向下移動半屏 |
^U | 向上移動半屏 |
n^D | 向下移動n行 |
n^U | 向上移動n行 |
^E | 向屏幕頂端多滾動一行 |
^L | 向屏幕底端多滾動一行 |
zENTER | 將光標(biāo)所在的行移動到屏幕頂端 |
z. | 將光標(biāo)所在的行移動到屏幕中間 |
z- | 將光標(biāo)所在的行移動到屏幕底端 |
6.3 光標(biāo)移動
操作鍵 | 說明 |
h | 將光標(biāo)向左移動一個(gè)位置 |
j | 將光標(biāo)向下移動一個(gè)位置 |
k | 將光標(biāo)向上移動一個(gè)位置 |
l | 將光標(biāo)向右移動一個(gè)位置 |
- | 將光標(biāo)移動到上一行的開頭 |
+ | 將光標(biāo)移動到下一行的開頭 |
^ | 將光標(biāo)移動到當(dāng)前行的第一個(gè)非空格/制表符的字符上 |
數(shù)字0 | 將光標(biāo)移動到當(dāng)前行的開始 |
$ | 將光標(biāo)移動到當(dāng)前行的末尾 |
w W | 將光標(biāo)移動到下一個(gè)單詞的詞首(大寫字母,略過空格) |
e E | 將光標(biāo)移動到下一個(gè)單詞的詞尾(大寫字母,略過空格) |
b B | 將光標(biāo)移動到上一個(gè)單詞的詞首(大寫字母,略過空格) |
) | 向前移動到下一個(gè)句子 |
( | 向后移動到上一個(gè)句子 |
{ | 向前移動到下一個(gè)段落 |
} | 向后移動到上一個(gè)段落 |
H | 將光標(biāo)移動到屏幕頂部 |
M | 將光標(biāo)移動到屏幕中間 |
L | 將光標(biāo)移動到屏幕的最后一行 |
fcharacter | 單字符搜索移動(f為搜索命令,character為要搜索的字符) |
Fcharacter | 單字符左方向搜索移動 |
% | 已匹配一個(gè)括號為目的的移動 |
說明:
1.命令計(jì)數(shù):在移動命令前加數(shù)字,如3j,可實(shí)現(xiàn)向下移動三行。
語法:ncommand (n為數(shù)字,command為移動命令)
2. 規(guī)律:一個(gè)命令的大寫字母形式會做同樣的事情,但是方向相反。
6.4 行號跳轉(zhuǎn)
顯示行號: :set number
關(guān)閉行號: :set nonumber
命令 | 說明 |
nG 、 :n | 跳轉(zhuǎn)到第n行 |
1G 、 gg 、 :1 | 跳轉(zhuǎn)到編輯緩沖區(qū)的第一行 |
G 、 :$ | 跳轉(zhuǎn)到編輯緩沖區(qū)最后一行 |
附加:
另一個(gè)移動到某行的辦法是:在命令 % 前加一個(gè)命令計(jì)數(shù),如 50% 會把光標(biāo)定位在文件中間。
6.5 跳轉(zhuǎn)到前一位置
返回前一位置:
a) ``(兩個(gè)反引號)
b) ‘’(兩個(gè)單引號)
6.6 使用名稱標(biāo)示任意行,進(jìn)行跳轉(zhuǎn)
用不可見的名稱標(biāo)識任意行,當(dāng)需要時(shí)使用此名稱跳轉(zhuǎn)到這一行。
可以鍵入m標(biāo)示這一行,后跟一個(gè)字母,這個(gè)字母就是這一行的名稱。例如:用”b“標(biāo)示這一行,可以鍵入mb。為了跳轉(zhuǎn)到這一行,可以鍵入一個(gè)反引號或單引號,后面跟這一行的名稱。如:`b 或 ’b
7 搜索
7.1搜索常用命令
向前搜索: /
向后搜索: ?
常用命令:
1 / 向前重復(fù)搜索
2 ? 向后重復(fù)搜索
3 /regex 向前搜索指定的正則表達(dá)式
4 ?regex 向后搜索指定的正則表達(dá)式
5 n 重復(fù)上一條/或?命令,搜索方向相同
6 N 重復(fù)上一條/或?命令,搜索方向相反
附:
命令歷史記錄:用上下箭頭來查找用過的搜索
7.2查找字符串便捷方式
*命令 : 將光標(biāo)定位于字符串,按下*鍵,vi將會取當(dāng)前光標(biāo)所在的字符串并將它作用目標(biāo)字符串進(jìn)行搜索。
#命令: 與*相反。
%:搜索與當(dāng)前花括號、圓括號、方括號成對的符號。
7.3 查找整個(gè)字符串
方法:
使用\< \>進(jìn)行匹配。
例子:/\
8 文本改動
8.1替換之vi命令
r:精確替換一個(gè)字符(不進(jìn)入輸入模式)。
R:替換多個(gè)字符(以覆蓋方式替換)。(先將光標(biāo)移動到希望開始替換的位置,然后輸入R。切換到輸入模式,隨后鍵入的每個(gè)字符都將替換當(dāng)前行上的一個(gè)字符。)
s:允許使用多個(gè)字符替換一個(gè)單個(gè)的字符(以插入方式替換)。
C:允許替換從當(dāng)前光標(biāo)位置到本行末尾的所有字符。
S 或 cc:以插入方式替換當(dāng)前整行。
cmove:以插入方式從當(dāng)前光標(biāo)處替換到move所給出的位置處。
8.2替換之ex命令_常用方法
ex命令:
語法::s/pattern/replace/ 其中,pattern是替換的模式,replace是替換的文本。
使用方法總結(jié):
1 :s/pattern/replace/ 替換當(dāng)前行
2 s/pattern/replace/g 替換當(dāng)前行所有
3 :lines/pattern/raplace/ 替換指定行
4 :line,lines/pattern/replace/ 替換指定范圍內(nèi)的行
5 :%s/pattern/replace/ 替換所有行
6 :.,$s/pattern/replace/g 從當(dāng)前行末尾至編輯緩沖區(qū)的末尾進(jìn)行相同的替換
7 :line,.s/pattern/replace/g 從編輯緩沖區(qū)的指定位置到當(dāng)前行進(jìn)行相同的替換
說明 :
1 所有的ex命令都以:開頭。
2 :s只替換當(dāng)前行上該模式的第一個(gè)匹配項(xiàng)。
3 為了替換所有匹配項(xiàng),需在該命令的末尾鍵入字母g。例如::s/UNIX/linux/g
4 替換前進(jìn)行確認(rèn),可在命令末尾添加c。例如::s/UNIX/linux/cg
5 .點(diǎn)號代表當(dāng)前行。$代表緩沖區(qū)最后一行。%代表編輯緩沖區(qū)內(nèi)所有的行。
8.3 交換字符
交換兩個(gè)字符的位置: xp
交換兩行的位置:ddp
調(diào)換兩個(gè)單詞(光標(biāo)開始處于第一個(gè)單詞的左邊):deep
9、刪除
9.1 刪除命令
vi命令 | 操作鍵 |
x | 刪除當(dāng)前光標(biāo)處的字符 |
X | 刪除光標(biāo)左邊的字符 |
D | 刪除從當(dāng)前光標(biāo)到本行末尾的字符 |
J | 刪除兩行之間的換行符 (亦可用于合并兩行) |
dmove | 刪除從當(dāng)前光標(biāo)到move所給位置的字符 |
dd | 刪除當(dāng)前行 |
ex命令 | |
:lined | 刪除指定行 |
:line,lined | 刪除指定范圍內(nèi)的行 |
9.2 常用的刪除組合命令
說明:操作符命令+位移命令
1 nx 刪除多個(gè)字符(n為刪除的字符個(gè)數(shù))
2 dw 刪除1個(gè)單詞
3 d10w 刪除10個(gè)單詞
4 d10W 刪除10個(gè)單詞,忽略標(biāo)點(diǎn)符號。
5 db 向后刪除一個(gè)單詞
6 d2) 刪除兩個(gè)句子
7 d5} 刪除5個(gè)段落
8 dG 或 :.,$d 刪除當(dāng)前行到編輯緩沖區(qū)末尾的所有行
9 dgg 或 d1G 或:1,.d 刪除當(dāng)前行到編輯緩沖區(qū)開頭的所有行
10 :1,$d 或 :%f 刪除整個(gè)編輯緩沖區(qū)
11 d/word 刪除從光標(biāo)所在位置到單詞word的所有文本
12 .,/word/d 刪除從光標(biāo)所在位置到單詞word的所有文本
13 df x 刪除至當(dāng)前行中x所在的位置
14 d^ 刪除至該行的開始處
9.3插入模式中刪除操作
^U 刪除當(dāng)前行
^H 刪除前一個(gè)字符
^W 刪除前一個(gè)詞
9.4 撤銷或重復(fù)改變
vi命令:
1 u 撤銷上一命令對編輯緩沖區(qū)的修改
2 U 恢復(fù)當(dāng)前行(即一次撤銷對當(dāng)前行的全部操作)
3 .點(diǎn)號 重復(fù)上一命令對編輯緩沖區(qū)的修改
9.5 恢復(fù)刪除
語法:"1p(P)
說明:
1 1為緩沖區(qū)的編號。
2 p在當(dāng)前行的下面插入,P在當(dāng)前行的上面插入。
9.6 復(fù)制上一次刪除
命令 | 說明 |
p | 復(fù)制上一次刪除的內(nèi)容,插入到光標(biāo)的后面/下面 |
P | 復(fù)制上一次刪除的內(nèi)容,插入到光標(biāo)的前面/上面 |
10 復(fù)制
10.1 接出(復(fù)制單詞、句子、段落)
當(dāng)在不刪除文本的情況下將文本復(fù)制到無名緩沖區(qū)時(shí),稱為接出(yank)。(因此將命令命名為y、yy、Y)。
步驟:
1 使用y、yy、Y將文本由編輯緩沖區(qū)復(fù)制到無名緩沖區(qū)中,但不刪除原始文本。
2 將光標(biāo)移動到希望插入文本的位置。
3 使用P或p命令執(zhí)行插入。
常用命令 | 操作鍵 |
yw | 接出一個(gè)單詞 |
y10w | 接出10個(gè)單詞 |
y10W | 接出10個(gè)單詞,忽略標(biāo)點(diǎn)符號 |
yb | 向后接出一個(gè)單詞 |
y2) | 接出兩個(gè)句子 |
y2} | 接出5個(gè)段落 |
yy | 接出一行 |
10yy | 接出10行 |
y$ | 接出從當(dāng)前字符到本行末尾的的文本 |
y0 | 接出從當(dāng)前字符到這一行開頭之間的文本 |
10.2 復(fù)制與移動行
語法:
:x,ycoz
:x,ymz
說明:
1 x,y,z都是行號。x,y是源行,z是目標(biāo)行號。
2 源行x,y被復(fù)制或移動,插入到z行的下面。
3 :m刪除原始行,:co不刪除原始行。
例子:
1 :2co4 復(fù)制第2行,插入到第4行下面
2 :2,4co8 復(fù)制第2行到第4行,插入到第8行下面
3 :2m4 移動第2行,插入到第4行下面
4 :2,4m8 移動第2行到第4行,插入到第8行下面。
11 使用縮寫
要為經(jīng)常使用的單詞或表達(dá)式創(chuàng)建縮寫,可使用:ab命令。
1 創(chuàng)建縮寫,語法::ab [ short long ]
2 刪除縮寫,語法: :una short
12 命令補(bǔ)全與文本補(bǔ)全
命令補(bǔ)全:Tab
關(guān)鍵字補(bǔ)全:^N ^P
13 shell命令
14.1 執(zhí)行shell命令
1 :!command 暫停vi,執(zhí)行制定的shell命令
2 :!! pause vi 執(zhí)行上一條shell命令
3 :sh 暫停vi,啟動一個(gè)新的shell
4 :!csh 暫停vi,啟動一個(gè)新的c-shell
14.2 使用shell命令處理數(shù)據(jù)
1 n!! command 對n行數(shù)據(jù)執(zhí)行command
2 !move command 對當(dāng)前光標(biāo)至move所指定的位置的數(shù)據(jù)執(zhí)行command
3 !move fmt 格式化當(dāng)前光標(biāo)到move所指定的行
15、顯示與設(shè)置選項(xiàng)
15.1 顯示選項(xiàng)
1 語法: :set [option]
2 顯示所有選項(xiàng)的值: :set all
3 顯示一個(gè)選項(xiàng)的值: :set option?
15.2 設(shè)置選項(xiàng)
語法::set [no]option..... :set option[=value]...
15.3常用設(shè)置命令
設(shè)置行號顯示與否: 簡寫 :set nu / :set no nu
設(shè)置自動縮進(jìn): 簡寫 :set ai / :set no ai
設(shè)置縮進(jìn)寬度: 簡寫 :set sw=4
設(shè)置大小寫忽略與否: 簡寫 :set ic / :set no ic
16、初始化文件與配置文件
16.1初始化文件
vi的初始化文件:.exrc
vim的初始化文件:vimrc
16.2配置文件
linux配置文件: /usr/share/vim/vimrc
查找Windows配置文件: scriptnames