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