Vim 的強大在於其高度可配置的編輯模型。本文深入解析 set 選項系統、.vimrc 分層配置策略、外部命令無縫整合、以及縮寫/映射系統,構建專業級個性化編輯環境。
| 類型 | 語法 | 範例 |
|---|---|---|
| 布林觸發型 | set option / set nooption | set ic (忽略大小寫搜尋) / set noic |
| 數值/字串型 | set option=value | set number / set textwidth=80 |
:set all # 顯示所有選項當前值
:set option? # 查詢單一選項值
:set # 顯示已修改過的選項(含 .vimrc 設定)
" 搜尋增強
set ignorecase " ic: 搜尋忽略大小寫
set smartcase " 含大寫時切換為大小寫敏感
set incsearch " 輸入時即時匹配
set hlsearch " 高亮所有匹配
" 編輯體驗
set number " 顯示行號
set relativenumber " 相對行號(配合移動命令)
set cursorline " 高亮當前行
set wrap " 自動換行
set linebreak " 單詞邊界換行
set scrolloff=5 " 游標距邊緣保留 5 行
set sidescrolloff=8
" 縮排與格式
set tabstop=4
set shiftwidth=4
set expandtab " Tab 展開為空格
set autoindent
set smartindent
" 系統整合
set clipboard=unnamedplus " 使用系統剪貼簿
set undofile " 持久化撤銷歷史
set undodir=~/.vim/undodir
set backupdir=~/.vim/backup
set directory=~/.vim/swap
$HOME/.vimrc - 用戶級主配置(最高優先級)$PWD/.vimrc - 專案級配置(當前目錄,需啟用 set exrc)/etc/vimrc - 系統級全域配置" 在 ~/.vimrc 中啟用
set exrc
set secure " 限制專案 .vimrc 不能執行 :!cmd、:autocmd 等危險命令
典型場景:專案根目錄 .vimrc 設定專屬 tabstop、compiler、tags 路徑、path 包含目錄等,不影響全域環境。
" ~/.vimrc 主文件
source ~/.vim/vimrc.basic " 基礎選項
source ~/.vim/vimrc.keymap " 按鍵映射
source ~/.vim/vimrc.plugin " 外掛配置
source ~/.vim/vimrc.ft " 文件類型專屬
" 專案 .vimrc 示例
set tabstop=2 shiftwidth=2
set tags=./tags,./TAGS,../tags
set path+=src/**,include/**
compiler gcc
" 禁用某些全域映射
unmap t
:!command " 執行命令,顯示輸出,按 Enter 返回
:!! " 重複上一條 ! 命令
:r !command " 將命令標準輸出插入當前緩衝區游標處
:.!command " 以當前行為標準輸入執行命令,輸出替換當前行
:range!command " 以範圍內文本為輸入,輸出替換範圍
| 需求 | 命令 | 說明 |
|---|---|---|
| JSON 格式化 | :%!python -m json.tool | 全文格式化 |
| 排序去重 | :'<,'>!sort -u | 視覺模式選中範圍 |
| 插入日期 | :r !date +\%F | 插入 2024-01-15 |
| 代碼格式化 | :!clang-format -i % | 外部格式化工具 |
| Git 狀態 | :!git status | 不離開 Vim 查狀態 |
: 範圍 !)" 將第 10-20 行通過 tr 轉大寫
:10,20!tr a-z A-Z
" 以 awk 處理 CSV 第 3 欄求和
:%!awk -F, '{sum+=$3} END{print sum}'
:abbreviate 缩写 全文本
:ab " 表達式縮寫(Vim9 script)
:iab " 僅插入模式生效
:cab " 僅命令列模式生效
" 代碼片段
iab fori for (int i = 0; i < ; ++i) {}kA
iab main int main(int argc, char *argv[]) {return 0;}k
" 常用長單詞
iab teh the
iab recieve receive
" 動態縮寫(需表達式支援)
iab datestr strftime("%Y-%m-%d")
iab timestamp strftime("%Y-%m-%d %H:%M:%S")
:ab # 列出所有縮寫
:una THE # 刪除特定縮寫
:abc # 清除所有縮寫
" 正常模式映射
nnoremap w :w
nnoremap q :q
" 視覺模式映射
vnoremap y "+y " 複製到系統剪貼簿
" 插入模式快速退出
inoremap jk
" 命令列模式歷史搜尋
cnoremap
cnoremap
通過系統化配置 set 選項、分層管理 .vimrc、善用外部命令篩選器與縮寫/映射系統,你可以將 Vim 打造為完美貼合個人習慣與專案需求的專業編輯利器。
Linux 終端機熱鍵大師鍵:自訂鍵盤快捷鍵綁定任意指令,效率翻倍
Linux find 指令大全:50+ 實用範例與參數完整速查表
Linux xlsatoms 指令完整使用教學:列出 X Server 內部 Atom 定義
VMware Workstation Linux 客體機無法全螢幕?安裝 VMware Tools 完整解決流程
CentOS 7 搭建 Pacemaker/Corosync 高可用叢集 (HA) 完整實戰:雙節點 DRBD + VIP + Nginx
Linux 下調整 VirtualBox 虛擬磁盤容量的完整步驟