vi編輯器是Linux系統都會內置的文本編輯器,使用廣泛。掌握vi編輯器的常見操作是使用Linux必備技能。
vi工作模式
vi包含三種模式,分別是命令模式、插入模式、命令行模式。這三種模式的作用分別是:
命令模式:可以使用上、下左右按鍵來移動光標,可以刪除字符或刪除整行來處理文件內容,也可以使用復制、粘貼來處理文件數據。通常vi打開文件就直接進入入一般模式。
插入模式:主要是編輯文件內容。
命令行模式:主要是提供查找字符串、替換字符串、顯示行號、保存或取消文件修改等操作。
三種模式有不同的作用,他們是之間的切換關系如下:
命令模式 <-> 插入模式:命令模式下輸入i, I, o, O, a, A, r, R等任何一個字母后進入插入模式。按Esc返回命令模式
命令模式 <-> 命令行模式:一把模式下輸入:、/、?三個中的任何一個字符進入命令行模式。按Esc返回命令模式。
插入模式 <-> 命令行模式:不能互轉。只能通過切換到命令模式再進行切換。
說明:命令模式可以和插入模式及命令行模式切換, 但插入模式與命令行模式間不能相互切換,只能通過命令模式中轉切換。圖示如下:
命令模式切換到插入模式不同插入字符的區別:
i 從目前光標所在處插入
I 目前所在行的第一個非空格符處開始插入
a 從光標所在的下一個字符處開始插入
A 從光標所在行的最后一個字符處開始插入
o 光標所在行的下一行插入新的一行。
O 光標所在行的上一行插入新的一行。
r 替換光標所在的那個字符一次
R 一直替換光標所在的文字,直到按下Esc鍵為止。
vi常用命令
移動光標命令
h或向左鍵(←) 光標向左移勱一個字符 j或向下鍵(↓) 光標向下移勱一個字符 k或向上鍵(↑) 光標向上移勱一個字符 l或向右鍵(→) 光標向右移勱一個字符 Ctrl+f 向下翻一頁 Ctrl+b 向上翻一頁 n<space> 按下數字n后再按空格鍵,光標向右移動這一行n個字符 0 移動到這一行的最前面字符處 $ 移動到這一行的最后面字符處 G 移動到文件最后一行 nG 移動到文件第n行 gg 移動到文件第一行,相當於1G n<Enter> 向下移動n行
查找字符串命令
/word 向下查找字符串word。輸入n,繼續向下查找字符串word。輸入N,向上查找字符串word(常用)
?word 向上查找字符串word。輸入n,繼續向上查找字符串word。輸入N,向下查找字符串word(常用)
替換字符串命令
:n1,n2s/word1/word2/g 在第 n1和n2行之間查找word1字符串,並將該字符串替換為word2(常用) :1,$s/word1/word2/g 從第一行到最后一行查找找 word1 字符串,並將該字符串替換為word2(常用) :1,$s/word1/word2/gc 從第一行到最后一行尋找 word1 字符串,並將該字符串替換為word2,且在替換前顯示提示字符給用戶確認是否需要替換
刪除、復制與粘貼字符串命令
x,X x為向后刪除一個字符,X為向前刪除一個字符(常用) nx n為數字,向后連續刪除n個字符。 dd 刪除游標所在的那一整行(常用) ndd n為數字,刪除光標所在的向下n行 d1G 刪除光標所在到第一行的所有數據 dG 刪除光標所在到最后一行的所有數據 d$ 刪除游標所在處,到該行的最后一個字符 d0 那個是數字的 0 ,刪除游標所在處,到該行的最前面一個字符 yy 復制游標所在的那一行(常用) nyy n 為數字。復制光標所在的向下n行 y1G 復制光標所在行到第一行的所有數據 yG 復制光標所在行到最后一行的所有數據 y0 復制光標所在的那個字符到該行行首的所有數據 y$ 復制光標所在的那個字符到該行行尾的所有數據 p, P p為將已復制的數據在光標下一行粘貼,P則為粘貼在游標上一行! J 將光標所在行與下一行癿數據結合成同一行 u 復原前一個勱作(常用)
顯示行號命令
:set nu 顯示行號,設定后,會在每一行的前綴顯示該行的行號
:set nonu 取消行號顯示
保存或取消文件修改命令
:wq 保存修改文件后退出(常用) :wq! 強制保存修改文件后退出,常用於文件為只讀情況。 :q 不保存文件退出(常用) :q! 強制退出不保存文件,常用於若修改過文件但又不想保存情況
案例操作練習
測試題目
1、在/tmp目錄下建立一個名為vitest的目錄; 2、迚入 vitest 這個目錄當中; 3、將 /etc/man.config 復制到本目錄下 4、使用vi打開man.config文件 5、在vi中設定一下行號 6、移動到第 58 行,向右移動 40 個字符 7、移動到第一行,並且向下搜尋一下bzip2字符串 8、接着下來,我要將 50 到 100 行之間癿小寫man字符串改為大寫MAN字符串,並且一個一個挑選是否需要修改,如何操作? 9、修改完后,突然反悔了,要全部復原,有哪些方法? 10、我要復制 65 到 73 這九行的內容,並且貼到最后一行之后 11、第21到42行之間的開頭為 # 符號的批注數據我不要了,要如何刪除? 12、移動到第27行,並且刪除15個字符 13、在第一行新增一行,該行內容輸入I am a student 14、保存文件修改后退出
答案
中括號中的內容為要操作的命令: 1、[cd /tmp;mkdir vitest] 2、[cd vitest] 3、[cp /etc/man.config] . 4、[vi man.config] 5、輸入[:set nu] 6、按[Esc]切換到命令模式,先輸入[58G]再輸入[40→] 7、先輸入[1G]或[gg]后,再輸入[/bzip2] 8、輸入[:50,100s/man/MAN/gc] 9、(1)可以一直按[u]回復到原始狀態,(2)使用不保存離開[:q!]后,再重新打開文件 10、輸入[65G]移動到第65行, 然后再輸入[9yy]之后最后一行會出現復制九行的說明字樣。按下[G]到最后一行,再按[p]粘貼! 11、輸入[21G]移動到第21行,再輸入[22d]就刪除22行 12、輸入[27G]移動到第27行,再輸入[15x]即可刪除15個字符 13、輸入[1G]移動第一行,然后輸入大寫字母[O]便新增一行且在插入模式;開始輸入[I am a student] 14、按下[Esc]切花到命令模式,輸入[:wq]保存文件退出
練習題
1、vi打開文件后,要在第34行向右移動15個字符,如何操作? 2、vi打開文件后,如何去到文件的頁首或頁尾? 3、vi打開文件后,如何在光標所在行中,移動到行首或行尾? 4、如何切換一般模式、命令行模式、編輯模式? 5、如何刪除一行、n 行,如何刪除一個字符? 6、如何復制一行、n 行並加以粘貼? 7、如何查找string這個字符串? 8、如何替換文件中所有的word1字符串成為word2? 9、如何保存、退出、保存后退出、強制保存后退出文件? 10、vi編輯文件做了很多修改后,如何還原成原來的文件內容? 11、vi打開文件后,如何顯示行號和取消行號?
參考資料
1、鳥哥Linux私房菜基礎學習篇<第三版>,鳥哥 著