Linux操作系统——vi文本编辑器
1.vi文本編輯器概述
????????與Unix相同,Linux本質上是一個文本驅動(text-driven)的操作系統。文本文 件就是全部由ASCII碼字符及某種語言的編碼字符構成的文件,不含有任何樣式和格式信息。文本文 件可以被任何文本編輯器解釋而不會出現亂碼,還可以被所有程序操作和使用。在Linux系統中,文 本文件被廣泛地用作系統配置文件和系統工具軟件的操作對象。這使得用戶可以在文本方式下完成所有的工作,如編寫程序和命令腳本、讀/寫電子郵件、配置和管理系統等。而完成所有這些工作的基 本工具就是文本編輯器。因此,Linux的用戶應當熟悉至少一種文本編輯器
1.1 vi文本編輯器介紹
????????Linux下的文本編輯器有ex、sed、vi和emacs等很多種。其中,vi是最基本的文本編輯工具。vi(visual)誕生于1978年,由柏克萊大學的Bill Joy編寫。從其誕生至今,vi始終是所有Unix/Linux系統上必配的編輯器,甚至在DOS、Windows、Macintosh、OS/2乃至IBM大型機S/390系 統上都能見到vi的某個版本。目前Linux系統上流行的版本是vi增強版vim(vi improved)。vim是一個開放源代碼軟件,它在vi的基礎上增強了功能,也更容易使用。現在許多Linux發行版中的vi就是vim。本書中所說的vi也兼指vim,但有一些選項可能只有vim支持。vi是一個全屏幕文本編輯器,具有文本編輯所需的所有功能。vi以高效和快捷著稱,這是vi能夠在編輯器領域中保持幾十年領先地位的原因。以下介紹vi的幾個突出特點。
1.編輯功能強大
????????vi的編輯功能十分強大,除通常的編輯功能外,vi還支持一些高級編輯特性,如正則表達式、宏和命令腳本。利用這些特性可以完成非常復雜的編輯任務,實現編輯的智能化和自動化。另一方面,vi的功能又十分專注,它只是一個編輯器,沒有其他功能。Linux系統 提供了許多專門用途的工具,如排版、排序、流過濾、E-mail、編譯等軟件。vi可以和這些工具軟件協同工作,從而實現幾乎所有的文件加工處理任務。用一些小而精悍、功能專一的工具結合起來完成復雜的處理功能,這正是Unix的設計哲學。
2. 適用于各種版本的Unix/Linux系統
????????vi是Unix/Linux系統的標準文本編輯器,幾乎每一臺Unix/Linux系統上都會有vi,這是其他編輯器無法相比的。
3. 適用于各種類型 的終端
????????vi得以廣泛應用的原因之一是它對終端設備的廣泛適應性。不管是只有打字機鍵盤加Esc 鍵的簡單終端,還是受通信限制的遠程終端,或是配有完備的功能鍵和鼠標的現代化終端,都可以很好地支持vi完成文本編輯工作。
4. 使用靈活快捷
????????廣泛適應性帶來的問題是繁多的命令。對于同 一項編輯操作,vi提供了許多不同的命令。vi的命令都很簡練,往往是單個字符或少數幾個字符的組合。對初學者來說,使用這些命令并不方便,甚至過于復雜。但對于熟練的用戶來說,更多的選擇意味著更大的自由,簡單的命令意味著更少的擊鍵次數。正因為如此,vi被看做是Linux開發人員和系 統管理員的編輯利器。初學者經過一段時間的使用,也會逐漸習慣vi的操作方式,并形成自己特有的操作風格。
1.2 vi的工作模式
????????vi是一個多模式的軟件,它有三種工作模式。在不同的工作模式下,它對輸入的內容有不同的解釋。
1. 命令模式(Command mode)
????????在命令模式下,輸入的任何字符都作為命令來解釋 執行,屏幕上不顯示輸入內容。命令模式用于完成各種文本修改工作。
2. 輸入模式(Insert mode)
????????在輸入模式下,輸入的任何字符都將作為文件的內容被保存,并顯示在屏幕上。輸入模式用于完成文本錄入工作。
3. 末行模式(Last line mode)
????????末行模式也稱為ex轉義模式。在末行模式下 ,光標停留在屏幕的最末行,在此接收輸入的命令并執行。末行模式用于執行一些全局性操作,如文件操作、參數設置、查找與替換、拷貝與粘貼、執行Shell命令等。
????????在文本編輯過程中,用戶可 以控制vi在這三種工作模式之間進行切換,完成各種編輯工作。三種模式之間的轉換關系如圖所示。
?1.3 vi的啟動與退出
????????在Shell下輸入vi命令后,便進入全屏幕編輯環境,命令格式是:vi [文件名]
????????vi的啟動過程是:先建立一個編輯緩沖區,若指定了文件且該文件已存在,則將其內容讀到編輯緩沖區中;若指定的文件不存在,則建立此文件。然后將光標定位在第1行第1列的位置上。
????????vi啟動后首先進入命令模式。此時,用戶可以使用vi的編輯命令進行文本的輸入和修改。
????????注意:編輯命令只是修改調入編輯緩沖區中的文件的副本, 文件本身不會被修改。所以,編輯完成后,要用:wq命令將修改后的內容保存到文件中并退出vi。若此次運行未對原文件作任何修改,則可用:q命令退出。
2. vi基本命令
????????vi的命令繁多,但通常的編輯工作只需要掌握其中一小部分命令。而 對于一些特殊的操作或編輯任務,總能夠在vi手冊中找到適當的命令。
????????vi的常用編輯命令分為以下幾類:
- 屏幕翻滾命令
- 移動光標命令
- 插入與刪除命令
- 修改與替換命令
- 拷貝與粘貼命令
- 復原與重復命令
????????vi的命令通常是簡單的字符(如a、s、c)或是字符組合(如dw、cc),還有少數幾個控制鍵組 合字符(如Ctrl+u)。這就是說,僅僅通過普通鍵盤就可以實現所有編輯工作,完全不需要用鼠標,也不倚賴于某些控制鍵。比起使用鼠標和復雜控制組合鍵來說,鍵入字符命令的速度要快得多。因此,熟練使用這些字符命令能夠提高編輯的效率。
????????盡管只用字符命令就可以完成所有編輯工作,vi還是提供了對現代鍵盤上的編輯鍵的支持。適當地使用這些熟悉的按鍵將使編輯操作更加輕松。
| 按鍵 | 命令模式 | 輸入模式 | 末行模式 |
| Home | 移動光標到行的最前面 | 移動光標到行的最前面 | 移動光標到行的最前面 |
| End | 移動光標到行的最后面 | 移動光標到行的最前面 | 移動光標到行的最前面 |
| PageDown | 向下翻頁 | 移動光標到行的最前面 | 向下翻找歷史命令 |
| PageUp | 向上翻頁 | 移動光標到行的最前面 | 向下翻找歷史命令 |
| Delete | 刪除光標位置的字符 | 移動光標到行的最前面 | 移動光標到行的最前面 |
| Insert | 進入輸入模式 | 替換-插入 | 無效 |
| Backspace | 光標前移一個字符 | 刪除光標前的字符 | 刪除光標前的字符 |
| Space | 光標后移一個字符 | 空格 | 空格 |
| Enter? | 光標下移一個字符 | 換行 | 提交命令 |
| ↑↓←→ | 按箭頭方向移動光標 | 按箭頭方向移動光標 | 找歷史命令 |
????????以下分類介紹常用的vi命令。注意:在命令模式下輸入的字符都被vi解釋為命令,不在屏幕上顯示。若輸入的是非法命令則響鈴報警。此外,vi的命令是區別大小寫的,即大寫字母和小寫字母代表的是不同的命令。
2.1 屏幕翻滾
????????當編輯的文件比較大時,使用翻屏命令可以快速地將要編輯的區域調入屏幕顯示區。用PageDown和PageUp鍵可以方便地實現上下翻屏,但在有些場合下需要用命令來實現更靈活的翻屏操作。常用的幾個翻屏命令介紹如下。
????????翻屏命令:
Ctrl+u:????????向上翻半屏。
Ctrl+d:????????向下翻半屏。
Ctrl+f:????????向下翻一屏。同PageDown鍵。
Ctrl+b:????????向上翻一屏。同PageUp鍵。
[n]z+Enter:將第n行滾至屏幕頂部,不指定n時將當前行滾至屏幕頂部
2.2 光標定位于移動
????????在輸入或修改文本前,應先將光標移到適當的位置。vi不支持用鼠標移動光標的方式,但以下命令可以更加高效地定位和移動光標。
????????光標定位命令:
0 ????????光標移至行 首。同Home鍵。
^ ? ? ? ? 光標移至行首第1個非空格字符。
$ ????????光標移至行尾。同End鍵。
[n]G ???光標移到第n行,未指定n時移到末行。
[n]| ?????光標移到第n列,未指定n時移到首列。
H、M、L? ? ? 光標移到屏幕首、中、尾行行首。
????????光標移動命令:
h、j、k、l????????光標向左、下、上、右移一個字符。同箭頭鍵。
b、w????????????????光標移到上一個詞、下一個詞首。
e??????????????????????光標移到詞尾。
(、)??????????????????光 標移到句首、句尾。
{、}??????????????????光標移到段首、段尾。
????????注:以上光標移動命令前帶數字n時,表示 重復移動n次。如:2h為左移2格,3e為移到后面第3個詞的詞尾
2.3 文本輸入于刪除
1. 文本的輸入
?????????在輸入文本內容之前,應先將光標定位在要輸入的位置上,然后執行插入命令 ,進入輸入模式。處于輸入模式時,屏幕底部會顯示“—insert—”提示,表示后續的輸入都作為文件的輸入內容。輸入完成后按Esc鍵就可返回命令模式。
????????插入(insert)命令都是單字符命令,可以靈活 地實現在當前光標位置的前、后、行首、行尾、上一行、下一行開始輸入
????????插入命令:
a、A????????在光標位置后、行尾后開始插入。
i、I???????????在光標位置前、行首前開始插入。i的 作 用與Insert鍵相同。
o、O????????在光標所在行之后、光標所在行之前的新行開始插入。
2. 文本的刪除
????????刪除(delete)文本的最簡單方法是將光標移到要刪除的字符上,然后,每按一 下x鍵或Delete鍵就會刪掉一個字符。若要刪除的文本較多時,可以使用下面更加靈活的刪除命令。
????????刪除命令:
x、X???????刪除光標處、光標前的字符。x的作用與Delete鍵相同。
dd???????????刪除光標所在的行。
D? ? ? ? ? ? 刪除光標右面的文本。
J? ? ? ? ? ? ?刪除當前行尾的換行符,使當前行與下 一行合并為一行。
d+定位符 ?刪除從光標位置到指定位置范圍內的字符。常用的有:
d0、d^ ???????刪除光標左面的文本。0或^代表行首。
d$ ???????????????刪除光標右面的文本。$代表行尾。
dG ? ????????????刪除光標所在行之后的所有行。G代表最后一行。
db ???????????????刪除光標處前的字符直到詞 首。b代表詞首。
de ???????????????刪除光標處的字符直到詞尾。e代表詞尾。
dw???????????????刪除光標處的字 符直到下一個詞的詞首。w代表下一 ? 詞詞首。
????????注:以上命令前帶數字n時,表示刪除的范圍擴大n倍。如:3dd為刪除3行,2de為刪除從光標開始的2個詞。
2.4 文本修改與替換
1. 文本的修改
?????????文本修改(correct)是指改寫一部分文本的內容,修改的過程是:先刪除指定范圍內的文本,然后插入新文本,最后用Esc鍵結束插入。以下介紹幾個常用的修改命令。
????????修改命 令:
cc????????????????????修改光標所在的行。
C?????????????????????修改光標處到行尾的文本。
c +定位符????????修改光標到指定范圍內的文本。常用的有:
c0、c^????????修改光標左面的文本。
c$???????????????修改光標右面的文本。
cG???????????????修改光標所在行之后的所有行。
cb????????????????修改光標處前的字符直到詞首。
cw????????????????修改光標處的字符直到詞尾。
cl? ? ? ? ? ? ? ? ? 修改光標處的字符。
????????注:以上命令前帶數字n時,表示修改的范圍擴大n倍。如:5cc為修改從光標所在行開始的5行,3cw為修改從光標開始的3個詞。
2. 文本的替換與替代
????????替換(replace)是指用一個字符替換另一個字符,這是一種覆蓋操作,替換后文本的長度保持不變。替代(substitute)則是指用多個字符取代一個字符或一行,是一個先刪除后插入的操作。通常情況下,替代后的文本長度會發生變化。以下介紹常用的替換與替代命令。
????????替換與替代命令:
r????????用輸入的字符替換光標處的字符。
R????????用輸入的文本逐個替換從光標處開始的各個字符,直到按下Esc鍵。
s????????用輸入的文本替代光標處的字符,用Esc鍵結束輸入,等同于cl。
S????????用輸入的文本替代光標所在的行,用Esc鍵結束輸入,等同于cc。
2.5 文本拷貝與粘貼
????????拷貝(copy)操作是將光標處的文本復制到一個緩沖區中(類似于Windows中的剪 貼板);粘貼(paste)操作是將緩沖區中的內容插入到光標處。以下介紹常用的拷貝粘貼命令。
????????拷貝與粘貼命令:
yy????????????????拷貝光標所在行至緩沖區。
y+定位符?????拷貝光標到指定范圍內的文本。常用的有:
y0、c^?????????拷貝光標左面的文本。
y$????????????????拷貝光標右面的文本。
yG???????????????拷貝光標所在行之后的所有行。
yb????????????????拷貝光標處的字符直到詞首。
yw????????????????拷貝光標處的字符直到詞尾。
?
2.6 撤銷與重做
????????撤銷(undo)即消除上一個命令所做的修改,恢復到命令執行前的樣子。重做(redo)就是重復執行上一個命令。
????????撤銷與重做命令:
u 撤銷上一個命令所做的修改。
U 撤銷最近針對一行所做的全部修改。在對一行連續做了多處修改后,用此命令可以一次恢復全行。
. ? 重復前一個命令。
利用撤銷和重做命令可以提高編輯的效率,減少擊鍵次數。
????????
3. vi常用末行命令
????????在命令模式下,輸入“:”、“/”或“?”字符(稱為ex轉義字符)都將進入末行模式,隨后的輸入被解釋為行命令,在屏幕末行顯示。輸入完成后按Enter鍵執行。末行命令執行結束后返 回命令模式,或退出vi。
????????末行命令主要有以下幾類:
- 字符串搜索與替換命令;
- 文件操作與退出命令;
- 其他命令;
3.1 搜索與替換命令
1. 字符串搜索
????????要在一個大文件中查找某個字符串,可以用字符串搜索命令。執行搜索命令后 ,光標將停留在第一個匹配字符串的首字符處。按“n”或“N”則移到下一個匹配字符串之首。如果不存在匹配的字符串,則會在末行上顯示“找不到模式”。
????????搜索命令有以下兩種:
/模式????????從光標處向后 搜索與指定模式匹配的字符串。按n向后繼續找。
?模式????????從光標處向前搜索與指 定模式匹配的字符串。按N向前繼續找。
????????例如:執行/and命令,光標將從當前位置移到后面第一個“and”的字符“a”上。按n移到下一個“and”上。當搜索到文件尾時,再按n則返回到 文件頭繼續搜索。
2. 字符串替換
????????字符串替換使用s命令,它的功能是在指定的行中搜索與指定模式相匹配的字符串,并用另一個字符串替換它。
????????s命令的一般格式是::[n1,n2]s/p1/p2/[g][c]
????????其中n1, n2 表示目標行的行號范圍,可以用“%”代表所有行;未指定范圍時,目標行就是光標所在的當前行。p1 是用做搜索的字符串模式,p2是用做替換的字符串模式。模式中可以用“^”代表行首,“$”代表行尾。s命令可以帶g和c選項。g表示替換目標行中所有匹配的字符串,沒有g的話則只替換目標行中第一個 匹配的字符串。選項c表示替換前要求用戶確認。
3. 全局命令
????????全局命令g(global)的功能是在全文中搜索含有與指定模式相匹配的字符串的行,對匹配的行做標記。g命令的格式是:
:g/p1????????搜索所有包含p1字符串模式的行。
:g!/p1???????搜索所有不包含p1字符串模式的行。
????????例如::g/and命令將找出所有含有“and”的行;:g!/and/命令找出所有不含“and”的行。 vi的許多末行命令都是針對行的編輯命令。g命令可以與這些面向行的命令聯合使用,它的作用是修飾這些命令,為其確定滿足某個條件的目標行。在g命令 的修飾下,這些行編輯命令就可用來完成面向全文的、按模式篩選的編輯操作。g命令與其他命令聯 合使用的格式是:
:g/p1/????????命令對所有包含p1的行執行指定的命令。
:g!/p1/???????命令對所有不包含p1 的行執行指定的命令。
????????例如:p命令的功能是顯示行,:g/and/p命令將顯示所有含有“and”的行;d命令的功能是刪除行,:g!/Note/d命令將刪除所有不含“Note”的行。
4. 全局替換
????????s命令是面向行的字符串替換命令。s命令經常與g命令聯合使用,實現更靈活更細致的全局替換功能。
????????全局替換命令的一般格式是:
g命令/s命令。其含義是:先用g命令在文件中搜索含有某個模式的行,并做標記,然后用s命令對所有有標記的行執行搜索和替換。
????????常用的 全局替換命令的格式有:
:g/p1/s/p2/p3/g 將文件中所有含有p1的行中的p2用p3替換。
:g!/p1/s/p2/p3/g 將文件中所有不含有p1的行中的p2用p3替換。
:g/p1/s//p2/g ????????將文件中所有的p1用p2替換。這里:g/p1/s//p2/g 是:g/p1/s/p1/p2/g的簡寫,即當s命令的搜索模式與g 命令的搜索模式相同時,可以省略s中的搜索模式。 注意:此處//之間沒有空格。
3.2 文件操作與退出命令
????????文件操作命令包括讀文件和寫文件操作。讀文件就是將文件的內容讀入編輯緩沖區中,寫文件就是將編輯緩沖區的內容保存到文件中。在退出vi時,可以選擇是否保存文件。以下是常用的退出和文件操作命令:
:w [文件名]????????寫入指定文件。若未指定文件則寫入當前文件,即vi啟 ?動時打開的文件。
:q??????????????????????未修改原文件,不保存文件,直接退出。
:wq、:x? ? ? ? ? ? ?保存文件并退出。
:q!?????????????????????放棄修改,不保存文件,退出。
:e!?????????????????????放棄修改,編輯區恢復為文件原樣。
:e 文件名? ? ? ? ? 打開指定的文件,調入編輯區。
:r 文件名? ? ? ? ? ?讀入指定的文件,將文件內容插入到光標位置。
:f???????????????????????在屏幕末行顯示文件相關信息。
3.3 其他常用命令
1. 行編輯命令
????????行編輯命令用于對指定的行進行編輯。在指定行范圍時,可以用“.”代表當前行,用“$”代表最后一行,用“%”代表所有行。常用的行編輯命令如下:
:n ????????????????跳至第n行。
:n1,n2con3 將第n1至n2行之間的內容拷貝到第n3行下。如::3,7co$表示將第3到7行的文字復制到文件末尾處。
:n1,n2mn? ? ? ?將第n1至n2行之間的內容移至第n3行下。如::.m10表示將當前行移動到第10行下。
:n1,n2d ? ? ? 將第n1至n2行之間的內容刪除。如::3,7d表示刪除第3到7行。
:p ???????????????顯示當前行的內容。 :nu 顯示當前行的行號和內容。
2. 執行Shell命令
????????用vi編輯文件時,可以在不退出vi的情況下執行Shell命令。執行命令期間vi暫時掛起,待命 令執行結束后返回vi繼續運行。
????????執行Shell命令的格式是:
:!????????命令執行指定的Shell命令。
3. 設定vi選項
?????????vi是一個高度可定制的編輯器,用戶可以通過設置vi的選項來規定vi的一些外觀和行為特性,使其滿足特定的需求。設定vi選項的方法之一是使用set命令。
????????常用的選項如下:
:set all????????顯示所有選項。
:set ai、:set noai? ? ? ? ? 設定、取消自動縮進。
:set nu、:set nonu? ? ? ? 設定、取消行號顯示
:set hlsearch? ? ? ? ? ? ? ? ?設定高亮顯示搜索到 的字符串。
:set nohlsearch?????????????取消高亮顯示搜索到的字符串。
:set ic、:set noic? ? ? ? ? ?設定、取 消搜索命令中忽略大小寫。
總結
以上是生活随笔為你收集整理的Linux操作系统——vi文本编辑器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 以太网性能测试分析仪
- 下一篇: linux 调节风扇速度命令,ubunt