開始之前:本來打算傳張圖片上來的,結果串不上來 ,我說我其實是會畫圖的,你們信麼。
vim 是一款強大的屏幕文本編輯器,即一次讀取所有的文本內容,並顯示在屏幕上;與之對應的是行編輯器,每次僅讀取一行內容比如說ed。
vim的選項:
雖然標題是快捷鍵,但是我還是把選項也寫上吧。
vim file :沒有選項的選項,直接使用vim打開文件
擴展: vim file1 file2 file3 :使用vim 同時打開多個文件 ,但是隻能顯示一個,但是可以通過命令進行文件之間的切換。
:next 下一個
:prev 前一個
:first 第一個
:last 最後一個
:wall 保存所有
:qall 退出所有
:wqall 保存退出所有
.
行跳轉選項:
即在打開vim時決定光標停留的行,行跳轉可以使用 數字或模式實現
+# : 打開文件時光標跳轉到 # 行的行首
vim +14 /etc/passwd
+/patter :打開文件時光標停留在第一次匹配到該字符串的地方.
vim +/root /etc/passwd
.
vim -m file : 以只讀的方式打開文件
.
vim -b file :以二進制的方式打開文件
.
vim -d file1 file2 : 以分屏的方式 打開兩個文件.高亮顯示差別.
.
vim -o/-O file1 file2 : 代開多個文件 ,但將窗口分割爲多個小窗口
-o 水平分割
-O 垂直分割
.
vim -e file :打開文件時進入擴展的命令模式
等價命令ex
vim快捷鍵
個人理解: vim 進入後的界面不同於windows的記事本可以直接編輯,vim編輯器進入之後只能使用命令。包括ed編輯器,也不是直接編輯的。
而且編輯模式命令與擴展命令模式命令,其實都是命令的一種,只是有的命令動作比較長,在動作中可能需要用戶的輸入。也就是inster狀態。有的命令帶有擴展選項,:。
插入操作
i:在當前的光標位置之前插入字符,esc鍵結束插入,
# i,esc :爲1個完整的動作,重複執行動作#次,當#不指定時,默認爲1 次。
a:光標向後移動一個字符,然後在當前光標前插入。即在當前光標位置之後插入字符。esc鍵結束插入。
# a,esc :爲1個完整的動作,重複執行動作#次,當#不指定時,默認爲1 次。
l:在當前行的行首插入字符 ,esc鍵結束插入,
#I,esc :爲一套完整的動作,重複執行動作# 次,當# 不指定時,
A:在當前行的行尾插入一個字符,esc鍵結束插入
#A,esc :爲一套完整的動作,重複執行動作# 次,當# 不指定時,默認爲1次 。
o:在當前行的下方插入新的空白行,
#o:無需esc 鍵結束,重複執行o動作 #次,當#不指定時,默認爲1
O:在當前行的上方插入新的空白行。
#O:無需esc 鍵結束,重複執行O動作# 次,當# 不指定時,默認爲1 。
c:修改模式,可實現範圍修改,即清空指定範圍,然後進入插入模式。
窗口操作
ZZ :保存退出
ZQ :退出不保存
單文件窗口分割:
ctrl+w, s :水平分割
ctrl+w, v :垂直分割
ctrl+w ,q:取消相鄰窗口
ctrl+w ,o:取消全部窗口
: wqall : 退出
跳轉操作
字間跳轉
. | . | . |
---|---|---|
. | 上k | . |
左h | . | 右l |
. | 下 j | . |
詞間跳轉:
. | . |
---|---|
當前或上一個詞首 b | 下一個詞首 w |
. | 當前或下一個詞尾 e |
當前頁跳轉:
. | . | . |
---|---|---|
頁首:H | 頁中:M | 頁底: L |
行內跳轉:
. | . |
---|---|
^ :非空白字符的行首 | . |
0:真正的行首 | 行尾 :$ |
段落跳轉:
. | . |
---|---|
)跳至下一句 .爲分割 | (跳至上一句 .爲分割 |
} 跳至下一句 空行爲分割 | { 跳至上一句 空行爲分割 |
翻頁操作:
. | . |
---|---|
ctrl + b 向上全屏 | ctrl + u 向上半屏 |
ctrl + f 向下全屏 | ctrl + d 向下半屏 |
G 行號跳轉
. |
---|
gg 跳至首行 |
G 跳到行號爲#的行 |
gg 跳到行號爲#的行 |
G 跳到尾行 |
字符編輯
x :剪切光標處的字符,光標位置不改變,剪切位置後的字符向前補齊
\#x 重複執行x ,#次
~ :裝換字符的大小寫,轉換後光標位置向後移動一位。
\#~ 重複執行~ , #次
r/R :替換/連續替換光標處的字符。連續替換時每替換完成一個單詞,光標向後移動1位。
\#r 重複執行r ,#次,r動作類似於宏。r替換開始,至輸入字符,替換完成,爲一個r動作。所以#r會替換#個相同的字符。
d :刪除操作,可結合光標跳轉字符功能,實現範圍刪除。
格式:<start>d<end>:從指定的開始位置爲開始,至指定的位置爲結束,對期間的內容[start-end]執行d操作即刪除。其中start的內容可以默認,即使用光標位置。
1ggdG :刪除全部內容
d50gg :刪除當前光標位置至50行的所有內容
0d$ :刪除整行內容
y :複製操作,可結合光標字符跳轉功能,實現範圍刪除。
p :粘貼操作,
p:如果粘貼的爲整行則在當前行的下面粘貼,如果是字符則在光標後粘貼。
P:如果粘貼的爲整行則在當前行的上面粘貼,如果是字符則在光標前粘貼。
J :刪除當前行後的換行符
可視化操作:
. |
---|
v:面向字符 |
V:面向行 |
c+v:面向塊 |
撤銷
. |
---|
u :撤銷最近一次更改 |
#u :撤銷之前#次更改 |
U :撤銷光標移動至該行後的所有更改 |
ctrl + r 恢復最近1次撤銷 |
重複操作
. |
---|
. 重複之前的操作 |
. 重複之前的操作#次 |
擴展命令模式
使用:進入命令擴展模式,使用對應命令進行操作。
個人理解:vim中並無模式,插入模式,命令擴展模式,都不過是執行的命令過程中的一部分,只是有些命令動作較多。擴展命令模式是一條帶有參數的命令。
:q 退出
:w 保存
:x 保存退出
:r 讀取文件的內容或命令的輸出,類似於重定向
:! 在命令之後表示強制執行該命令 ,在外部(對於vim)命令之前表示執行該命令
:!ls
:r!ls
查找:
:/PATTERN : 從當前光標所在處向文件尾部查找
:?PATTERN : 從當前光標所在處向文件首部查找
n: 與命令同方向
N:與命令反方向
地址定界:
格式 :start_pos,end_pos
數字表示法:
# : 單一行號,只表示該行號的行
# ,# :使用數字表示具體的行號。表示一段範圍。
# ,+#:從左側#表示的行號爲開始,+#表示增量,即#+#行。
模式匹配法:
/pat1/,/pat2/ :從第一次被pat1匹配到的行開始,一直到第一次被pat2匹配到的行結束,
特殊表示:
. 表示當前的行
表示最後一行 -1 表示最後一行的上一行
% 表示全文
使用方法:
地址定界中的表示方法可以混合使用。在地址定界後跟隨一個動作,如d(刪除),y(複製),w file(將定界內容保存到文件),r file(在指定的位置插入指定文件中的內容)
替換:
:s 格式:地址定界 s/要查找的內容/替換爲的內容/修飾符
可以不指定地址定界,在不指定地址定界時,默認爲光標所在的行。
要查找的內容:可使用模式,但是基本的正則表達式。
替換爲的內容:不能使用模式,但是可以使用\1,\2…等後項引用,還可以使用&引用前面查找時找到的整個內容
s前面可以指定範圍 %全文
修飾符
i: 忽略大小寫
g: 全局替換,默認情況下,每一行只替換第一次出現
gc: 全局替換,每次替換前詢問
查找替換中的分隔符/可替換爲其他字符
s@/etc@/var@g
s#/boot#/#!
& :表示之前搜索到的文本
%s/root/&er/g
改變大小寫
gu :變爲小寫
gU :變爲大寫
vim屬性更改:
更改的屬性僅對當前使用的vim有效,如果長期有效許定義在配置文件中
:set nu 增加行號 set nonu 取消行號
:set sm 括號成對高亮
:set ai 自動縮進
:syntex on /off 語法高亮
:set ic 忽略字符的大小寫。
:set fileformat=dos 啓用windows格式:
:set fileformat=unix 啓用unix格式: