Vim 好用的設定


建立時間: 2023年4月20日 18:18
更新時間: 2024年12月23日 08:50

說明

.vimrc 是 Vim 的設定檔,用於配置 Vim 編輯器的各種設定和自定義行為,我將分享一些不錯的設定。

選項的總覽可查看幫助 :help option-list

檔案位置

Mac

通常放在家目錄底下 ~/.vimrc

  • vim 在 ~/.vimrc
  • gvim 在 ~/.gvimrc

Windows

  • vim 在 %userprofile%\_vimrc
  • gvim 在 %userprofile%\_gvimrc

%userprofile% 是家目錄。

另外還可以放在 $VIM/_vimrc,你可以在 vim 執行 :echo $VIM 查看 $VIM 位置。

gvim

gvim 有專屬的 gvim 設定檔,gvim 會先配置原本的 vim 設定後才繼續配置 gvim 的設定。

設定選項

查看幫助文件 :help :set

:se[t][!]

顯示所有不同於預設值的選項。如果給予 !,每個選項都會在單獨的行上顯示。


:se[t][!] all

顯示除了終端設定以外的所有選項。 如果給予 !,每個選項都會在單獨的行上顯示。


查看幫助文件 :help E519

:se[t] {option}?

顯示 {option} 的值。

範例

:set history?


:se[t] {option}

切換選項: 置位,開啟。
數值選項: 顯示其值。
字串選項: 顯示其值。

範例

:set number


:se[t] no{option}

切換選項: 復位,關閉。

範例

:set nonumber


查看幫助文件 :help :set-! :help :set-inv

:se[t] {option}!
:se[t] inv{option}

切換選項: 反轉其值。

範例

:set number!


查看幫助文件 :help :set-args

:se[t] {option}={value}
:se[t] {option}:{value}

設定字串或數值選項的值為 {value}

數值選項的值可以用十進制、十六進制 (0x 開頭) 或八進制(‘0’ 開頭)。


環境指令

內建外掛

.vimrc

" editorconfig 外掛
packadd! editorconfig

特殊需判斷終端機

.vimrc

" 是否有支援 256 色彩的終端機或圖形使用者介面,例如 MacVim
if &t_Co > 2 || has("gui_running")
    " 顏色數目
    set t_Co=256
    " 語法高亮
    syntax on
    " 高亮顯示搜尋匹配
    set hlsearch
endif

Tab 換行系列

.vimrc

" 根據上一行決定新行的縮排
set autoindent
" 使用 C/C++ 語言的自動縮排方式
set cindent
" 插入模式裡: 插入 <Tab> 時使用合適數量的空格。
set expandtab
" (自動) 縮排每一步所使用的空白數目。
" python 換行時會看到差異
set shiftwidth=4
" 開啟新行時使用智慧型自動縮排。
" 通常,使用 smartindent 時也應該打開 autoindent。
set smartindent
" 執行編輯操作,如插入 <Tab> 或使用 <BS> 時,把 <Tab> 算作空格的數目。
" '感覺上' 你就像使用單一 <Tab> 一樣,而實際上使用的是空格和 <Tab> 的混合。
set softtabstop=4
" 文件裡的 <Tab> 代表的空格數。
" 符合 ts 空格數就變成 tab
set tabstop=4

其他我有使用的部分

.vimrc

" 顏色主題設定,有需要再設定
" colorscheme dracula

" 在一行開頭按退格鍵如何處理
" indent 允許在自動縮排上退格
" eol 允許在換行符號上退格 (連接行)
" start 允許在插入開始的位置上退格;
"   CTRL-W 和 CTRL-U 到達插入開始的位置時停留一次
set backspace=indent,eol,start

" 預設使用 * 暫存器,與系統剪貼簿共用位置
set clipboard=unnamed
" 命令列使用的螢幕行數
set cmdheight=3
" 命令列視窗的螢幕行數
set cmdwinheight=10
" 游標行高亮
set cursorline
" 在側邊使用符號「-」、「|」、「+」,指示摺疊的開啟和關閉數。最大值為12。
set foldcolumn=4
set foldmethod=indent

" 緩衝區在視窗關閉時,隱藏緩衝區,而不是卸載緩衝區
set hidden

" 記錄歷史 ex 命令數
set history=200

" 加強搜尋,搜尋時不用按 Enter 就會執行
set incsearch

" 搜尋及許多指令如 'w'、'*'、'[i' 等所識別的關鍵字
set iskeyword+=-

" 最後一個視窗總是顯示狀態列
set laststatus=2

" 控制換行顯示,僅在 'breakat' 指定的字元處斷行,不影響實際內容
set linebreak

" 顯示空白符號、tab 尾部空白、換行符號
set list
set listchars+=space:·,tab:>-,trail:-

" 讀入外部命令的輸出時所使用的編碼
" 例如 :make
" char 與設定系統區域編碼的效果相同。
set makeencoding=char
" 不顯示模式,因為我有安裝狀態條才關閉,沒安裝請顯示模式 set showmode
set noshowmode
" 行前顯示行號
set number
" 游標上下兩側最少保留的螢幕行數
set scrolloff=3
" 顯示執行命令
set showcmd
" 插入括號時,短暫地跳到匹配的對應括號。
" 只有在螢幕上能看到配對時才會進行跳躍。
set showmatch
" 永遠會顯示帶有標籤頁標籤的行
set showtabline=2
" 打開拼字檢查
set spell
" 拼字檢查語言
" en_us 英文
" cjk 排除東亞字元
set spelllang=en_us,cjk
" 如果打開,視窗的分割會把新視窗放到當前視窗之下
set splitbelow
" 如果打開,視窗的分割會把新視窗放到當前視窗之右
set splitright
" 儲存撤銷檔案在共用區
set undofile
" 撤銷檔案共用區路徑
set undodir=~/.vim/undo
" 如果過了這麼多毫秒數以後還沒有任何輸入,把交換文件寫入磁盤
set updatetime=300
" 設定折行條件
set whichwrap=b,s,<,>,[,]
" 增強 Tab 自動補全,產生文件清單
set wildmenu
" list:longest 補全符合的最長字串
" full 打開 wildmenu
set wildmode=list:longest,full
" 超出視窗寬度的文字行都會被迴繞顯示
set wrap

" html shiftwidth=2 softtabstop=2 tabstop=2
autocmd BufRead,BufNewFile *.html set sw=2 sts=2 ts=2

gvim 專用

.gvimrc

" 螢幕的欄數
set columns=85
" gui 版 vim 字型
set guifont=FiraMono\ Nerd\ Font:h16

" gui 版 vim 使用的部件和選項
" 'e' 依照 'showtabline' 的要求加入標籤頁。
set guioptions+=e
" 'g' 灰色選單項目: 使得不活動的選單項目變灰。
set guioptions+=g
" 'm' 使用選單列表。
set guioptions+=m
" 'r' 右邊的捲軸總是存在。
set guioptions+=r
" 'L' 如有垂直分割的視窗,左邊的捲軸總是存在。
set guioptions+=L
" 'T' 包含工具列。
set guioptions+=T

限 Mac

.vimrc

" 逗號分隔的置換檔案的目錄名稱列表
" // 結尾代表檔名會包含完整路徑
set directory=$HOME/.vim/swap//,.

限 Windows

_vimrc

" 逗號分隔的置換檔案的目錄名稱列表
" // 結尾代表檔名會包含完整路徑
set directory=%userprofile%\.vim\swap//,.

未使用但值得記錄的設定

備份

" 備份策略: 備份目前檔案,寫入後刪除備份檔案 (預設)
" 若有需要調整策略可以修改這兩個設定
" 查看備份策略 :help backup-table

" 覆蓋檔案前建立一個備份。檔案成功寫入後保留該備份
set backup

" 備份檔案使用的目錄列表,以 ',' 區隔,使用第一個可用的目錄
set backupdir=.,~\temp

" 備份檔案使用的副檔名
set backupext=~

" 覆蓋檔案前建立備份。檔案成功寫入後
" 除非 'backup' 選項也被打開,否則刪除該備份
set writebackup

.vimrc

" 自動把內容寫回檔案: 如果檔案被修改過,在每個 :next、:previous 等等指令時進行
" 自動將更改過的緩衝區內容寫入磁碟
set autowrite

" 有改動時自動寫回檔案,但適用於更多命令
set autowriteall

" 搜尋模式裡忽略大小寫
set ignorecase

" 改變搜尋模式使用的特殊字元(預設打開)
" 查看更多 :help /magic
set magic

" 如果關閉,緩衝區的內容不能修改。
set modifiable

" 寫入檔案且本選項開啟時,恢復檔案尾缺少的 <EOL>。如果你要保留檔案原本的樣子,關閉本選項。
set nofixendofline'

" 搜索在文件末迴繞回文件首(預設打開)
set nowrapscan

" 禁止寫入緩衝區
set readonly

" 報告改變行數的閾值。如果多於 'report' 的行發生改變,多數 `:` 命令會給出消息。
" 如果你總是想得到這個消息,設定 'report' 為零。
set report=0

" 顯示游標位置的行號和列號
set ruler

" 使用 CTRL-U 和 CTRL-D 滾動的行數。
set scroll=0

" 顯示模式
set showmode

.gvimrc

"說明如何套用 equalalways 選項:
"   ver 垂直方向,視窗寬度不受影響
"   hor 水平方向,窗口高度不受影響
"   both 窗口寬度和高度都會受影響
set eadirection=both

" 如果打開,在分割或關閉某個視窗時所有視窗自動使用相同的尺寸。
set equalalways

" Vim 視窗的行數。
" 終端初始化程式碼會自動完成,所以只需在 GUI 版設定即可。
set lines=24

" 當前游標所在視窗顯示的最少列數,切換視窗會有放大視窗的感覺。
set winheight=50

" 非目前視窗的最小高度。
" 這是一個絕對的最小值,視窗絕對不會比這更小。
set winminheight=5

" 非目前視窗的最小寬度。
" 這是一個絕對的最小值,視窗絕對不會比這更小。
set winminwidth=5

" 當前游標所在視窗顯示的最少行數,切換視窗會有放大視窗的感覺。
set winwidth=50

限 Windows

_vimrc

" 使用外部命令的外殼程序名字
set shell=\"$SystemRoot\system32\WindowsPowerShell\v1.0\powershell.exe\"
觀看次數: 2451
settingvim_vimrc.vimrc設定
按讚追蹤 Enjoy 軟體 Facebook 粉絲專頁
每週分享資訊技術

一杯咖啡的力量,勝過千言萬語的感謝。

支持我一杯咖啡,讓我繼續創作優質內容,與您分享更多知識與樂趣!