vi、vim

在Linux中使用文本編輯器來編輯你的Linux參數(shù)配置文件是一件很重要的事情,因此系統(tǒng)管理員至少應(yīng)該熟悉一種文本編輯器。

在Linux世界里,絕大部分的配置文件都是以 ASCII(鍵盤上面可找到的)的純文本形式,(發(fā)音:/??ski/ass-kee[1]AmericanStandardCode forInformationInterchange,美國信息交換標(biāo)準(zhǔn)代碼)是基于拉丁字母的一套電腦編碼系統(tǒng)。 從[ 0000 0000 - 0111 1111 ]共128個字符。

vi 文本編輯器

所有的 Unix Like 系統(tǒng)都會內(nèi)置 vi 文本編輯器,其他的文本編輯器則不一定存在;

很多軟件的編輯接口都會主動調(diào)用 vi (如 crontab等命令);

vim 具有程序編輯的能力,可以主動以字體顏色辨別語法的正確性,方便程序設(shè)計;

程序簡單,編輯速度相當(dāng)快速。

vim 其實相當(dāng)于 vi 的高級版本,vim可以用顏色或底線等方式來顯示一些特殊信息。

在vi 里面,[ Tab ] 鍵所得到的結(jié)果與空格符得到的結(jié)果是不一樣的,特別強(qiáng)調(diào)一下。

在 vi 中,數(shù)字是很有意義的。數(shù)字通常代表重復(fù)做幾次的意思,也有可能是代表去到第幾個什么什么的意思。


vim 的保存文件、恢復(fù)與打開時的警告信息


當(dāng)我們在使用 vim 編輯時,vim 會在被編輯的文件目錄下再建一個名為 ?.filename.swp 的暫存文件。

由于 vim 的工作被不正常中斷,導(dǎo)致暫存盤無法通過正常流程來結(jié)束,所以暫存文件就不會消失,而繼續(xù)保留下來。此時繼續(xù)編輯文件就會出現(xiàn)某些情況。

異常及解決方案

1:可能有其他人或程序同時在編輯這個文件;

2:在前一個 vim 的環(huán)境中,可能因為某些不明原因?qū)е?vim 中斷(crashed)。



vi ?的三種模式:一般模式、編輯模式、命令行模式



vi的3種模式

一般模式? ? ? ? ? ? ? ? 刪除、復(fù)制與粘貼

x,X ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?x為向后刪除一個字符,X為先前刪除一個字符

nx(n代表數(shù)字) ? ? ? ? ? ? ? 向后刪除n個字符

dd ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?刪除當(dāng)前行

D ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?刪除當(dāng)前行所有字符,使成為空行

ndd(n代表數(shù)字)? ? ? ? ? ? 刪除光標(biāo)所在行的向下n列

d1G ? ? ? ? ? ? ? ? ? ? ? ? ? ? 刪除光標(biāo)所在行到第一行的所有數(shù)據(jù)

dG ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?刪除光標(biāo)所在行到最后一行的所有數(shù)據(jù)

yy ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 復(fù)制光標(biāo)所在行

y1G ? ? ? ? ? ? ? ? ? ? ? ? ? 復(fù)制光標(biāo)所在行到第一行的所有數(shù)據(jù)

yG ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?復(fù)制光標(biāo)所在行到最后一行的所有數(shù)據(jù)

ynj(n代表數(shù)字)? ? ? ? ? ? 復(fù)制光標(biāo)所在行向下n+1行

dnj(n代表數(shù)字)? ? ? ? ? ? 刪除光標(biāo)所在行向下n+1行

p,P ? ? ? ? ? ? ? ? ? ? ? ? ? p為復(fù)制的數(shù)據(jù)粘貼在光標(biāo)的下一行,P為復(fù)制的數(shù)據(jù)粘貼在光標(biāo)的上一行

J ? ? ? ? ? ? ? ? ? ? ? ? ? ? 將光標(biāo)所在行與下一行的數(shù)據(jù)結(jié)合成一行

u ? ? ? ? ? ? ? ? ? ? ? ? ? ? 恢復(fù)前一個操作(undo)

ctrl + r ? ?? ? ? ? ? ? ? ? ? 重做上一個操作

. ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 重復(fù)前一個操作

編輯模式

i,I? ? ? ? ? ? ? ? ? ? ? i為在當(dāng)前光標(biāo)所在處插入輸入的文字,I為在光標(biāo)所在行第一個非空字符插入輸入的文字

a,A? ? ? ? ? ? ? ? ? ? ? a為在當(dāng)前光標(biāo)所在處下一個字符插入輸入的文字,A為在光標(biāo)所在行最后一個字符的下一個字符處插入輸入的文字

o,O? ? ? ? ? ? ? ? ? ? ? o為在光標(biāo)所在行的下一行行首開始插入字符,O為在光標(biāo)所在行的上一行行首開始插入字符

r,R? ? ? ? ? ? ? ? ? ? ? r為替換光標(biāo)所在那一個字符,R為一直替換光標(biāo)所指的文字,直到退出

Esc? ? ? ? ? ? ? ? ? ? ? 退出,回到一般模式

命令模式? ? ? ? ? ? ? ? 光標(biāo)移動

h? ? ? ? ? ? ? ? ? ? ? ? 光標(biāo)向左移一個字符

j? ? ? ? ? ? ? ? ? ? ? ? 光標(biāo)向下移一個字符

k? ? ? ? ? ? ? ? ? ? ? ? 光標(biāo)向上移一個字符

l? ? ? ? ? ? ? ? ? ? ? ? 光標(biāo)向右移一個字符

Ctrl+f (Page Down) ? ? ? ? ? ? ? ?屏幕向下翻一頁

Ctrl+b (Page Up) ? ? ? ? ? ? ? ? ? 屏幕向上翻一頁

Ctrl+d? ? ? ? ? ? ? ? ? 屏幕向下翻半頁

Ctrl+u? ? ? ? ? ? ? ? ? 屏幕向上翻半頁

+? ? ? ? ? ? ? ? ? ? ? ? 光標(biāo)移動到下一行的第一個非空字符

-? ? ? ? ? ? ? ? ? ? ? ? 光標(biāo)移動到當(dāng)前行的第一個非空字符

n空格(n代表數(shù)字)? ? ? ? ? 光標(biāo)向當(dāng)前行向右移動n個字符

0(數(shù)字0)? ? ? ? ? ? ? ? ? 光標(biāo)移動到當(dāng)前行的第一個字符(可以為空字符,注意與-區(qū)分)

$? ? ? ? ? ? ? ? ? ? ? ? 光標(biāo)移動到當(dāng)前行的最后一個字符(可以為空字符,注意與-區(qū)分)

H? ? ? ? ? ? ? ? ? ? ? ? 光標(biāo)移動到當(dāng)前屏幕最上方的那一行的第一個非空字符

M? ? ? ? ? ? ? ? ? ? ? ? 光標(biāo)移動到當(dāng)前屏幕最中間那一行的第一個非空字符

L? ? ? ? ? ? ? ? ? ? ? ? 光標(biāo)移動到當(dāng)前屏幕最下方的那一行的第一個非空字符

G? ? ? ? ? ? ? ? ? ? ? ? 光標(biāo)移動到該文章最后一行的第一個非空字符

gg ? ? ? ? ? ? ? ? ? ? ? ? ? ?移動到這個文件的第一行,相當(dāng)于 1G

nG(n代表數(shù)字)? ? ? ? ? ? 光標(biāo)移動到該文章第n行的第一個非空字符

/word? ? ? ? ? ? ? ? ? ? 在光標(biāo)之后查找word字符串 ?# 使用 /word 配合 n 以 N 是非常有幫助的。可以讓你重復(fù)地查找到一些關(guān)鍵字

n ? ? ? ? ? ? ? ? ? ? ? ? ?這個 n 為英文字符,代表重復(fù)前一個查找的操作。

?word? ? ? ? ? ? ? ? ? ? 在光標(biāo)之前查找word字符串

:s/word1/word2/g? ? ? ? 在光標(biāo)當(dāng)前行查找word1,并替換成word2

:n1,n2s/word1/word2/g? ? 在第n1行與第n2行之間查找word1,并替換成word2

:%s/word1/word2/gc ? ? ? ?整個文章查找word1,并替換成word2,且在替換前顯示提示字符給用戶確認(rèn)(confirm)

:w? ? ? ? ? ? ? ? ? ? ? 將編輯的數(shù)據(jù)保存到硬盤文件中

:w [filename]? ? ? ? ? ? 將編輯后的數(shù)據(jù)保存到硬盤的另一個文件中

:r [filename]? ? ? ? ? ? 在編輯數(shù)據(jù)時,讀入另一個文件中的數(shù)據(jù),即將filename文件中的內(nèi)容加到光標(biāo)所在行下一行

:wq或:x? ? ? ? ? ? ? ? ? 保存并退出

:q? ? ? ? ? ? ? ? ? ? ? 退出,適用于未修改的文件

:q!? ? ? ? ? ? ? ? ? ? ? 強(qiáng)制退出,適用于修改文件后不保存退出

:!command ? ?執(zhí)行命令

:r !command ? ?將命令結(jié)果寫入

:set nu? ? ? ? ? ? ? ? ? 顯示行號

:set nonu? ? ? ? ? ? ? ? 取消行號

:n1,n2 w [filename]? ? ? 將n1到n2行的內(nèi)容保存到名為filename的文件中



vim 的功能


1、塊選擇(Visual Block)

2、多文件編輯

3、多窗口功能

4、vim 環(huán)境設(shè)置與記錄: ~/.vimrc,~/.viminfo

因為我們的vim會主動將你曾經(jīng)做過的行為記錄下來,好讓你下次可以輕松作業(yè)。那個記錄操作的文件就是:~/.viminfo。 ?如果你曾經(jīng)使用過vim,那你的主文件夾應(yīng)該會存在這個文件才對。這個文件是自動產(chǎn)生的,你不必自行創(chuàng)建。

此外,每個distribution對vim的默認(rèn)環(huán)境都不太相同,舉例來說,某些版本在查找到關(guān)鍵字時并不會高亮反白,有些則會自動幫你進(jìn)行縮進(jìn)排列。其實這些都是可以自行設(shè)置的。那就是vim的環(huán)境設(shè)置。

vim的環(huán)境設(shè)置參數(shù)

整體的vim的設(shè)置值一般時放置在 /etc/vimrc 這個文件中,不過不建議你修改它。你可以新建 ?~/.vimrc ?將你的值寫入。

舉例如下:

自定義的vimrc

5、vim 常用命令示意圖



其他vim使用注意事項


1、中文編碼問題

你的Linux系統(tǒng)默認(rèn)支持的語系數(shù)據(jù),這與 /etc/sysconfig/i18n ? ?有關(guān);

你的終端接口(bash)的語系,這與 LANG這個變量有關(guān);

你的文件原本的編碼;

打開終端機(jī)的軟件。

修改語系編碼:

LANG=zh_CN.utf-8


2、DOS 與 Linux 的斷行字符

Linux的【Enter】為LF符號($),由于DOS的斷行符號是CRLF(^M$),也就多出來了一個CR(^M)。這樣寫出來的程序可能就會出現(xiàn)問題而無法執(zhí)行。

如果在不同的系統(tǒng)之間復(fù)制一些純文本文件時,千萬記得要使用 UNIX2dos ?或者 ?dos2UNIX 來轉(zhuǎn)換一下斷行格式。


3、語系編碼轉(zhuǎn)換

使用 ?iconv ?這個命令來進(jìn)行編碼轉(zhuǎn)換

iconv -f ?gbk ?-t ?utf-8 ?aaagbk



重點回顧


Linux下配置文件多位文本文件,故使用vim即可進(jìn)行編輯;

vim可視為程序編輯器,可用以編輯 shell script 、配置文件等;

vi 為所有UNIX like 的操作系統(tǒng)都會存在的編輯器,且執(zhí)行速度塊;

vi 的界面大致可以分為兩部分:上半部的本文與最后一行的狀態(tài)+命令行模式;

數(shù)字是有意義的,用來說明重復(fù)進(jìn)行幾次操作的意思,如 5yy 為復(fù)制5行的意思;

小數(shù)點“.”為重復(fù)進(jìn)行前一次操作,也是經(jīng)常使用的按鍵功能;

vim會主動創(chuàng)建swap暫存文件,多疑不要隨意斷線;

可以使用 ctrl + v 進(jìn)行復(fù)制/粘貼/刪除的行為;

使用 :sp 功能可以切割窗口;

vim的環(huán)境設(shè)置可以寫入 ~/.vimrc 文件中;

可以使用 iconv 進(jìn)行文件語系編碼的轉(zhuǎn)換;

使用 dos2UNIX 及 UNIX2dos 可以變更文件每一行的行尾斷行符。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • vi/vim是什么? Linux世界幾乎所有的配置文件都是以純文本形式存在的,而在所有的Linux發(fā)行版系統(tǒng)上都有...
    m2fox閱讀 1,143評論 0 2
  • vi/vim是什么? 是個編輯器。 第一部分:一般模式。 移動光標(biāo)的方法 h 或 向左箭頭鍵(←) 光標(biāo)向左移動一...
    溺象海閱讀 260評論 0 0
  • 曾經(jīng)在思科的工廠測試系統(tǒng)`KlemTest` (`SUSE`命令行模式)中使用`VI`/`VIM`超過2年半,現(xiàn)在...
    戈多在地獄閱讀 1,986評論 1 13
  • 看到今天的主體就精神一震,解讀壓力和管理情緒,鴨梨山大是現(xiàn)在職場通病,不禁對今天的課程多了一份期待! ...
    swallow_張燕閱讀 342評論 0 1
  • 夏日涼涼夜,小徑布芳草。眾人辭辛勞,入夢谷不少。
    人間百味閱讀 247評論 0 0

友情鏈接更多精彩內(nèi)容