vi編輯器常用命令


  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、接着下來,我要將 50100 行之間癿小寫man字符串改為大寫MAN字符串,並且一個一個挑選是否需要修改,如何操作?
9、修改完后,突然反悔了,要全部復原,有哪些方法?
10、我要復制 6573 這九行的內容,並且貼到最后一行之后
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私房菜基礎學習篇<第三版>,鳥哥 著


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM