vi 和 vim 命令是linux中強大的文字編輯器, 由於Linux系統一切皆檔案,而配置一個服務就是在修改其
配置檔案的引數。
vim 編輯器是運維工程師必須掌握的一個工具, 沒有它很多工作都無法完成。
vim 其實是 vi 的升級版
2.
vim三種工作模式
Vim編輯器中設定了三種模式: 命令模式、編輯模式、末行模式,每種模式分別又支援多種不同的命令快捷鍵,大大提高了工作效率,而且使用者在習慣之後也會覺得相當順手。要想高效率地操作文字,就必須先搞清這三種模式的操作區別以及模式之間的切換方法。
命令模式:vim /etc/passwd
# 進行快捷鍵操作
## 游標的跳轉
Shift + g | G // 將游標跳轉到檔案最後一行
gg // 將游標跳轉到檔案的第一行
Ngg // 將游標跳轉到指定的行(N為阿拉伯數字)
Shift + 4 | $ // 將游標跳轉到當前所在行的行末
Shift + 6 | ^ | 0 // 將游標跳轉到當前所在行的行首
## 複製貼上
yy // 複製游標所在行的整行內容
p(小寫p) // 將複製的內容貼上到游標所在行的下一行
P(大寫P) // 將複製的內容貼上到游標所在行的上一行
Nyy|yNy // 將游標所在行整行內容及下面N-1行內容複製 (N為阿拉伯數字)
## 剪下刪除
dd // 將游標所在行一整行內容,剪下(刪除)
Ndd | dNd // 將游標所在行及下面N-1行內容剪下(N為阿拉伯數字)
Shift + d | D // 將游標所在字元及後面整行內容剪下(刪除)
x // 刪除當前游標所在字元
Shift + x | X // 將游標所在當前字元的前一個字元刪除
d + Shift + g | dG // 將游標所在行及後面所有行內容刪除
## 撤銷回滾替換
u // 撤銷上一次操作
Ctrl + r // 恢復上一次撤銷的操作
r // 替換游標當前所在的一個字元
Shift + r | R // 從游標所在字元開始進行替換直到按ESC結束
## 翻頁
Ctrl + b // 向前翻頁
Ctrl + f // 向後翻頁
4.編輯模式
-- INSERT --
像正常的Windows文字編輯器一樣,可以隨意寫入內容
## 從命令模式如何進入編輯模式
i // 在游標所在位置進入編輯模式(輸入內容在游標之前)
I // 將游標跳轉到游標所在行的行首並進入編輯模式(輸入內容在游標之前)
a // 將游標跳轉到游標所在字元的後一個字元並進入編輯模式(輸入內容在游標之前)
A // 將游標跳轉到游標所在行的行末並進入編輯模式(輸入內容在游標之前)
s // 將游標所在字元刪除並進入編輯模式(輸入內容在游標之前)
S // 將游標所在行的整行內容刪除並進入編輯模式
o // 將游標移動到當前所在行的下一行並進入編輯模式
O // 將游標移動到游標所在行的上一行並進入編輯模式
末行模式(底行模式)
# 在編輯器的左下角進行操作
顯示行號、搜尋、替換、儲存、退出 ...
# 進入末行模式的方法
1)在命令模式下,輸入冒號
2)在命令模式下,輸入/ (搜尋想要的內容)
:w // 只儲存但是不退出
:q // 退出但不儲存 (沒有改內容)
:wq // 儲存退出 快捷鍵 Shift + zz | ZZ
:x // 儲存退出 和:wq相等
:q! // 強制退出
:w! // 強制儲存
:wq! // 強制儲存並退出
E37: No write since last change (add ! to override) // 檔案寫入內容,沒有儲存,無法直接退出,除非強制退出
E45: 'readonly' option is set (add ! to override) // 只讀檔案,無法儲存退出,只有root使用者可以強制儲存退出
E212: Unable to open and write files // 檔案無法寫入,沒有寫入許可權
E212: Can't open file for writing // 檔案無法寫入,檔案寫入到一個不存在的目錄中
替換
:%s #要被替換的內容#替換的內容#g
%: 所有行
s: search 搜尋
g: 全域性替換
游標跳轉及命令
## 顯示行號
:set number 簡寫 :set nu
## 取消顯示行號
:set nonumber 簡寫 :set nonu
## 游標跳轉到指定行
:N (N為阿拉伯數字)
## 忽略大小寫
:set ic
## 取消忽略大小寫
:set noic## 自動縮排
:set ai
## 取消自動縮排
:set noai
## 顯示製表符,結束符...
:set list
## 取消
:set nolist
當我們在使用vim編輯檔案時
1)首先會在原始檔目錄下生成一個.swp的臨時檔案
2)如果vim非正常退出的情況下,該臨時檔案一直存在
3)下一次編輯則會提示
E325: ATTENTION
Found a swap file by the name "/etc/sysconfig/network-scripts/.ifcfg-ens33.swp"
owned by: root dated: Tue Apr 9 17:08:59 2024
file name: /etc/sysconfig/network-scripts/ifcfg-ens33
modified: no
user name: root host name: localhost.localdomain
process ID: 7334 (still running)
While opening file "/etc/sysconfig/network-scripts/ifcfg-ens33"
dated: Tue Mar 26 17:08:45 2024
(1) Another program may be editing the same file. If this is the case,
be careful not to end up with two different instances of the same
file when making changes. Quit, or continue with caution.
(2) An edit session for this file crashed.
If this is the case, use ":recover" or "vim -r /etc/sysconfig/network
scripts/ifcfg-ens33"
to recover the changes (see ":help recovery").
If you did this already, delete the swap file "/etc/sysconfig/network
scripts/.ifcfg-ens33.swp"
to avoid this message.
Swap file "/etc/sysconfig/network-scripts/.ifcfg-ens33.swp" already exists!
[O]pen Read-Only, (E)dit anyway, (R)ecover, (Q)uit, (A)bort:
只讀模式開啟 繼續編輯 覆蓋 退出
解決方案:
1)檢視modified狀態 如果是yes,則需要覆蓋原始檔
- vim -r /etc/sysconfig/network-scripts/ifcfg-ens33
- vim /etc/sysconfig/network-scripts/ifcfg-ens3
(R)ecover 按 r
2)刪除.swp臨時檔案即可
rm -f /etc/sysconfig/network-scripts/.ifcfg-ens33.swp
1)檢視modified狀態 如果是no,則需要覆蓋原始檔
(Q)uit 按q退出
2)直接刪除.swp臨時檔案
rm -f /etc/sysconfig/network-scripts/.ifcfg-ens33.swp
檢視模式(命令模式)
vim進入編輯
塊檢視模式 -- VISUAL BLOCK -- Ctrl + v
# 批次註釋
1)Ctrl + v 進入塊檢視模式
2)按鍵盤的上下左右,選中想要的內容
3)如果是在行前加入內容,Shift + i
4)如果是在行後加入內容,Shift + a
5)輸入想要的內容後,返回命令模式(ESC)
行檢視模式 -- VISUAL LINE -- Shit + v
## 編輯檔案直接跳轉到指定行
[root@localhost ~]# vim +N 1.txt // N為阿拉伯數字
[root@localhost ~]# vim +3 1.txt
## 對比檔案不同之處
[root@localhost ~]# vimdiff 1.txt 2.txt
[root@localhost ~]# diff 1.txt 3.txt (另一種對比方式)
3,6c3,6
< http://pxost.baidu.com/index.html
< http://mp3.baiadu.com/index.html
< http://www.baidu.com/3.html
< http://post.baidxu.com/2.html
---
> http:aaaaa//pxost.baidu.com/index.html
> http://mp3xxx.baiadu.com/index.html
> http://www.baxxidu.com/3.html
> http://post.baixxdxu.com/2.html
## 同時編輯多個檔案 (使用Ctrl + ww 進行切換)
[root@localhost ~]# vim -o 1.txt 2.txt // 水平拆分
[root@localhost ~]# vim -O 1.txt 2.txt // 垂直拆分