Vim
Vim 是從 vi 發展出來的文字編輯器,由於此編輯器提供了許多與 programing 相關的功能,因此受到廣大程式設計師喜愛。
Vim 具有數種不同的模式,以下列幾個較為常用的出來介紹。
Notice:關於 Vim 預設環境的設定,可以透過家目錄下的
.vimrc
設定,網路上有許多很完整的.vimrc
檔可以下載。
一般模式
一般模式是進入 Vim 的預設模式,在這個模式下不能針對內容進行編輯,只能透過按鍵移動游標選擇行數,並針對對應的行數 刪除字元
、刪除整行
,或者是複製及貼上。
基本範例
# 刪除游標所在的該行
dd
# 刪除一個字元
x
# 連續向後刪除 10 個字元
10x
# 將游標移動到該行的前面
^
# 將游標移動到該行的末端
$
# 自動對齊
==
# 移動到下一個單字的第一個字元
w
# 移動到前一個單字的第一個字元
b
# 移動到下一個單字的最後一個字元(無視符號)
E
# 還原上一步
u
# 游標移動到文件最上方
gg
# 游標移動到文件最下方
G
# 游標移動到特定行數(第 3 行)
3G
# 全選( v 為切換成選擇模式)
ggvG
# 複製游標該行
yy
# 貼上
p
# 往後尋找該行符合的字母
f [字母]
# 往前尋找該行符合的字母
F [字母]
編輯模式
從 一般模式 輸入「i、I、a、A、o、O」等任一字母就可以進入編輯模式,該模式就如同其它編輯器相同,可以自由的編輯內容。
基本範例
# auto-complete
ctrl + p
指令模式
從 一般模式 輸入「:/?」三種任一符號,就可以進行相對的指令操作。
基本範例
# 寫入(儲存檔案)
:w
# 另存新檔
:w filename
# 離開 Vim
:q
# 不儲存強制離開
:q!
# paste 模式,此模式可以在使用外部貼上時(ctrl + v),按照來源的格式內容貼上。
:set paste
# 消除文字區塊的 Highlight
:noh
# 顯示行號
:set nu
# 關閉行號
:set nu!
# 範圍縮排(第 3 到第 5 行往左縮一格,往右可以使用 > 符號)
:3,5<
# 將 tab 轉換成 space
:retab
# 將 Vim 的內部編碼換成 utf8
:set encoding=utf8
# 設定一個 tab 等於四個 space 的長度
:set tabstop=4
# 開啟之後,使用 tab 鍵時會用空白取代(長度由 tabstop 決定)
:set expandtab
# 開啟檔案
:e filename
# 搜尋特定字串,支援正規表示式(Regular Expression)
/[字串]
取代字串
Vim 的取代語法格式為 :[範圍]s/[比對字串]/[取代字串]/[g,c,i]
,其中最前端的 s
代表取代。比對字串支援正規表示式(Regular Expression)。
範圍說明:
名稱 | 功用 |
---|---|
% | 代表全部範圍 |
$ | 代表最後一行 |
1,50s | 代表只取代 1 到 50 行 |
1,$s | 代表 1 到最後一行(等同 %s ) |
參數說明:
名稱 | 功用 |
---|---|
g | global,代表範圍內全部都比對 |
i | 忽略大小寫 |
c | 取代前進行確認 |
基本範例
# 將 aaa 取代成 AAA
:%s/aaa/AAA/g
刪除字串
基本範例
# 刪除沒有內容的空白行
:g/^$/d
# 刪除有空格的空行
:g/^\s*$/d
可視模式(VISUAL)
從 一般模式 輸入 v
字母即可進入可視模式,該模式的用途是在處理範圍的選取。
在可視模式下,可以透過h(左)、j(下)、k(上)、l(右)選取範圍。
基本範例
# 複製
y
# 複製游標所在的那行
Y
可視整行模式(VISUAL BLOCK)
從 一般模式 輸入 V
字母即可進入可視整行模式,該模式預設皆是整行選取。
可視區塊模式(VISUAL BLOCK)
從 一般模式 輸入 ctrl
+ v
即可進入可視區塊模式,該模式可以針對垂直範圍選擇(例如選擇每一行的第一個字)。
如何在每行行首插入特定字串:
- 使用可視區塊模式選擇多行的行首
- 輸入
I
進入區塊編輯模式,並輸入文字 - 按下
ESC
離開編輯模式
切割畫面
Vim 可以在將畫面切割成數個區塊,方便開發時對照使用。
指令 | 功能 |
---|---|
ctrl-w + v |
切割垂直視窗 |
ctrl-w + n |
切割水平視窗 |
ctrl-w + q |
關閉分割視窗 |
ctrl-w + - |
縮小視窗大小 |
ctrl-w + + |
放大視窗大小 |
ctrl-w + = |
平均視窗大小 |
ctrl-w + 方向鍵 |
移動聚焦視窗 |
組合技:程式碼自動縮排
綜合以上功能,可以透過幾個指令的組合讓程式碼自動縮排。
# 在一般模式輸入以下指令
ggVG=
指令 | 功能 |
---|---|
gg | 切換到檔案開頭 |
V | 可視整行模式 |
G | 移動到檔案結尾 |
= | 重新排版 |