vi 與 vim 的指令整理

先教大家怎麼退出 vi,請輸入指令 :q 再按 Enter 即可。

vi 被稱為「編輯器之神」,是 unix 家族中功能最強大的文字編輯器,讓用戶只要使用鍵盤就可以完成所有的操作。而 vim 則是 vi 的加強版,在 Windows 上也找得到 vim 的芳蹤。

vi 有分為瀏覽模式、編輯模式、命令列模式...並有超多的功能撘配超多的指令,需要用戶去記憶。vi 的學習曲線陡峭,常令初學者卻步! 以下是我所整理出的指令 (指令有區分大小寫):

  • 以下指令的前面標記 * 表示為常用指令。
  • 若指令的第一個字元為 :/? 表示要在「命令列」輸入,通常是先按 ESC 返回瀏覽模式,直接輸入指令就會切換到最下方的命令列,輸入完要按 Enter 才會執行。

瀏覽模式 / 檔案功能

指令 說明
* :e 檔案名稱 編輯檔案 (檔案名稱輸入 . 或路徑表示列出目錄下的檔案)
* :e! 放棄修改,還原至檔案編輯前的狀態
:Ex 列出目前目錄下的檔案
:Ex 路徑 列出指定路徑下的檔案
* :w 存檔 (加 ! 表示強制存檔)
* :w 檔案名稱 另存新檔
* :q 退出 vi (加 ! 表示不存檔強制退出)
* :wq 存檔並退出 vi
* :x 存檔並退出 vi
:w !sudo tee % 當你編輯好檔案要存檔時,卻發現沒有寫入檔案的權限! 用這指令讓你以 root 的權限存檔
:r 檔案名稱 在游標的下一行附加檔案的內容
* :n 切換到下一個開啟的檔案
* :N 切換到上一個開啟的檔案
* :set nu 設定顯示行號
* :set nonu 取消行號顯示
* :files 列出所有開啟的檔案

編輯模式與編輯功能

指令 說明
* a 在游標位置後進入編輯模式
* A 在游標行尾進入編輯模式
* i 在游標位置進入編輯模式
I 在游標行的第一個非空白字元進入編輯模式
* o 向下新增一行,並進入編輯模式
O 向上新增一行,並進入編輯模式
* ciw 刪除游標上的單詞,並進入編輯模式
* C 刪除游標位置到行尾,並進入編輯模式
c 刪除標記的內容,並進入編輯模式
cc 刪除游標行,並進入編輯模式
r 取代游標位置的「一個字元」
R 在游標位置進入「取代模式」,能取代所有字元
* dd 刪除游標行
* D 刪除游標位置到行尾
* diw 刪除游標位置的單詞
* x 刪除游標位置的「一個字元」
* J 將游標行與下一行合併
* ESC 取消指令或退出編輯模式

瀏覽模式 / 游標移動

指令 說明
* gg 移到第一行
* G 移到最後一行
* { 移到上一個段落
* } 移到下一個段落
[{ 移到程式區塊的開頭
]} 移到程式區塊的結尾
* % 移到對應的括號
* b 移到上一個單詞
* w 移到下一個單詞
* g; 移到較早的編輯位置
* g, 移到較新的編輯位置
:changes 查看編輯記錄
* :行數 移到第 n 行
* 行數 → G 移到第 n 行
0 移到行首
$ 移到行尾
^ 移到游標行的第一個非空白字元
g_ 移到游標行的最後一個非空白字元
字數Space 向右移 n 個字元
* 行數Enter 向下移 n 行
h 向左移動
j 向下移動
k 向上移動
l 向左移動

瀏覽模式 / 標記與複製功能

指令 說明
* v 開始字串標記
* V 開始行標記
* v → Ctrl + V 開始區塊標記
* d 剪下並複製標記的內容
* x 剪下並複製標記的內容
* y 複製標記的內容
* yiw 複製游標位置的單詞
* Y 複製游標行
* yy 複製游標行
yG 複製游標行到最後一行
y1G 複製游標行到第一行
y$ 複製游標位置到行尾
y0 複製游標位置前到行首
* p 若複製的是「字串」,則在游標後貼上複製內容。
若複製的是「行」,則在下一行貼上複製內容。
P 若複製的是「字串」,則在游標前貼上複製內容。
若複製的是「行」,則在前一行貼上複製內容。
* Ctrl + R → 0 若複製的是「字串」,則在游標後貼上複製內容。
若複製的是「行」,則在下一行貼上複製內容。
(適用於編輯模式及指令行)

瀏覽模式 / 刪除功能

指令 說明
* x 刪除游標位置的「一個字元」
* dd 刪除游標行
* D 刪除游標位置到行尾
* diw 刪除游標位置的單詞
* 行數 → dd 刪除 n 行
* dG 刪除游標行到最後一行
d1G 刪除游標行到第一行
* d$ 刪除游標位置到行尾
d0 刪除游標位置到行首

瀏覽模式 / 搜尋與取代

指令 說明
* /搜尋字串 向下搜尋字串
* /\c搜尋字串 向下搜尋字串,不分大小寫
?搜尋字串 向上搜尋字串
?\c搜尋字串 向上搜尋字串,不分大小寫
* n 繼續下一個搜尋的結果
* N 繼續上一個搜尋的結果
* * 向下搜尋與游標位置相同的單詞
# 向上搜尋與游標位置相同的單詞
* :起始行,終止行s/搜尋字串/取代字串/gic 從第 n 行到第 n 行取代字串 (後面的 g 表示整行全部, i 不分大小寫 c 詢問)
:1,$s/搜尋字串/取代字串/gic 全部取代字串 (後面的 g 表示整行全部, i 不分大小寫 c 詢問)
* :%s/搜尋字串/取代字串/gic 全部取代字串 (後面的 g 表示整行全部, i 不分大小寫 c 詢問)
:noh 清除搜尋結果
* :set ic 設定搜尋時不分大小寫
* :set noic 設定搜尋時要分大小寫
* f → 搜尋字元 向下搜尋字元 (限同一行)
* F → 搜尋字元 向上搜尋字元 (限同一行)
* ; 繼續下一個搜尋的結果 (限同一行)
* , 繼續上一個搜尋的結果 (限同一行)

瀏覽模式 / 視窗分割

指令 說明
* :new 新增水平分割視窗
* :new 檔案名稱 新增水平分割視窗,並載入檔案 (檔案名稱輸入 . 或路徑表示列出目錄下的檔案)
* :vnew 新增垂直分割視窗
* :vnew 檔案名稱 新增垂直分割視窗,並載入檔案 (檔案名稱輸入 . 或路徑表示列出目錄下的檔案)
:sp 新增水平分割視窗,並在新視窗載入目前的檔案
:sp 檔案名稱 新增水平分割視窗,並載入檔案 (檔案名稱輸入 . 或路徑表示列出目錄下的檔案)
:vsp 新增垂直分割視窗,並在新視窗載入目前的檔案
:vsp 檔案名稱 新增垂直分割視窗,並載入檔案 (檔案名稱輸入 . 或路徑表示列出目錄下的檔案)
:Hex 新增水平分割視窗,並列出目前目錄下的檔案
:Hex 路徑 新增水平分割視窗,並列出指定路徑下的檔案
:Vex 新增垂直分割視窗,並列出目前目錄下的檔案
:Vex 路徑 新增垂直分割視窗,並列出指定路徑下的檔案
* Ctrl + W方向鍵 切換視窗
* :only 僅保留目前的視窗

瀏覽模式 / 頁籤功能

指令 說明
* :tabe 新增頁籤
* :tabe 檔案名稱 新增頁籤,並載入檔案 (檔案名稱輸入 . 或路徑表示列出目錄下的檔案)
:Tex 新增頁籤,並列出目前目錄下的檔案
:Tex 路徑 新增頁籤,並列出指定路徑下的檔案
:tabc 關閉目前的頁籤,等同 :q
:tabo 關閉所有頁籤
:tabn 移至下一個頁籤
:tabp 移至上一個頁籤
* gt 移至下一個頁籤
* gT 移至上一個頁籤
* :tabfirst 移至第一個頁籤
* :tablast 移至最後一個頁籤
* :tabm 頁籤編號 移至特定編號的頁籤 (編號從 0 開始)
:tabs 列出所有頁籤

瀏覽模式 / 其它指令

指令 說明
* u 復原上一次的操作
* Ctrl + R 重做上一次的操作
Ctrl + A 將游標處的數字遞增
Ctrl + X 將游標處的數字遞減
* Ctrl + N 自動補齊曾輸入過的單詞
* . 重覆上一個指令
! 命令 執行 linux 指令,並顯示執行結果
TOhtml 將目前編輯的檔案轉換成 HTML 原始碼 (會新增一個水平分割視窗)

瀏覽模式 / 檔案瀏覽器操作

請先以 :Ex 相關指令進入檔案瀏覽器

指令 說明
* - 到上層目錄
* d 建立目錄
* D 刪除目錄
* R 重新命名
* s 切換排序方式
r 切換升冪/降冪排序
i 切換檔案的排列方式
* / 搜尋字串
x 執行檔案
* o 新增水平視窗
* v 新增垂直視窗

vim 的設定檔

通常我會編輯 /etc/vimrc,在檔案最後加入:

" 顯示列號
set number
" 語法高亮度顯示
syntax on
" 標記搜尋到的字串
set hlsearch
" 自動縮排
set autoindent
" 顯示說明
set ruler
" 顯示編輯狀態
set showmode
" 設定註解的顏色
highlight Comment ctermfg=cyan
" 設定搜尋到的字串顏色
highlight Search term=reverse ctermbg=4 ctermfg=7
" 設定 tab 鍵的字元數
set tabstop=4

參考網頁

    • 少年耶~!
    • 11/23. 2009 2:01下午
    Using Mozilla Firefox Mozilla Firefox 3.5.5 on Ubuntu Linux Ubuntu Linux

    果然是常用的~~!
    感溫~!

    • Hades
    • 07/01. 2010 6:00下午
    Using Mozilla Firefox Mozilla Firefox 3.6.6 on Windows Windows 7

    你好~
    我轉載您的文章至我的blog上可嗎?

  1. Using Mozilla Firefox Mozilla Firefox 3.5.10 on Windows Windows Vista

    to Hades:

    好的,歡迎轉載。

    • WENG
    • 07/12. 2015 4:58下午
    Using Google Chrome Google Chrome 43.0.2357.132 on Windows Windows 7

    你好:請問可以轉貼至FB分享給其他對LINUX VIM指令不熟悉的人參考?

    • Using Mozilla Firefox Mozilla Firefox 38.0 on Windows Windows NT

      歡迎分享

    • yi
    • 09/05. 2015 5:34下午
    Using Google Chrome Google Chrome 45.0.2454.85 on Windows Windows 7

    請問如果我用vi需要同時收尋2個以上的字串,該如何下指令?或者我收尋完第1個字串,在收尋下個字串時,上一個收尋的字串還是保持在highlight的狀態

    謝謝

      • 辜俊肇
      • 09/04. 2018 12:59下午
      Using Mozilla Firefox Mozilla Firefox 61.0 on Ubuntu Linux Ubuntu Linux

      使用 grouping 同時搜尋幾個,如/\(字串A\|字串B\)

  2. Using Google Chrome Google Chrome 59.0.3071.115 on Windows Windows NT

    非常詳細的介紹~~謝謝!!

    • Mir
    • 01/29. 2019 10:50上午
    Using Google Chrome Google Chrome 71.0.3578.98 on Ubuntu Linux Ubuntu Linux

    請問每行前面的*代表什麼意思呢?

    • Using Mozilla Firefox Mozilla Firefox 64.0 on Windows Windows NT

      就只是我認為比較常用的指令而已

  1. 10/05. 2010
  2. 10/04. 2016
    Trackback from : Vim – Vickyliin
  3. 01/20. 2017
  4. 12/24. 2017
  5. 08/01. 2018
  6. 11/04. 2020
  7. 01/17. 2021
  8. 06/02. 2022
    Trackback from : more

return top

%d 位部落客按了讚: