vi 編輯器筆記,vi編輯器
摘要:
vi從安裝到使用
vi從菜鳥到高手
0、 vim - Vi IMproved, a programmers text editor
分為 VI和VIM,現在流行的發行版裡面VI=VIM
是一個文字編輯器(所有沒有圖片的文本,純文字內容,無視尾碼名)
不能編輯二進位檔案
不能編輯目錄
Debian系安裝vim的時候:
apt install vim
1、目前整個地球上只有一個地方不預設安裝vi
Docker 鏡像Images 的容器
2、查看VI版本
在命令列:"vi --version"
在文本裡面:":version"
3、使用步驟
1.vi filename
vi 後面加檔案名稱 //若存在,則直接開啟編輯,若 不存在,則建立一個檔案
2.進入插入模式
鍵入 "i" 鍵,建議按i鍵
也可鍵入 "s"鍵,但是s鍵是刪除當前游標的字元後,再進入插入模式
3. 插入資料
4. 敲 "Esc"鍵,或者鍵入按鍵組合 "^[" (Ctrl-[)進入命令模式
小訣竅:按按鍵組合的時候,一定要先按前面的輔助鍵不放,然後再按功能鍵
5. 輸入 ":" ,然後鍵入 "x/wq/w/q!/q/qa/qa!"
命令 |
說明 |
狀態 |
x |
儲存並退出 |
|
wq |
儲存並退出 |
|
w |
儲存 |
written |
q! |
強制退出並不儲存 |
|
qa! |
等價於q! |
|
q |
退出 |
|
qa |
等價於q |
|
快捷退出:
^w q // Ctrl+w q
等價於 :q
4、狀態行
當前編輯視窗的最後一行被稱為狀態行
用於顯示檔案名稱
顯示行、列
顯示字元的個數
5、三種模式
插入模式
命令模式
末行模式
插入模式
i |
在當前位置插入資料 |
a |
游標位置後面插入資料 |
A |
本行行尾插入資料 |
o |
游標所在行的下一行插入資料 |
O |
游標所在行的上一行插入資料 |
s |
刪除游標所在位置字元並在游標後插入資料 |
S |
刪除游標所在行並在行首插入資料 |
cw |
刪除當前游標所在單詞並進入插入模式 |
6、在檔案中移動游標
上下左右
行首行尾
^ |
行首,非Null 字元位置,不包含空格 |
0 |
行首,Null 字元處,包含空格 |
$ |
行尾,Null 字元處,包含空格 |
g_ |
行尾,非Null 字元位置,不包含空格 |
文首文尾
螢幕頭部中間底部
H(shift+h) |
頂行 |
M(shift+m) |
中間行 |
L(shift+l) |
底行 |
翻屏
撤銷
u |
撤銷一次操作 |
1 change; before #19 22 seconds ago |
^r |
反撤銷一次操作 |
1 change; after #19 33 seconds ago |
刪除
x |
刪除游標所在處的一個字元 |
dw |
刪除游標所在處的一個單詞 |
D(shift+d) |
刪除游標所在處後面所有的字元 |
dd |
刪除當前行 |
Ndd |
刪除N行 |
dw |
刪除一個單詞 |
複製粘貼
yy |
複製一行 |
p |
粘貼 |
v-w-y |
複製一個單詞 |
v-y |
複製一個字元 |
7、尋找一個字串
鍵入 "/" 進入尋找模式,然後在後面鍵入需要尋找的字串
8、替換
:s/old/new |
在一行內將第一個old替換為new |
:s/old/new/g |
在一行內將所有old替換為new |
:s/old/new/gc |
在一行內將所有old替換為new時每個都確認一下 |
:%s/old/new/g |
在檔案內將所有old替換為new |
:%s/old/new/gc |
在檔案內將所有old替換為new時每個都確認一下 |
小訣竅:在":"模式的時,鍵入 "^p/^n"或"↑/↓"選擇已經執行過的命令
9、簡單設定
在 ":"模式使用
行號 |
set nu(number) set nonu |
唯讀 |
set readonly |
縮排 |
set paste |
10、使用分級
等級 |
生命週期 |
要求 |
備忘 |
第一級 |
能吃飯 |
安裝 啟動 看文檔 知道進入之後的常用操作 上下左右 刪除 複製 粘貼 插入 退出 |
|
第二級 |
有肉吃 |
各種插入你都會 移動游標滿天飛 複製粘貼擒拿手 取消操作你不行 出入自由紅牌樓 |
|
第三級 |
吃香喝辣 |
更好 各種重複 更強 各種跳 更快 到處飛 |
|
第四級 |
有人買單 |
成神 |
|
11、擴充
1.自動提示
^p |
調出自動提示視窗,向上一行一行操作 |
^n |
調出自動提示視窗,向下一行一行操作 |
^m |
確認 |
2.塊操作
使用塊操作在所有行前面加上 ##
^v
-> shift-i
-> ##
-> ^[
3.可視化選擇
4.縮排
5.分屏
^w s / :sp |
分橫屏 |
^w v / :vs |
分豎屏 |
^w q |
退出 |
^w hjkl |
屏之間切換 |
6.建立新檔案
通過vi的命令模式,在當前開啟的檔案裡面,使用":"命令之後,
鍵入 :new file_name 然後即可在當前視窗新建立一個分屏的file_name檔案視窗
此時你可以通過 ^w jklm進行上下切換,也可以自由地在多個檔案中進行複製粘貼
7.其它進階小訣竅
1、對沒有許可權的檔案修改的儲存(使用": w !sudo tee %" ):
your@your:/etc/apt$ vi 1111
插入資料之後,鍵入命令模式i(":")
操作:
": w !sudo tee %"
-> 按 "O" 或 "L" 均可
:r !uname -a // 插入執行命令之後顯示的內容到本文本
:w !sudo tee %
//提權並儲存編輯好來的文檔
執行過程:
Linux your 4.4.0-87-generic #110-Ubuntu SMP Tue Jul 18 12:55:35 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
W13: Warning: File "11111" has been created after editing started
[O]K, (L)oad File:
:w !sudo tee %
Linux your 4.4.0-87-generic #110-Ubuntu SMP Tue Jul 18 12:55:35 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
W13: Warning: File "11111" has been created after editing started
Press ENTER or type command to continue
your@your:/etc/apt$ cat 11111
Linux your 4.4.0-87-generic #110-Ubuntu SMP Tue Jul 18 12:55:35 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
your@your:/etc/apt$
2、鎖屏模式編輯vi
注意:如果鍵盤熟悉度不高,也就是說打字速度低於150,或者錯誤率高於1%,建議不要觸碰此等高度危險操作,不然後果自負
3、其它補充:
1、vi 設定檔和搜尋模式時的高亮顯示小結:
設定檔:
your@your:~$ cd
your@your:~$ ll .vimrc
-rw-rw-r-- 1 your your 31 Aug 7 04:13 .vimrc
.file_name |
"." 在linux裡面代表隱藏檔案 |
通過 ls -a 可以查看隱藏檔案
-a, --all
do not ignore entries starting with .
更改vi顯示,可以有兩種模式:
鍵入符合vi的文法
搜尋模式的高亮顯示:
永久:
1、vi .vimrc
2、set hlsearch
臨時:
1、vi file_name
2、: set hlsearch
永久:
1、vi .vimrc
2、刪除 set hlsearch 或者注釋
說明:.vimrc的設定檔裡面," 雙引號代表注釋
一個文法高亮和開啟行號顯示、搜尋高亮顯示的demo:
2、vi搜尋模式前後說明:
/ |
向後搜尋 |
n:下一個 N:上一個 |
? |
向前搜尋 |
n:上一個 N:下一個 |
向前 <----"N"---- "?"--"n"--- souce ----"N"---"/" -----"n"---> 向後
3、在vi、mysql中執行linux命令:
環境 |
方法 |
說明 |
vi |
:! linux_command |
新建立有視窗執行命令 |
mysql |
\! linux_command 或 system linux_command |
在當前mysql互動介面執行命令 注意:\! 與命令之間有空格,否則會出現: mysql> \!pwd ERROR: Usage: \! shell-command mysql> \! pwd; /home/huhua mysql> |
system (\!) Execute a system shell command.
4、進階功能:使用SSH服務登陸遠程主機:
mysql |
system ssh core@192.168.28.144 |
vi |
! ssh core@192.168.28.144 |
5、vi 插入":"模式執行命令的輸出到vi當前文本裡面
:r !linux_command
包括ping都可以匯入到文本裡面,只是ping的輸出不明文顯示