編輯器之神-vim,在Linux下編輯代碼的vim的使用,基本上包括了vim的常用各種命令,vi的三種模式,編輯保存,複製粘貼,查找替換,移動跳轉,撤銷反撤銷等等 ...
vim即vi的升級版;在linux中,vi是vim的軟鏈接,我們敲vi和vim出來的都是vim;
純手打,如有錯誤,敬請指出。
vi的三種模式及簡單使用
vi三種模式
命令模式(預設):是文件的入口,可以實現文件的定位,複製,翻頁等;
末行模式:是文件的出口,w write,q quit,wq 寫入並保存等;
編輯模式:正常的文字編輯;
三種模式的轉換
命令模式—>i,a,o,I,A,O—>編輯模式—>esc—>命令模式
命令模式—>”:”—>末行模式—>esc—>命令模式
vi的簡單使用
vi 已有文件:打開已存在的文件;
vi 不存在文件:新建文件;
vi 文件:打開文件,游標在行首;
vi 文件 +:打開文件,文件在末尾;
vi 文件 +行數:打開文件,並且指定行數;
例如:
vi hello.py # 打開hello文件 vi hello.py +20 # 打開hello文件並且把游標跳到第20行 vi hello.py + # 打開hello文件並且游標跳到最後一行
異常處理之交換文件
如果我們在vi編輯文件時,忽然關閉終端,或者異常卡出,就會出現交換文件,用ls -al可查看,存在.swp結尾的交換文件;
出現交換文件後,再一次vi 原來的文件時,就會報錯,我們按照提示D刪除交換文件即可;
命令模式轉編輯模式
命令模式下:
i | 插入游標前一個字元 |
I | 插入行首 |
a | 插入游標後一個字元 |
A | 插入行末 |
o | 向下新開一行,插入行首 |
O | 向上新開一行,插入行首 |
保存退出編輯
在命令模式下保存,shift+z+z
末行模式下:
w | 保存 |
q | 退出 |
wq | 保存退出 |
x | 保存退出 |
q! | 不保存強制退出 |
vim移動,跳轉
上下左右移動
命令模式:
k | 上移 |
j | 下移 |
h | 左移 |
l | 右移 |
hjkl控制上下作用
行內移動
命令模式下:
0:到達行首
^:到達行首第一個不是空白字元的位置
$:到達行尾
w:word,往後移一個word
b:back,往前移一個word
行數移動
命令模式下:
gg:快速移動到文件的第一行
G:快速移動到文件最後一行
num gg:快速跳轉到指定行
num G:快速跳轉到指定行
末行模式下:
:num 回車:在末行模式下跳轉到指定行
其中用的最多的還是num G
上下翻頁
Ctrl+b:向上翻一頁
Ctrl+f:向下翻一頁
Ctr-d: 向下翻半屏
Ctr-u: 向上翻半屏
H:跳轉到屏幕頂部
M:跳轉到屏幕中間
L:跳轉到屏幕底部
註意HML跳轉的是屏幕,不是文件
其他跳轉
{: 按段移動,上移
}: 按段移動,下移
%:移到括弧的左右邊
複製,粘貼,刪除(剪切)
複製粘貼
命令模式下:
y:和移動命令一起使用,複製
yy:複製一行,支持nyy複製多行
p 粘貼
刪除(剪切)
命令模式下:
x: 刪除游標後一個字元,相當於 Del
X: 刪除游標前一個字元,相當於 Backspace
dd: 剪切游標所在行,n dd 刪除指定的行數
d:和移動命令配合使用,刪除移動命令對應的內容;
D: 刪除游標後本行所有內容,包含游標所在字元;
d0: 刪除游標前本行所有內容,不包含游標所在字元;
dw: 將游標移到單詞首字母,再dw,可刪除單詞
練習:
5x:刪除游標及往後五個字元 v+%+x:刪除選中的括弧內的內容 d+6+G:把游標所在行和第六行之間的內容全部刪除,所在行能大於6也能小於6 y+{ +n+G+p:複製從游標往後的一段內容,並跳到指定行進行粘貼 yy空行+5+p:複製空行,並且粘貼5個空行
複製刪除總結和擴展
d和x在vi中看起來是刪除操作,但本質上其實是剪切操作,剪切後會將內容存放在和剪切板功能相同的緩衝區;
同樣,複製其實也是將內容放在緩衝區;
註意,在其他圖形界面複製的內容在vi中不能直接通過p進行粘貼,需要右鍵粘貼,因為剪切板和緩衝區不是同一個;
可視模式(選中文本)
在命令模式下,
v,可視模式,從游標選中位置,開始向上向下選中文本,選中的位置,是原來游標的位置;
V,可視行模式,從游標選中行開始,向上或向下選中游標所經過的每一行;
Ctrl+v,可視塊模式,垂直方向選中文本,和sublime的ctrl很像,具體可自己實驗;
可視模式可以配合 d, y, >>, << 實現對文本塊的刪除,複製,左右移動
可視模式還可以和段落移動等結合使用,例如:
V+G,表示選中從當前行一直到末行
V+gg,表示選中從當前行到文件首行,
V+{,
V+},
v+%,括弧等等。
替換和查找
小幅替換
命令模式下:
r:將游標下的字元進行替換;例如,r+H:將那個游標下的字元替換成H
R: 替換當前行游標後的字元;例如,hello單詞首字母,R+world:將hello單詞替換成world;
全局替換
末行模式下,
固定格式:%s///g
格式:%s/舊文本/新文本/g
例如:
把python全部替換成world:%s/python/world/g
將第一行至第10行之間的abc替換成123:1, 10s/abc/123/g
可視區域替換
先用可視模式選中要替換的範圍,再進入末行模式進行替換
格式:s/舊文本/新文本/g
V+向下移動游標到第11行+:進入末行模式+s/world/python/g:將當前行到第11行的所有world替換成python
確認替換
格式:%s/舊文本/新文本/gc
會查找出全部的舊文本,然後逐個的讓你來確認是否替換,替換y,不替換n,替換所有a,不想替換了就q
查找
命令模式下:
/+str:查找指定字元串
n:查找下一個被高亮的字元串
N:查找上一個被高亮的字元串
單詞快速匹配:
*:向後查找當前游標所在單詞
#:向前查找當前游標所在單詞
不想高亮,可以查找一個不存在的單詞即可
其他必知必會
撤銷反撤銷
命令模式下:
u 撤銷
ctl+r 反撤銷
文本行移動(縮排)
命令模式下:
>>: 文本行右移
<<: 文本行左移
練習:
V+向下三行+>:將選中的三行向右縮進四個空格,同理,左縮進也是
V+向下三行+>+.+.:將選中的三行向右縮進四個空格後,再右移四格,再右移四格,即一個點就重覆執行一次
重覆執行
命令模式下:
.: 重覆上一次操作的命令
標記
當我們在開發時,如果有某一行需要稍後再來處理,可以先對它進行標記,後面需要處理時再進行快速跳轉
標記:m+x (x屬於[a-z][A-Z])
跳轉:'+x
可以分別標記多行為多個別名,再跳轉;
如果給多行用了同一個別名,那麼別名指向的是最新的一行
vim里執行 shell 下命令
末行模式里輸入!,後面跟命令
末行命令擴展
e .:瀏覽當前目錄下的所有文件
e 文件名:切換編輯文件
n 文件名:新建並編輯文件
w 文件名:如果原來沒有文件,就創建新文件並將源文件的內容寫入新文件,但編輯的還是源文件
切換文件之前,必須保存原來編寫的文件
末行模式下w命令的作用講解:
在實際開發時,用來起階段性備份的作用,和git的作用類似
分屏命令
末行模式下,
sp:橫向分屏
vsp:縱向分屏
切換視窗:Ctrl+w,w
互換視窗:r
關閉當前視窗:c,但是不能關閉最後一個視窗
退出當前視窗:q,能退出最後一個視窗
關閉其他視窗:o
練習
1.連續打出十個*
命令模式,10+i+*+esc;後面也可以加.,重覆執行;
8+i+print("hello world")+enter+esc:重覆8行代碼;
但建議在進入編輯模式之前,不要按數字,不然按了數字編輯了又esc了,就發現辛苦敲得代碼粘貼了很多。
2.給多行代碼添加註釋
命令模式,將游標移動到要註釋的第一行,^移動到行首,
Ctrl+v進入可視塊模式,向下選中多行要註釋的代碼,
I進入編輯模式,在行首添加#,esc。