VI編輯器_終端編輯器
1 簡介
學習vi的目的
- 在工作中, 要對服務器上的 文件進行 簡單 的修改, 可以使用 ssh 登錄到遠程服務器上, 並且使用 vi編輯器 進行簡單的編輯即可
- 需要修改的文件包括
- 源代碼
- 配置文件
- 例如: tomcat服務器的配置文件
- 例如: 網卡信息的配置文件
在沒有圖形界面的環境下, 要編輯文件, vi是最佳選擇
每一個使用linux的程序員,都應該或多或少的學習一些vi的常用命令
vi 和 vim
VI
- vi是
visual interface
的簡稱, 是linux中最經典的文本編輯器 - vi 的核心設計思想
讓程序員的手指始終保持在鍵盤的 核心區域, 就能完成所有的編輯操作 - vi的特點
- 只能是編輯 文本內容, 不能對 字體 段落進行排版
- 不支持鼠標操作
- 沒有菜單
- 只有命令
- vi編輯器在 系統管理 服務器管理 編輯文件時, 其功能永遠不是圖形界面的編輯器能比擬的
VIM
vim 是從vi發展出來的文本編輯器, 支持代碼補全、編譯 及 錯誤跳轉等方便編程的功能提別豐富, 在程序員中被廣泛使用, 被稱爲編輯器之神
2 打開和新建文件
在終端中輸入vim在後面跟上 文件名 即可
vim 文件名
- 如果文件已經存在, 會直接打開該文件
- 如果文件不存在, 保存且退出時 就會新建一個文件
打開文件並且定位行
- 在日常工作中, 有可能會遇到打開一個文件, 並定位到指定行的情況
- 例如: 在開發是, 知道某一行代碼有錯誤, 可以 快速定位 到出錯誤代碼的位置
- 這個時候, 可以使用以下命令打開文件
vim 文件名 +行數
提示: 如果只帶上+ 而不指定行號, 會直接定位到文件末尾
VI三種工作模式
- VI有三種工作模式
- 命令模式
- 打開文件首先進入命令模式, 是使用vi的入口
- 通過 命令 對文件進行常規的編輯操作, 例如 定位 翻頁 複製 粘貼 刪除 … …
- 在其他圖形編輯器下, 通過 快捷鍵 或者 鼠標 實現的操作, 都在 命令模式 下實現
- 任何時候,不管用戶處於何種模式,按下Esc鍵即可進入命令模式
- 末行模式 – 執行 保存 退出等操作
- 要退出 vi 返回到控制檯, 需要在莫行模式下輸入命令
- 末行模式 是 vi 的出口
- 在命令模式下,用戶按
:
鍵即可進入末行模式下,末行命令執行完後,vi 自動回到命令模式
- 編輯模式 – 正常的編輯文字
- 在命令模式下輸入插入命令i、附加命令a、打開命令o、修改命令c、取代命令r或替換命令s都可以進入文本輸入模式。
末行模式命令
命令 | 英文 | 功能 |
---|---|---|
w | write | 保存 |
q | quit | 退出,如果沒有保存,不允許退出 |
q! | quit | 強行退出,不保存退出 |
wq | write & quit | 保存且退出 |
x | 保存並退出 | |
ZZ | 保存並退出(命令模式) |
3 常用命令
學習提示
- vi命令較多, 不要期望一下子全部都記住, 個別命令忘記了, 只是會影響編輯速度而已
. 在使用vi命令時, 注意 關閉中文輸入法
移動
要熟練使用vi, 首先應該學會怎麼在 命令模式下 快速移動光標
編輯操作命令 能夠和移動命令一起使用
1) 上 下 左 右
命令 | 功能 | 手指 |
---|---|---|
h | 向左 | 食指 |
j | 向下 | 食指 |
k | 向上 | 中指 |
l | 向右 | 無名指 |
2) 行內移動
命令 | 英文 | 功能 |
---|---|---|
w | word | 向後移動一個單詞 |
b | back | 向前移動一個單詞 |
0 | 行首 | |
^ | 行首, 第一個不是空白字符的位置 | |
$ | 行尾 |
3) 行數移動
命令 | 英文 | 功能 |
---|---|---|
gg | go | 文件頂部 |
G | go | 文件末尾 |
數字gg | go | 移動到 數字 對應行數 |
數字G | go | 移動到 數字 對應行數 |
: 數字 | 移動到數字對應的 行數 |
4) 屏幕移動
命令 | 英文 | 功能 |
---|---|---|
Ctrl + b | back | 向上翻頁 |
Ctrl + f | forward | 向下翻頁 |
H | Head | 屏幕頂部 |
M | Middle | 屏幕中間 |
L | Low | 屏幕底部 |
移動(程序)
1) 段落移動
-
vim中使用 空行 來區分段落
-
程序開發時, 通常 一段功能相關的代碼會寫在一起 – 之間沒有空行
命令 功能 { 上一段 } 下一段
2) 括號切換
-
在程序世界中, **()、[]、{}**使用率很高, 而且 都是成對出現的.
命令 功能 % 括號匹配及切換
選中文本(可視模式)
- 學習 複製 命令前, 應該先學會 怎麼樣選中 要複製的代碼
- 在 vi 中要選擇文本, 需要顯示 visual 命令切換到 可視模式
- vi 中提供了 三種 可視模式, 可以方便程序員的選擇 選中文本的方式
- 按 ESC 可以放棄選中, 返回到 命令模式
命令 | 模式 | 功能 |
---|---|---|
v | 可視模式 | 從光標位置開始按照正常模式選擇文本 |
V | 可視化模式 | 選中光標經過的完整行 |
Ctrl + v | 可視塊模式 | 垂直方向選中文本 |
- 可視模式下, 可以和 移動命令 連用, 例如 ggVG 能夠 選中所有的內容
撤銷和恢復撤銷(保命指令)
在學習編輯命令之前,先要知道怎樣撤銷之前一次 錯誤的 編輯操作
命令 | 英文 | 功能 |
---|---|---|
u | undo | 撤銷上次的命令(ctrl + z) |
Ctrl + r | uredo | 恢復撤銷的命令 |
刪除文本
命令 | 英文 | 功能 |
---|---|---|
x | cut | 刪除光標所在的字符,或者選中的文字 |
d(移動命令) | delete | 刪除移動命令對應的內容 |
dd | delete | 刪除光標所在行, 可以ndd刪除多行 |
D | delete | 刪除至行尾 |
提示: 如果使用 可視模式 已經選中了一段文本, 那麼無論使用 d 還是 x, 都可以刪除選中文本
刪除命令可以和移動命令連用, 以下是常見的組合命令:
命令 | 作用 |
---|---|
dw | 從光標位置刪除到單詞末尾 |
d0 | 從光標位置刪除到一行的起始位置 |
d} | 從光標位置刪除到段落末尾 |
ndd | 從光標位置向下連續刪除 n 行 |
修改文本
如果你希望對字符、單詞或行進行修改,可以使用下面的命令:
命令 | 描述 |
---|---|
cc | 刪除當前行,並進入編輯模式。 |
cw | 刪除當前字(單詞),並進入編輯模式。 |
r | 替換當前光標下的字符。 |
R | 從當前光標開始替換字符,按 Esc 鍵退出。 |
s | 用輸入的字符替換當前字符,並進入編輯模式。 |
S | 用輸入的文本替換當前行,並進入編輯模式。 |
複製和剪切
- vi 中提供有一個 被複制文本的緩衝區
- 複製 命令會將選中的文字保存在緩衝區
- 刪除 命令刪除的文字會被保存在緩衝區
- 在需要的位置, 使用 粘貼 命令可以將緩衝對的文字插入到光標所在的位置
命令 | 英文 | 功能 |
---|---|---|
y(複製命令) | copy | 複製 |
yy | copy | 複製一行,可以nyy複製多行 |
d(剪切命令) | delete | 剪切 |
dd(剪切) | delete | 剪切一行, 可以 ndd 剪切n行 |
p | paste | 粘貼 |
提示:
- 命令 d 、x 類似於圖形界面的 剪切操作 – ctrl + x
- 命令 y 類似於 圖形界面的 複製操作 – Ctrl + C
- 命令 p 類似於圖形界面的 粘貼操作 – Ctrl + v
- vi中的文本緩衝區只有一個,如果後續做過 複製、剪切操作, 之前緩衝區中的內容會被替換.
注意
- vi中的 文本緩衝區 和 系統的 剪切板 不是同一個
- 所以在其他軟件中使用
Ctrl + C
複製的內容, 不能再vi
中通過p
命令粘貼 - 可以在 編輯模式 下使用 鼠標右鍵粘貼
替換
命令 | 英文 | 功能 | 工作模式 |
---|---|---|---|
r | replace | 替換當前字符 | 命令模式 |
R | replace | 替換當前行光標後的字符 | 替換模式 |
R
命令可以進入 替換模式, 替換完成後, 按下ESC
, 按下ESC
可以回到 命令模式- 替換命令 的作用就是不用進入 編輯模式, 對文件進行 輕量級的修改
查找
常規查找
命令 | 功能 |
---|---|
/str | 查找str |
-
查找到指定內容之後, 使用
Next
查找下一個出現的位置n
: 查找下一個N
: 查找上一個
-
如果不想看到高亮顯示, 可以隨便查找一個文件中不存在的內容即可
-
單詞快速匹配
命令 | 功能 |
---|---|
* | 向後查找當前光標所在單詞 |
# | 向前查找當前光標所在單詞 |
- 在開發中, 通過單詞快速匹配, 可以快速看到這個單詞在其他位置使用過
查找並替換
- 在
vi
中查找和替換命令需要在 末行模式 下執行 - 記憶命令格式
:%s///g
- 全局替換
-
一次向 替換文件中的 所有出現的舊文本
-
命令格式如下
:%s/舊文本/新文本/g
- 可視區域替換
- 先選中 要替換文字的 範圍
- 命令格式如下
:s/舊文本/新文本/g
- 確認替換
confirm 確認
-
如果把末尾的
g
改成gc
在替換的時候, 會有提示! 推薦使用 -
命令格式如下
:%s/舊文本/新文本/gc
y
-yes
替換n
-no
不替換a
-all
替換所有q
-quit
退出替換l
-last
最後一個, 並把光標移動到行首^E
向下滾屏^Y
向上滾屏
插入命令
- 在 vi 中除了常用
i
進入編輯模式 外, 還提供了一下命令同樣可以進入編輯模式
命令 | 英文 | 功能 | 常用 |
---|---|---|---|
i | insert | 在當前字符前插入文本 | 常用 |
I | insert | 在行首插入文本 | 較常用 |
a | append | 在當前字符後添加文本 | |
A | append | 在行末添加文本 | 較常用 |
o | 在當前行後面插入一空行 | 常用 | |
O | 在當前行前面插入一空行 | 常用 |
高級命令
下面的一些命令雖然看起來有些古怪,但是會讓你的工作更有效率,如果你是 vi 重度用戶,就瞭解一下吧。
命令 | 說明 |
---|---|
J | 將當前行和下一行連接爲一行 |
<< | 將當前行左移一個單位(一個縮進寬度) |
>> | 將當前行右移一個單位(一個縮進寬度) |
~ | 改變當前字符的大小寫 |
^G | Ctrl+G組合鍵可以顯示當前文件名和狀態 |
U | 撤銷對當前行所做的修改 |
u | 撤銷上次操作,再次按 ‘u’ 恢復該次操作 |
:f | 以百分號(%)的形式顯示當前光標在文件中的位置、文件名和文件的總行數 |
:f filename | 將文件重命名爲 filename |
:w filename | 保存修改到 filename |
:e filename | 打開另一個文件名爲 filename 的文件 |
:cd dirname | 改變當前工作目錄到 dirname |
:e # | 在兩個打開的文件之間進行切換 |
:n | 如果用 vi 打開了多個文件,可以使用 :n 切換到下一個文件 |
:p | 如果用 vi 打開了多個文件,可以使用 :n 切換到上一個文件 |
:N | 如果用 vi 打開了多個文件,可以使用 :n 切換到上一個文件 |
:r file | 讀取文件並在當前行的後邊插入 |
:nr file | 讀取文件並在第 n 行後邊插入 |
set 命令
set 命令可以對 vi 編輯器進行一些設置。使用 set 命令需要進入命令模式。
命令 | 說明 |
---|---|
:set ic | 搜索時忽略大小寫。 |
:set ai | 設置自動縮進(自動對齊)。 |
:set noai | 取消自動縮進(自動對齊)。 |
:set nu | 顯示行號。 |
:set sw | 設置縮進的空格數,例如,將縮進空格數設置爲4::set sw=4。 |
:set ws | 循環搜索:如果直到文件末尾也沒有查找到指定字符,那麼會回到開頭繼續查找。 |
:set wm | 設置自動換行,例如,設置距離邊際2個字符時換行::set wm=2 。 |
:set ro | 將文件類型改爲只讀。 |
:set term | 輸出終端類型。 |
:set bf | 忽略輸入的控制字符,如 BEL(響鈴)、BS(退格)、CR(回車)等。 |