引言
大數據開發工作中,周圍的同事不是用 VIM 就是 Emacs,你要是用 UltraEdit 或 notepad++ 都不好意思跟人家打招呼...什么插件呀、語法高亮呀、拼寫檢查呀,能給它開的都給它開着,就是一個字:VIM 酷!你說這么牛X的一東西,怎么着學會也得小半年吧。告訴你,半年!?入門都遠着呢!能學會移動光標就不錯了,你還別說耗不起,就這還是左右移動!!!
VIM 介紹
vim/vi 是 Unix / Linux 上最常用的文本編輯器而且功能非常強大。
特點:只有命令,沒有菜單
VIM 的三種模式
基本上 vi/vim 共分為三種模式,分別是命令模式(Command mode),插入模式(Insert mode)和編輯模式(Last line mode)。
命令模式:
用戶剛剛啟動 vi/vim,便進入了命令模式。
此狀態下敲擊鍵盤動作會被 Vim 識別為命令,而非輸入字符。
以下是常用的幾個命令:
-
i 切換到輸入模式,以輸入字符
-
x 刪除當前光標所在處的字符
-
: 切換到編輯模式,以在最底一行輸入命令
若想要編輯文本:啟動 Vim,進入了命令模式后,按下i(或a/o)鍵,切換到插入模式
命令模式只有一些最基本的命令,因此仍要編輯模式輸入更多命令。
插入模式
在命令模式下按下 i (或a/o)就進入了插入模式
在插入模式中,可以使用以下按鍵:
-
字符按鍵以及Shift組合,輸入字符
-
ENTER,回車鍵,換行
-
BACK SPACE,退格鍵,刪除光標前一個字符
-
DEL,刪除鍵,刪除光標后一個字符
-
方向鍵,在文本中移動光標
-
HOME/END,移動光標到行首/行尾
-
Page Up/Page Down,上/下翻頁
I -
insert,切換光標為輸入/替換模式,光標將變成豎線/下划線
-
ESC,退出輸入模式,切換到命令模式
編輯模式
在命令模式下按下:(英文冒號:)就進入了編輯模式。
編輯模式可以輸入單個或多個字符的命令(可用的命令非常多)
在編輯模式中,基本的命令有(已經省略了冒號):
-
q 退出程序
-
w 保存文件
按 ESC 鍵可隨時退出編輯模式
VIM 常用命令
插入命令
命令 | 作用 |
---|---|
a | 在光標后附加文本 |
A(shift + a) | 在本行行末附加文本 行尾 |
i | 在光標前插入文本 |
I(shift+i) | 在本行開始插入文本 行首 |
o | 在光標下插入新行 |
O(shift+o) | 在光標上插入新行 |
定位命令
命令 | 作用 |
---|---|
:set nu | 設置行號 |
:set nonu | 取消行號 |
gg G | 到第一行 到最后一行 |
nG | 到第n行 |
:n | 到第n行 |
保存和退出命令
命令 | 作用 |
---|---|
:w | 保存修改 |
:w new_filename | 另存為指定文件 |
:w >> a.txt | 內容追加到a.txt文件中 文件需存在 |
:wq | 保存修改並退出 |
shift+zz(ZZ) | 快捷鍵,保存修改並退出 |
:q! | 不保存修改退出 |
:wq! | 保存修改並退出(文件所有者可忽略文件的只讀屬性) |
注意事項:
不保存並退出:
有修改,但是修改后的內容是不保存的
有突發情況,導致窗口退出。修改文件之后,直接刪除同名的.swp文件
刪除命令
命令 | 作用 |
---|---|
x | 刪除光標所在處字符 nx 刪除光標所在處后n個字符 |
dd | 刪除光標所在行,ndd刪除n行 |
:n1,n2d | 刪除指定范圍的行(eg :1,3d 刪除了123這三行) |
dG | 刪除光標所在行到末尾的內容 |
D | 刪除從光標所在處到行尾 |
復制和剪切命令
命令 | 作用 |
---|---|
yy、Y | 復制當前行 |
nyy、nY | 復制當前行以下n行 |
dd | 剪切當前行 |
ndd | 剪切當前行以下n行 |
p、P | 粘貼在當前光標所在行下 或行上 |
替換和取消命令
命令 | 作用 |
---|---|
r | 取代光標所在處字符 |
R(shift + r) | 從光標所在處開始替換字符,按Esc結束 |
u | undo,取消上一步操作 |
ctrl+r | redo,返回到undo之前 |
搜索和替換命令
命令 | 作用 |
---|---|
/string | 向后搜索指定字符串 搜索時忽略大小寫 :set ic |
?string | 向前搜索指定字符串 |
n | 搜索字符串的下一個出現位置,與搜索順序相同 |
N(Shift + n) | 搜索字符串的上一個出現位置,與搜索順序相反 |
:%s/old/new/g | 全文替換指定字符串 (% 指全文,s 指開始,g 指全局替換) |
:n1,n2s/old/new/g | 在一定范圍內替換指定字符串 |
起始行,終止行 s/ 要替換的字符串/替換的新的字符串 /g c 詢問確認
eg: :%s/ftp/yang/g 全局替換,把ftp替換為yang
eg: :41,44/yang/lee/c 從41行到44行,把yang替換為lee,詢問是否替換
eg: :41,44/yang/lee/g 同上,不詢問,直接替換
eg: :%s//root//ROOT/g 把/root替換為/ROOT
eg: :%s#/bin/bash#/bin/ksh/g 把/bin/bash全部替換為/bin/ksh
使用替換命令來添加刪除注釋
:% s/^/#/g 來在全部內容的行首添加 # 號注釋
:1,10 s/^/#/g 在1~10 行首添加 # 號注釋
vi里面怎么查命令??
:!which cp
vi里面怎么導入命令的結果?
:r !which cp
可視化模式
- v (可視字符模式)
- V(shift+v) (可視行模式,選擇多行操作)
- ctrl+v (可視塊模式或列模式,用於操作列)
- I 或者 O (進入插入模式)