(*长期更新)软考网络工程师学习笔记——Linux操作系统中的vi/vim 编辑器详解
目錄
- 一、vi/vim概念
- (一)vi/vim文本編輯器
- (二)gedit文本編輯器
- 二、vi編輯器分類
- 三、屏幕編輯器
- (一)命令模式
- 1、進入命令模式
- 2、命令模式下的常用操作
- 3、退出命令模式
- (二)輸入模式
- 1、進入輸入模式
- 2、編輯文檔
- 3、退出編輯文檔
- 四、行編輯器
- (一)進入行編輯器
- 1、通過屏幕編輯器進入
- 2、從終端進入
- (二)退出行編輯器
- 1、退回至屏幕編輯器
- 2、退出vi編輯器
- (三)行編的常用命令
- 五、vi命令的其他常用選項
- (一)恢復上次的編輯副本
- (二)設置加密文件
一、vi/vim概念
(一)vi/vim文本編輯器
vi(Visual interface)的是Linux、Unix等平臺中使用非常普遍的屏幕編輯器,也就是一個文本編輯器,而vim是一個類似于vi經過改進和增加特性的文本編輯器,它的優點是功能強大、高度可定制等等。
可以在Linux終端直接輸入vi或vim查看版本信息,如下:
簡單來說,其實vi/vim就類似于window里面的文本編輯器,但它沒有類似于window里面的菜單欄(也就相當于圖形化頁面),它只有命令,且命令繁多。
(二)gedit文本編輯器
常與vi編輯器提到的還有gedit文本編輯器,這里只是了解一下,它是由GTK+語言編寫,用來當成是一個集成開發環境 (IDE),會根據不同的語言高亮顯現關鍵字和標識符,命令如下:
[yyx@localhost ~]$ gedit在Linux終端輸入命令,即可進入文本編輯器:
也可以通過應用程序——附件——文本編輯器進入:
二、vi編輯器分類
#mermaid-svg-uhwJMJqeeTqoRb6M {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-uhwJMJqeeTqoRb6M .error-icon{fill:#552222;}#mermaid-svg-uhwJMJqeeTqoRb6M .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-uhwJMJqeeTqoRb6M .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-uhwJMJqeeTqoRb6M .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-uhwJMJqeeTqoRb6M .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-uhwJMJqeeTqoRb6M .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-uhwJMJqeeTqoRb6M .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-uhwJMJqeeTqoRb6M .marker{fill:#333333;stroke:#333333;}#mermaid-svg-uhwJMJqeeTqoRb6M .marker.cross{stroke:#333333;}#mermaid-svg-uhwJMJqeeTqoRb6M svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-uhwJMJqeeTqoRb6M .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-uhwJMJqeeTqoRb6M .cluster-label text{fill:#333;}#mermaid-svg-uhwJMJqeeTqoRb6M .cluster-label span{color:#333;}#mermaid-svg-uhwJMJqeeTqoRb6M .label text,#mermaid-svg-uhwJMJqeeTqoRb6M span{fill:#333;color:#333;}#mermaid-svg-uhwJMJqeeTqoRb6M .node rect,#mermaid-svg-uhwJMJqeeTqoRb6M .node circle,#mermaid-svg-uhwJMJqeeTqoRb6M .node ellipse,#mermaid-svg-uhwJMJqeeTqoRb6M .node polygon,#mermaid-svg-uhwJMJqeeTqoRb6M .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-uhwJMJqeeTqoRb6M .node .label{text-align:center;}#mermaid-svg-uhwJMJqeeTqoRb6M .node.clickable{cursor:pointer;}#mermaid-svg-uhwJMJqeeTqoRb6M .arrowheadPath{fill:#333333;}#mermaid-svg-uhwJMJqeeTqoRb6M .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-uhwJMJqeeTqoRb6M .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-uhwJMJqeeTqoRb6M .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-uhwJMJqeeTqoRb6M .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-uhwJMJqeeTqoRb6M .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-uhwJMJqeeTqoRb6M .cluster text{fill:#333;}#mermaid-svg-uhwJMJqeeTqoRb6M .cluster span{color:#333;}#mermaid-svg-uhwJMJqeeTqoRb6M div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-uhwJMJqeeTqoRb6M :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}vi編輯器屏幕編輯器行編輯器命令模式輸入模式vi編輯器分為屏幕編輯器和行編輯器兩種工作模式,它們是同一程序的不同入口,但這兩個工作模式是可以互相切換的。
另外在屏幕編輯器vi它又主要分為兩種模式,其中各種模式的進入和退出方法如下表:
| 命令模式 | 一開始使用該命令即進入該模式 | 輸入:wq,即可保存并退出 |
| 輸入模式 | 在命令模式下按下i鍵 | 通過ESC鍵,退出至命令模式 |
三、屏幕編輯器
vi/vim 命令用于編輯文件或新建文件,后跟文件名稱即可打開或新建文件,命令格式如下:
vi filename(一)命令模式
1、進入命令模式
直接通過vi命令加上文件名,即可編輯或新建文件,此時進入的是命令模式,例如在/tmp目錄下新建一個空白文件myfile,如下命令:
yyx@192 ~]$ su root ... [root@192 yyx]# vi /tmp/myfile在Linux終端中輸入命令:
按下Enter鍵,可以看到這個文件里面每行都是”~“,即這是一個空白的文件,最后一行是該文件的名稱:
在命令模式下,可以通過按下以下鍵進行一些操作,例如可以通過↑、↓、←、→方向鍵或h、j、k、l(h向左、j向下,k向上、l向右)來進行光標的移動(而在輸入模式下無法使用h、j、k、l,即它會輸入字母),如下表:
| Backspace | 光標移至當前的前一個字符(等同方向鍵左、h鍵) ,即向左移動,【注意由于是在命令模式下它并不會刪除字符】 |
| Space | 光標移至當前的后一個字符,即向右移動(等同方向鍵左、l鍵) |
| Delete | 刪除光標當前的一個字符 |
| Enter | 換行 |
| $ | 光標從當前位置移至本行行首 |
| ^ | 光標從當前位置移至本行行尾 |
| + | 光標下移一行 |
| - | 光標上移一行 |
2、命令模式下的常用操作
(1)設置行號
若想對文檔內容(每行)進行編號,可以通過輸入set number,如下:
在vi編輯器的命令模式下輸入,可看到每行內容進行了編號:
(2)回到首行、尾行和目標行
在命令模式下,直接按下gg或1G可以將光標返回文檔的首行(注意這里并不是在":"后輸入命令,而是直接按下鍵盤上的相應字母和數字),如下通過vi命令編輯man_db.conf文件,:
打開文件后輸入:set number進行編號:
然后我們將光標移動至最后一行:
①此時按下鍵盤上的gg或1G可回到文檔的首行,如下按下后光標立即跳至首行:
②按下GG,光標回到最后一行,如下按下后光標位于最后一行:
③若想將光標移動至目標行數的相應字節數,將光標移動至X行的第Y字節數,可以首先按下XG,然后按下Y→(→為右箭頭),即可跳轉至X行,且向右移動Y個字節數。
例如,當前光標位于首行,將光標移動至20行的第12個字節處,即首先按下20G,然后按下12→,如下:
(3)從光標下行開始搜索相應的字符串或字符,即直接在:之后輸入相應的內容,例如搜索and字符:
若未搜索到相應內容,會有提示如下:
(4)一次性將多個字符/字符串替換為相應字符/字符串,如下將50行至100行的字符串“and”都替換為“And”:
然后找到相應的目標位置,可以按y一直繼續替換:
替換完后,下面會顯示一個替換的次數:
此時,若想回到上一次替換,可以按u進行返回一次替換,一直按可返回至替換前的字符/字符串(全部復原),如下:
(5)復制相應區間行的內容,并粘貼至相應行,例如復制51-60行的內容至最后一行,由于51-60共十行,先在鍵盤上按下51G,此時光標跳至51行:
然后再10yy復制十行內容,下面會出現10 lines yanked,如下:
此時按下GG到最后一行,再按下p即可粘貼:
(6)刪除指定行和區間行的內容
①若想刪除指定行的相應長度的字符,例如跳轉至第 29 行,并且刪除 15 個字符,按下29G,15x,即去到第 29 行,并且刪除 15 個字符:
②刪除相應區間行的內容,也是首先按下要刪除相應的區間行的開始行,按下→方向鍵,然后按下Xdd(dd前面的X代表從開始行往下的數字),例如刪除 11 到 30 行之間的 20 行,即11G→20dd,就能刪除相應的區間行:
3、退出命令模式
此時我們可以切換至其它的模式或者退出編輯,可以通過輸入:wq保存并退出(注意這里的:是英文的),若要直接強制保存退出可以通過輸入 :wq!,另外若對文件進行了修改但又不想保存可輸入:q!,如下命令:
:wq在Linux終端中輸入命令,這里不用管位置直接鍵盤輸入即出現在最后一行:
按下Enter鍵,即可退出文檔,并返回到了終端:
(二)輸入模式
1、進入輸入模式
由于命令模式無法對文件進行編輯,所以我們在命令模式中通過按下鍵盤上的i鍵(insert:插入)【也可以通過別的鍵,下面會有介紹】,即可切換至輸入模式,按下后可以在頁面的最后一行看到--INSERT--的標黑粗體顯示,如下:
i首先通過vi命令打開/新建文件:
按下 i 鍵,可以看到下方的- -INSERT- -,此時代表的是當前模式為輸入模式:
通過在命令模式下按下以下鍵都能進入文本輸入模式:
| i | 在光標前插入文本 |
| I | 在光標所在行首插入文本 |
| a | 在光標后插入文本 |
| A | 在光標所在行尾插入文本 |
| o | 在光標所在行的下面新加一行 |
| O | 在光標所在行的上面新加一行 |
| Esc | 返回命令模式 |
例如當我們進入命令模式,按下i鍵,此時光標處于光標前:
我們再通過Esc鍵退回至命令模式,這次按下O鍵,此時可看到光標位于光標所在行的行尾:
再次通過Esc鍵退回至命令模式,按下A鍵,此時可看到光標位于新建的上一行的新行處:
2、編輯文檔
1、單個文檔編輯
對文檔進行編輯,可以通過Enter鍵換行、Backspace鍵刪除光標前的一個字符、Del鍵刪除光標當前的字符、方向鍵上下左右移動光標等等:
在編輯文檔時,可以通過按下以下鍵進行一些操作,例如可以通過上、下、左、右方向鍵(而h、j、k、l在輸入模式下無法使用,即它會輸入字母),如下表:
| Backspace | 刪除光標前的一個字符 |
| Space | 在光標前添加一個空格 |
| Delete | 刪除光標當前的一個字符 |
| Enter | 換行 |
2、多個文檔編輯
例如我們想對多個文件進行編輯,可以在vi命令后加上參數-o/-O,并跟上多個文件名稱,如下:
例如,下面對兩個名稱為t1和t2的文檔進行編輯:
這里相當于對當前屏幕分為兩個頁面進行編輯文件,但是這兩個文件是獨立的,默認進入是第一個文件(即文件名稱為1的文件),此時光標位于第一個文件的第一行行首:
若想切換文件,可通過ctrl+ww切換,如下切換至t2文件,按下ctrl+ww,切換后可見此時光標位于第二個文件t2的第一行行首:
例如我們對兩個文件編輯后,現在要執行t1文件的第一行內容復制粘貼到t2的第二行,可以進行以下操作:在t1文件中,光標處于首位時按yy,復制當前行,ctrl+ww切換至t2,然后光標移動至第一行末尾,然后按下p,即可復制至t2的第二行:
此時通過:wq保存并退出,首先退出的是t1文件,然后再是t2文件:
3、退出編輯文檔
當我們對文檔的內容編輯好后,想退出時,此時可以通過按下ESC鍵退出至命令模式,如下,可看到下方的- -INSERT- -已消失,此時的模式為命令模式:
然后我們想保存并退出該文件,可以通過:wq退出:
此時我們再通過cat命令查看該文件,如下:
在終端中輸入命令,可看到就是剛剛編輯文件的內容:
這里就完成了新建文件——編輯文件——保存文件——查看文件的步驟。
四、行編輯器
行編輯器與屏幕編輯器最大的區別是,屏幕編輯器是對每一個字符進行編輯的,而行編輯器每一條編輯命令所針對的編輯單位是行,即一行進行編輯。
有的地方將行編輯器也稱作底線命令模式,由于兩種工作模式是可以切換的,所以常將命令模式、輸入模式和底線命令模式一起歸納,如下表是這三種模式的進入和退出方法:
| 命令模式 | 一開始使用該命令即進入該模式 | 輸入:wq,即可保存并退出 |
| 輸入模式 | 在命令模式下按下i鍵 | 通過ESC鍵,退出至命令模式 |
| 底線命令模式 | 在命令模式下按下:鍵 | :vi命令回車Enter鍵結束通過,退出至命令模式 |
(一)進入行編輯器
1、通過屏幕編輯器進入
由于行編輯器和屏幕編輯器是可以切換的,所以在vi屏幕編輯器的命令模式下通過輸入:即可進入行編輯器,如下可看到我們可在“:”后輸入字母、數字、符號等等:
2、從終端進入
另外也可以通過ex后跟文件名稱的方式來進入行編輯器,如下:
ex filename例如通過ex行編下編輯位于/tmp目錄下的myfile文件:
[yyx@192 ~]$ ex /tmp/myfile在Linux終端輸入命令,進入行編:
(二)退出行編輯器
1、退回至屏幕編輯器
在行編輯器下,即在:后面輸入vi即可返回至屏幕編輯器的命令模式,如下:
然后回車即可返回命令模式,光標停留在行編處理的最后一行的下一行的行首:
2、退出vi編輯器
(1)通過在:后面輸入wq,即可寫回(覆蓋)原文件,并退出vi編輯器;
(2)在:后面輸入q,退出vi編輯器;
(3)在:后面輸入q!,強行退出vi編輯器(不寫文件);
(三)行編的常用命令
1、:n,表示將第n行作為當前編輯行,例如目前當前行是第一行:
通過在:后跟2,即代表將第2行作為當前編輯行,輸入:2,回車:
可見當前編輯行光標已移動至第二行行首:
2、:np,表示顯示第n行的內容,并將第n行作為當前行,例如:
可見第二行的內容顯示在下方,且當前光標已切換至第二行行首:
3、:m,np,表示顯示第m行至第n行的內容,并將第n行作為當前行,例如:
顯示第二行至第四行的內容,并將第四行作為當前光標所在行:
光標位于第四行:
4、刪除操作
(1):d,表示刪除當前行的內容;
(2):nd,表示刪除第n行的內容,刪除后將當前的第n行作為當前光標所在行;
(3):m,nd,表示刪除第m行至第n行的內容,刪除后將當前的第n行作為當前光標所在行;
5、:a,表示在當前行的下一行輸入文本,直到按Esc鍵為止。
6、替換操作
(1):s/string1/string2/,表示將當前行的第一個字符串string1替換成字符串string2;
(2):m,ns/string1/string2/g,表示把從第m行到第n行中所有字符串string1都替換成字符串string2。
7、(1):r filename,在當前行的后面附加文件名稱為filename的文件內容;
(2):nr filename,在第n行的后面附加文件名稱為filename的文件內容。
8、(1):w filename,寫到文件名稱為filename,不退出;
(2):w!filename,強制執行寫到文件名稱為filename,不退出。
五、vi命令的其他常用選項
(一)恢復上次的編輯副本
vi -r filenamevi后跟-r參數可以對修改過但因意外中斷而未保存的文件名稱為filename的文件讀入編輯緩沖區,使編輯工作繼續進行。
(二)設置加密文件
vi -x filenamevi后跟-x參數可對文件名稱為filename的加密文件經過輸入密碼后進行編輯。
例如現在對一個沒加密的文件設置密碼并編輯該文件,如下命令:
在Linux終端輸入命令:
這里會提示再輸入一次密碼:
設置好密碼后,進入vi編輯器然后保存,再次編輯該文件時就要使用密碼才能進入:
總結
以上是生活随笔為你收集整理的(*长期更新)软考网络工程师学习笔记——Linux操作系统中的vi/vim 编辑器详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: (*长期更新)软考网络工程师学习笔记——
- 下一篇: Linux操作系统笔记——Shell变量