Vim
Vim 是安裝在每個 UNIX 系統上的通用文字編輯器。雖然 Neovim 持續創新,但 Vim 專注於向後相容性與穩定性。
使用時機
- 通用伺服器與系統編輯:在任 Unix/Linux 伺服器上編輯系統設定、腳本和程式碼,無需安裝額外軟體。
- 模式化文字處理:使用運算子-動作語法(
dap、ci"、gUiw)組合文字轉換。 - 無頭巨集自動化:錄製並重播重複的編輯操作,橫跨數百行程式碼(
qa、@a)。 - Git 提交與合併編輯:快速互動式編輯提交訊息、互動式變基以及差異衝突解決。
快速入門
1. 最簡 ~/.vimrc
syntax on
set number
set relativenumber
set tabstop=2
set shiftwidth=2
set expandtab
set hlsearch
set incsearch
set clipboard=unnamed
let mapleader = " "
nnoremap <leader>w :w<CR>
nnoremap <leader>q :q<CR>
2. 核心編輯命令
i/a:插入模式(游標前 / 後)ci":更改雙引號內內容da{:刪除大括號周圍內容:%s/foo/bar/g:取代檔案中所有 foo 為 bar.:重複上次修改
核心概念
現代化的生產力 Vimrc(~/.vimrc)
設定合理的預設值、套件管理器和程式碼導航:
" ~/.vimrc
set nocompatible
filetype plugin indent on
syntax on
" 一般設定
set number
set relativenumber
set expandtab
set shiftwidth = 2
set tabstop = 2
set autoindent
set smartindent
set hlsearch
set incsearch
set ignorecase
set smartcase
set hidden
set backspace=indent,eol,start
set updatetime=300
set clipboard=unnamed
" 前導鍵映射
let mapleader = " "
" 快速分割視窗導航
nnoremap <C-h> <C-w>h
nnoremap <C-j> <C-w>j
nnoremap <C-k> <C-w>k
nnoremap <C-l> <C-w>l
" 清除搜尋反白
nnoremap <leader>h :nohlsearch<CR>
必備文字物件與語法
結合運算子(d、c、y、v)與文字物件及動作:
ci" - 更改雙引號內內容("foo" -> "")
di( - 刪除括號內內容
yap - 複製(Yank)整個段落
gUiw - 將內單字轉為大寫
dt, - 從游標刪除至逗號
. - 立即重複上次修改
巨集錄製與執行
自動化重複的表格資料轉換:
1. 按下 `qa` 開始將巨集錄製到暫存器 'a'
2. 執行文字編輯步驟(例如 `0iconst <Esc>A = true;<Esc>j`)
3. 按下 `q` 結束錄製
4. 在當前行重播巨集:`@a`
5. 在多行程式碼上重播巨集 50 次:`50@a`
6. 在視覺選取範圍上執行巨集:`:'<,'>normal @a`
常見模式
巨集錄製與批次執行
問題:在多行程式碼中執行重複的多步驟編輯。
解決方案:將按鍵序列錄製到暫存器 q。
- 將游標置於目標起始位置。
- 按下
qq開始錄製到暫存器q。 - 執行編輯序列(例如
I" <Esc> A",<Esc> j ^)。 - 按下
q停止錄製。 - 使用
@q重播,或在 50 行程式碼中執行:50@q。
使用 vim-plug 進行套件管理
問題:安裝與組織 Vim 套件,無需手動管理路徑。
解決方案:使用 vim-plug。
call plug#begin('~/.vim/plugged')
Plug 'tpope/vim-sensible'
Plug 'tpope/vim-fugitive'
Plug 'preservim/nerdtree'
call plug#end()
在 Vim 內部執行 :PlugInstall 來安裝。
最佳實務(2026)
- 務必熟練模式導航(
h、j、k、l、w、b、e),並避免使用方向鍵。 - 務必善用文字物件(
ciw、da(、yi{)以最少的按鍵編輯結構化程式碼區塊。 - 務必使用 dot 命令(
.)在相似行上重複最近的文字轉換。 - 務必啟用
set hidden,讓緩衝區能保持在背景而不強制立即儲存。 - 切勿安裝數百個笨重的舊版 VimScript 套件;若需要豐富的 IDE 體驗,請轉向 Neovim Lua。
- 切勿遺留交換檔(
.swp);請設定set noswapfile或指定專用的交換目錄。 - 切勿在
~/.vimrc中使用同步的外部呼叫,以免在遠端機器上造成明顯的啟動延遲。
故障排除
| 錯誤 / 症狀 | 原因 | 解決方案 |
|---|---|---|
系統剪貼簿複製失敗("+y 無作用) | Vim 編譯時未啟用 +clipboard 支援 | 安裝 vim-gtk3(Ubuntu)或啟用剪貼簿支援的 macvim / neovim。 |
方向鍵插入 A、B、C、D 字元 | 以嚴格的 Vi 相容模式執行 | 在 ~/.vimrc 開頭加入 set nocompatible。 |
| 搜尋後結尾空白反白持續存在 | 搜尋反白仍然啟用 | 按下 :nohlsearch 或綁定 <leader>h :nohlsearch<CR> 快捷鍵。 |