Linux --- vim 常用操作

1溺欧、vim 的三種模式

vim(visual interface improve) 是 vi 的升級(jí)版本饶氏,也是 linux 中最常見的一種交互式文本編輯器账忘。

三種模式之間的切換如下圖所示:

image

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è)提示分成三部分

  1. 提示發(fā)現(xiàn)一個(gè)臨時(shí)文件,以及對(duì)臨時(shí)文件基本情況的一個(gè)概述
  2. 介紹了出現(xiàn)這種情況的兩種原因
  3. 提供了一些處置選項(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。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末硝拧,一起剝皮案震驚了整個(gè)濱河市径筏,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌障陶,老刑警劉巖滋恬,帶你破解...
    沈念sama閱讀 218,036評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異抱究,居然都是意外死亡恢氯,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門鼓寺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來勋拟,“玉大人,你說我怎么就攤上這事妈候「颐遥” “怎么了?”我有些...
    開封第一講書人閱讀 164,411評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵州丹,是天一觀的道長(zhǎng)醋安。 經(jīng)常有香客問我杂彭,道長(zhǎng),這世上最難降的妖魔是什么吓揪? 我笑而不...
    開封第一講書人閱讀 58,622評(píng)論 1 293
  • 正文 為了忘掉前任亲怠,我火速辦了婚禮,結(jié)果婚禮上柠辞,老公的妹妹穿的比我還像新娘团秽。我一直安慰自己,他們只是感情好叭首,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評(píng)論 6 392
  • 文/花漫 我一把揭開白布习勤。 她就那樣靜靜地躺著,像睡著了一般焙格。 火紅的嫁衣襯著肌膚如雪图毕。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,521評(píng)論 1 304
  • 那天眷唉,我揣著相機(jī)與錄音予颤,去河邊找鬼。 笑死冬阳,一個(gè)胖子當(dāng)著我的面吹牛蛤虐,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播肝陪,決...
    沈念sama閱讀 40,288評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼驳庭,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了氯窍?” 一聲冷哼從身側(cè)響起饲常,我...
    開封第一講書人閱讀 39,200評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎荞驴,沒想到半個(gè)月后不皆,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,644評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡熊楼,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了能犯。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鲫骗。...
    茶點(diǎn)故事閱讀 39,953評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖踩晶,靈堂內(nèi)的尸體忽然破棺而出执泰,到底是詐尸還是另有隱情,我是刑警寧澤渡蜻,帶...
    沈念sama閱讀 35,673評(píng)論 5 346
  • 正文 年R本政府宣布术吝,位于F島的核電站计济,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏排苍。R本人自食惡果不足惜沦寂,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望淘衙。 院中可真熱鬧传藏,春花似錦、人聲如沸彤守。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽具垫。三九已至侈离,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間筝蚕,已是汗流浹背霍狰。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留饰及,地道東北人蔗坯。 一個(gè)月前我還...
    沈念sama閱讀 48,119評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像燎含,于是被迫代替她去往敵國(guó)和親宾濒。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容