1溺欧、vim 的三種模式
vim(visual interface improve) 是 vi 的升級(jí)版本饶氏,也是 linux 中最常見的一種交互式文本編輯器账忘。
三種模式之間的切換如下圖所示:
2韩玩、vim 的常用操作
下面分別介紹一下vim各個(gè)模式的常見操作:
2.1、一般模式(normal mode)
當(dāng)使用 vim /path/file_name
打開一個(gè)文件后唱歧,首先見到的就是一般模式(normal),在這個(gè)模式下粒竖,可以進(jìn)行文本的復(fù)制颅崩,粘貼,刪除等操作蕊苗。
在一般模式下沿后,可以使用鍵盤來控制光標(biāo)的移動(dòng),下面是我在工作中常用的一些按鍵朽砰,掌握了這些尖滚,可以大大加快你使用 vim 編輯的速度。
表1:光標(biāo)移動(dòng)
按鍵 | 說明 |
---|---|
k(↑)瞧柔、j(↓)熔掺、h(←)、k(→) | 光標(biāo)以字符為單位非剃,上下左右移動(dòng) |
w | 光標(biāo)以單詞為單位置逻,移動(dòng)到下一個(gè)單詞的詞首 |
0 | 光標(biāo)以行為單位,移動(dòng)到光標(biāo)所在行的行首 |
$ | 光標(biāo)以行為單位备绽,移動(dòng)到光標(biāo)所在行的行尾 |
ctrl+f | 光標(biāo)以屏幕為單位券坞,向下翻一屏 |
ctrl+b | 光標(biāo)以屏幕為單位鬓催,向上翻一屏 |
gg 或 1G | 光標(biāo)以文檔為單位,移動(dòng)到文檔開頭 |
光標(biāo)以文檔為單位恨锚,移動(dòng)到文檔結(jié)尾 | G |
在一般模式下可以對(duì)文件進(jìn)行復(fù)制宇驾、粘貼、刪除操作猴伶。
表2:編輯操作
按鍵 | 說明 |
---|---|
y | 復(fù)制光標(biāo)選中的內(nèi)容 |
p(大P正好是相反课舍,在光標(biāo)所在行的上面粘貼) | 在光標(biāo)所在行的下一行,粘貼所選擇的內(nèi)容 |
x(大X的使用效果與backspace相同) | 以字符為單位他挎,刪除光標(biāo)所在處的一個(gè)字符 |
d | 刪除光標(biāo)選中的內(nèi)容 |
當(dāng)你在 windows 上面筝尾,習(xí)慣了使用鼠標(biāo)進(jìn)行選中時(shí),一下子使用 vim 可能會(huì)有不習(xí)慣的地方办桨。其實(shí)在 vim 中也有類似鼠標(biāo)選擇的功能筹淫,而且相較于 windows 上面常見的選擇功能可能更加強(qiáng)大。
表3:選中
按鍵 | 說明 |
---|---|
v | 以字符為單位呢撞,光標(biāo)經(jīng)過的地方都會(huì)被選中 |
shift+v | 以行為單位损姜,光標(biāo)經(jīng)過的地方都會(huì)被選中 |
ctrl+v | 以列為單位,光標(biāo)經(jīng)過的地方都會(huì)被選中 |
在 vim 中也有類似 word 中的撤消殊霞,恢復(fù)等功能
表4:撤消摧阅、恢復(fù)、重復(fù)
按鍵 | 說明 |
---|---|
u | 撤消上一個(gè)動(dòng)作 |
ctrl+r | 恢復(fù)上一個(gè)動(dòng)作 |
. | 重復(fù)上一個(gè)動(dòng)作 |
2.2绷蹲、編輯模式
那當(dāng)我需要添加一些內(nèi)容的時(shí)候呢棒卷,這個(gè)時(shí)候要以通過以下方式,進(jìn)入編輯模式瘸右。編輯模式有兩種一種是插入模式(insert)娇跟,別一種是改寫模式(replace)。改寫模式我除了做實(shí)驗(yàn)太颤,在生產(chǎn)中從來就沒有用過苞俘,這邊就暫時(shí)不列出來了。
表5:進(jìn)入或退出編輯模式
按鍵 | 說明 |
---|---|
i(insert) | 以字符為單位龄章,在當(dāng)前光標(biāo)所在處進(jìn)行輸入 |
a(append) | 以字符為單位吃谣,在當(dāng)前光標(biāo)處退后一個(gè)字符輸入 |
I | 以行為單位,在當(dāng)前光標(biāo)所在行的行首輸入 |
A | 以行為單位做裙,在當(dāng)前光標(biāo)所在行的行尾輸入 |
o(open) | 在當(dāng)前光標(biāo)所在行的下一行岗憋,打開一個(gè)新行輸入 |
O | 在當(dāng)前光標(biāo)所在行的上一行,打開一個(gè)新行輸入 |
Esc鍵 | 返回編輯模式 |
2.3 命令模式
當(dāng)我要對(duì)文檔內(nèi)容進(jìn)行一些查找锚贱,替換仔戈,保存,退出或臨時(shí)更改 vim 的屬性時(shí),就要使用命令模式监徘,它通常使用 :(冒號(hào))
晋修、/(斜線)
、?(問號(hào))
三種方式進(jìn)入凰盔,而使用 Esc 鍵返回編輯模式墓卦。
下面就介紹一些命令行模式下常用的操作:
注:
以下內(nèi)容中,如果是用:(冒號(hào))進(jìn)入的命令模式户敬,那介紹時(shí)冒號(hào)我就省略了落剪。
表6:查找與替換
按鍵 | 說明 |
---|---|
/string 使用n(next)代表查找下一個(gè),N代表查找上一個(gè)尿庐,下同忠怖。 | 以光標(biāo)所在處,向下查找字符串string |
?string | 以光標(biāo)所在處屁倔,向上查找字符串string |
/pattern/ | 使用正則表達(dá)式進(jìn)行模糊匹配 |
n1,n2s/pattern/string/g 如果不加g(global)那么默認(rèn)只會(huì)替換每行查找到的第一個(gè)脑又,符合pattern的內(nèi)容 | 在n1~n2行之間查找暮胧,符合模式pattern的內(nèi)容锐借,并將其替換成字符串string |
1,$s/pattern/string/g;%s/pattern/string/g 兩者是等效的往衷,隨便用哪個(gè) | 全文替換钞翔,有兩種表達(dá)方式 |
n1,n2s/pattern/string/gc;c(confirm) | 在替換前進(jìn)行詢問確認(rèn) |
表7:保存席舍、退出等
按鍵 | 說明 |
---|---|
w | 對(duì)編輯的內(nèi)容進(jìn)行保存 |
w file_name | 將當(dāng)前文檔另存為file_name |
w! | 強(qiáng)制保存布轿,當(dāng)編輯一些只讀文件時(shí),需要用到這個(gè) |
q | 退出關(guān)閉vim |
q! | 放棄所有編輯来颤,并強(qiáng)制退出 |
x | 保存編輯并退出 |
!command | 在vim中執(zhí)行bash命令 |
r file_name | 在已經(jīng)打開一個(gè)文件后汰扭,還想在當(dāng)前vim中再打開其它文件,這個(gè)功能我很少用福铅,我一般使用下面要介紹的多窗口編輯萝毛,兩種方式無優(yōu)劣之分,更多的是使用習(xí)慣上的區(qū)別滑黔。 |
命令模式中可以臨時(shí)設(shè)置 vim 的屬性笆包,我常用的有以下幾個(gè),更多的內(nèi)容可以自行查看 vim 的 help 文件或 Google略荡,如果不想每次都進(jìn)行更改庵佣,可以將其寫到 vim 的配置文件中。
注:
不推薦直接修改 vim 的默認(rèn)配置文件 /etc/vimrc 建議在用戶的家目錄新建 .vimrc 文件汛兜,將自己個(gè)性化配置記錄其中巴粪。
表8:臨時(shí)設(shè)置vim的屬性
按鍵 | 說明 |
---|---|
set nu/nonu | 顯示或關(guān)閉行號(hào) |
set hlsearch/nohlsearch | 打開或關(guān)閉搜索結(jié)果高亮顯示 |
set syntax on/off | 打開或關(guān)閉語法著色 |
help | 打開vim的幫助文件 |
到此 vim 一些常見的基礎(chǔ)操作就介紹完了,附錄為 vim 的多窗口操作。
而 vim 操作的一大特色就是可以進(jìn)行組合操作肛根,比如說保存退出衡创,可以這樣做 :wq
;再比如晶通,我想把1到10行全部刪除璃氢,可以這樣做 :1,10d
,更多的組合操作狮辽,就期待大家在實(shí)踐中慢慢發(fā)現(xiàn)了
附A:vim 的多窗口操作
表9:常用分屏操作
按鍵 | 說明 |
---|---|
sp filename | 用水平分屏的方式打開新文件 |
vsp filename | 用垂直分屏的方式打開新文件 |
ctrl+w+[k(↑)/j(↓)/h(←)/k(→)] | 光標(biāo)上下左右移動(dòng) |
附B:vim使用環(huán)境配置
vim的編碼設(shè)置
vim的全局環(huán)境變量的配置文件是 /etc/vimrc一也,但一般不建議修改這個(gè)配置文件,而是在自己用戶家目錄喉脖,新建 .vimrc
文件椰苟,在該文件中定義自己個(gè)性化的需求。
當(dāng)我們需要在 windows 與 linux 之間來回復(fù)制文件時(shí)树叽,因?yàn)?windows 默認(rèn)使用的編碼規(guī)則是 cp936(基本等同于GBK)舆蝴,而 linux 通常使用的是 utf-8 進(jìn)行編碼。所以常常會(huì)出現(xiàn)亂碼的情況题诵,為了盡量避免這種情況的發(fā)生洁仗,我們就需要對(duì) vim 的默認(rèn)編碼環(huán)境進(jìn)行設(shè)置。
在 vim 中與字符編碼相關(guān)的有四個(gè)變量性锭,與今天我們配置相關(guān)的赠潦,主要有兩個(gè):fileencodings 和 fileencoding
下面分別對(duì)這四個(gè)編碼變量做個(gè)簡(jiǎn)單說明:
encoding: vim 的內(nèi)部使用的編碼規(guī)則,vim 內(nèi)部所有的 buffer草冈,寄存器她奥,腳本中的字符串等都會(huì)使用這個(gè)編碼。通常我們使用的是 utf-8怎棱,并且不建議去修改這個(gè)值哩俭。當(dāng)一個(gè)文件的編碼與 encoding 不一致時(shí),vim 會(huì)先將文件編碼轉(zhuǎn)換成內(nèi)部編碼拳恋,文件中含有沒有辦法轉(zhuǎn)換成內(nèi)部編碼的字符時(shí)凡资,這個(gè)字符就會(huì)丟失。
termencoding: 是 vim 用于屏幕顯示的編碼诅岩,在顯示的時(shí)候 vim 會(huì)把內(nèi)部編碼轉(zhuǎn)換成顯示編碼讳苦,如果內(nèi)部編碼含有無法轉(zhuǎn)換成屏幕編碼的字符時(shí),就會(huì)以 ? 號(hào)顯示吩谦。但不會(huì)出現(xiàn)字符丟失的情況鸳谜。
fileencodings: 是一個(gè)以逗號(hào)分隔的列表,列表的每一項(xiàng)就是一種編碼的名稱式廷。當(dāng) vim 打開一個(gè)文件時(shí)咐扭,會(huì)依次用 fileencodings 中的編碼方式進(jìn)行解碼,如果解碼成功的話,就會(huì)用這種方式進(jìn)行解碼蝗肪,并將 fileencoding 設(shè)置為這個(gè)值袜爪。如果不成功,就繼續(xù)試驗(yàn)下一個(gè)編碼方式薛闪。如果全不成功的話辛馆,默認(rèn)會(huì)用最后一種解碼方式對(duì)文件內(nèi)容進(jìn)行解碼。
注:
通常情況下豁延,使用了錯(cuò)誤的解碼方式昙篙,就會(huì)造成亂碼,為了盡量的避免這種情況發(fā)生诱咏。
推薦值為:
set fileencodings=ucs-bom,utf-8,cp936,gb18030,big5,euc-jp,euc-kr,latin1
- fileencoding: vim 在讀取文件時(shí)苔可,會(huì)對(duì)文件內(nèi)容的編碼規(guī)則進(jìn)行探測(cè),當(dāng)現(xiàn)文件編碼規(guī)則與 encoding 不一致時(shí)袋狞,就會(huì)調(diào)用 fileencodings 來嘗試解碼焚辅。當(dāng)解碼成功后,會(huì)設(shè)置 fileencoding 的值苟鸯,這個(gè)值按我的理解就是一個(gè)標(biāo)識(shí)同蜻,用于文件編輯完成后存盤時(shí)使用。將內(nèi)部編碼轉(zhuǎn)換成 fileencoding 標(biāo)識(shí)的編碼后倔毙,進(jìn)行存盤埃仪。
vim 是調(diào)用外部命令乙濒,iconv 來實(shí)現(xiàn)編碼之間的轉(zhuǎn)換陕赃。如果你想手工轉(zhuǎn)換文件的默認(rèn)編碼方式,也可以通過 iconv 來進(jìn)行颁股。具體的使用方法要以 man 一下么库。
注1:
只有在對(duì)文件正確解碼的前提之下,對(duì)文件轉(zhuǎn)碼才有意義甘有。也就是說诉儒,當(dāng)你已經(jīng)打開了一個(gè)文件,發(fā)現(xiàn)文件內(nèi)容是亂碼亏掀,這個(gè)時(shí)候忱反,你通過設(shè)置 fileencoding 這個(gè)值,是沒有辦法糾正亂碼的滤愕。
注2:
如果你不想每次手工設(shè)置 vim 環(huán)境變量的話温算,也可以將其寫入配置文件,永久保存间影。除了上面提供的注竿,還有許多可定制的選項(xiàng),建議自行通過 help 文件,研究一下巩割。
注3:
vim windows 版本初始化:
syntax on
set nobackup
colorscheme darkblue
set fileencodings=ucs-bom,utf-8,cp936,gb18030,big5,euc-jp,euc-kr,latin1
附C:vim 的臨文件
在使用 vim 編輯一個(gè)文件時(shí)裙顽,vim 會(huì)在被編輯文件所在的目錄下面,新建一個(gè)名為 .file_name.swp 的文件宣谈。
有時(shí)候當(dāng)你打開一個(gè)文檔愈犹,發(fā)現(xiàn)會(huì)有如下提示時(shí)
這個(gè)提示分成三部分
- 提示發(fā)現(xiàn)一個(gè)臨時(shí)文件,以及對(duì)臨時(shí)文件基本情況的一個(gè)概述
- 介紹了出現(xiàn)這種情況的兩種原因
- 提供了一些處置選項(xiàng)
E325: ATTENTION
Found a swap fileby the name ".vimrc.swp"
owned by: root dated: Sun Aug 3 19:04:49 2014
filename: ~root/.vimrc
modified: no
user name: root host name: localhost.localdomain
process ID: 4344 (still running)
While opening file".vimrc"
dated: Sun Aug 3 12:41:39 2014
(1) Another program may be editing the same file.
If this is the case, be careful not to end up with two
different instances of the same filewhen making changes.
Quit, or continuewith caution.
(2) An edit session forthis filecrashed.
If this is the case, use ":recover"or "vim -r .vimrc"
to recover the changes (see ":help recovery").
If you did this already, delete the swap file".vimrc.swp"
to avoid this message.
Swap file".vimrc.swp"already exists!
[O]pen Read-Only, (E)dit anyway, (R)ecover, (Q)uit, (A)bort:
[O]pen Read-Only, (E)dit anyway, (R)ecover, (D)elete it, (Q)uit, (A)bort:
兩種情況生成的處置項(xiàng)菜單也是有區(qū)別的闻丑,第二種情況會(huì)多一個(gè) delete 選項(xiàng)
- 對(duì)于第一種情況甘萧,有其他人或程序也在編輯同一個(gè)文件,為保持?jǐn)?shù)據(jù)的一致性梆掸,最好是選擇以只讀方式打開扬卷,或者干脆就直接退出,等其他人使用完成后酸钦,再來編輯怪得。
- 對(duì)于第二種情況,由于編輯器崩潰引起卑硫,如果你想恢復(fù)到崩潰前的狀態(tài)徒恋,可以選擇recover。如果你確定這個(gè)臨時(shí)文件已沒有用了欢伏,可以選擇delete入挣。當(dāng)然你可以直接選擇edit。