vi
- Linux 下最常用的文本編輯器,也是各版本 Linux 默認自帶的標配
- vi 除了文本編輯,還可以給字符着色、自動補全,但是不像 Windows 下的 word 有排版功能。
- 可以用來編輯現有的文件,也可以創建一個新文件,還能以只讀模式打開文本文件。
vim
- Vim 是 Vi improved 的縮寫,是 vi 的改進版,使用方法沒什麼區別。
一、基礎 vi 命令
1、進入編輯器
可以通過以下方式進入 vi 編輯器:
命令 | 描述 |
---|---|
vi filename | 如果 filename 存在,則打開;否則會創建一個新文件再打開。 |
vi -R filename | 以只讀模式(只能查看不能編輯)打開現有文件。 |
view filename | 以只讀模式打開現有文件。 |
vi 創建一個新文件並打開:
$ vi testfile
|
~
~
~
~
~
~
"testfile" [New File]
- 豎線(|)代表光標的位置;
- 波浪號(~)代表該行沒有任何內容。如果沒有 ~,也看不到任何內容,那說明這一行肯定是有空白字符(空格、tab 縮進、換行符等)或不可見字符。
2、工作模式
進一步瞭解 vi 之前先來了解一下 vi 的工作模式,vi 有三種工作模式:
普通模式
- 由 Shell 進入 vi 編輯器時,首先進入普通模式。
- 從鍵盤輸入任何字符都被當作命令來解釋。
- 沒有任何提示符,輸入命令後立即執行,不需要回車,而且輸入的字符不會在屏幕上顯示出來。
- 可以執行命令、保存文件、移動光標、粘貼複製等。
- 輸入 i(插入)、c(修改)、o(另起一行) 可進入編輯模式;按 esc 鍵退回普通模式。
- 輸入冒號 (😃 進入命令模式,輸完命令按回車,命令執行完後會自動退回普通模式。
- 另外,如果不確定當前處於哪種模式,按兩次 Esc 鍵將回到普通模式。
編輯模式
- 進行文本編輯
- 輸入的任何字符都被作爲文件的內容保存起來,並在屏幕上顯示出來。
命令模式
- 進行一些高級處理,如字符串查找、替換、顯示行號等操作
有些人可能會說有兩種工作模式,其實是把命令模式合併到了普通模式。
3、退出 vi 編輯器
一般在命令模式下退出 vi 編輯器。
退出命令 | 說明 |
---|---|
q | 如果文件未被修改,會直接退回到Shell;否則提示保存文件。 |
q! | 強行退出,不保存修改內容。 |
wq | w 命令保存文件,q 命令退出 vi,合起來就是保存並退出。 |
ZZ | 保存並退出,相當於 wq,但是更加方便 |
w file | 退出之前,在 w 命令後面指定一個文件名,將文件另存爲新文件 file |
vi 編輯文件時,用戶的操作都是基於緩衝區中的副本進行的。如果退出時沒有保存到磁盤,則緩衝區中的內容就會被丟失。
二、命令彙總
- vi 是區分大小寫的,輸入命令時注意不要鎖定大寫
- 爲了不影響文件內容,必須在普通模式(按兩次 Esc 鍵)下移動光標。
- 切換到編輯模式下才能編輯文件
類型 | 命令 | 描述 |
---|---|---|
移動光標 | k | 向上1行;2k 向上2行 |
- | j | 向下1行;2j 向下2行 |
- | 1G | 第1行 |
- | G | 最後一行 |
- | nG :n |
第 n 行 |
- | H nH M L nL |
屏幕頂部 距離屏幕頂部第 n 行的位置 屏幕中間 屏幕底部 距離屏幕底部第 n 行的位置 |
- | 0 或 | | 一行的開頭 |
- | $ | 一行的末尾 |
- | h l |
向左一個字符 向右一個字符 |
- | w b |
下一個單詞 上一個單詞 |
- | n| | 當前行第 n 列 |
編輯文本 | yy nyy |
複製當前行 複製 n 行 |
- | p | 將複製的文本粘貼到光標後面 |
- | dd | 刪除當前行 2dd:連續兩次刪除光標所在的行 |
- | x X |
刪除當前光標後面 / 前面的字符 2x 連續兩次刪除光標後的字符 |
- | d^ | 刪除從當前光標到行首的字符 |
- | d$ D |
刪除從當前光標到行尾的字符 |
- | U u |
撤銷對當前行所做的修改 撤銷上次操作,再次按 ‘u’ 恢復該次操作 |
操作文件 | :f | 顯示文件名、文件總行數、當前行的位置(百分號 % 形式) |
- | :f file1 | 複製爲新文件 file1(要注意保存) |
- | :w file1 | 保存修改到 file1(一般使用 :wq 保存並退出) |
- | :set nu | 顯示行號 |
文本查找 | / ? |
向下查找 向上查找(後面直接跟要查找的字符串即可) |
- | n N |
按相同的方向繼續查找 按相反的方向繼續查找 |
文本替換 | :s/search/replace/g |
search 爲檢索的文本,replace 爲要替換的文本,g 表示全局替換 |
搜索的字符串中可以包含一些有特殊含義的字符,如果希望搜索這些字符本身,需要在前面加反斜槓 (\)。