安裝並以超簡單的 vimrc 配置於 Windows/Mac 平台入門 Vim

Vim 之所以成為純文字編輯器的經典,在於其彈性以及操作流暢度,只要了解如何對待它,能帶給你的方便性可說是近乎無限,我們永遠能夠找到更好的設定以符合自己的需求。但也正因為這種高度客製化的核心,Vim 的預設配置實在是慘不忍睹,又由於 Vim 的操作方式獨樹一格,使得大多數人在第一次關不掉醜不啦嘰的 Vim 之後大概率就放棄它了。

本著分享 Vim 給更多人了解其箇中妙趣之精神,此系列將以最簡單的設定引領大家於 Windows/Mac 平台上入門 Vim。(Linux 跟 Mac 的配置比較接近,但相信 Linux 使用者不需要看本篇文章吧 XD)

Why Vim?

想當初自己開始使用 Vim 的理由就一個字:酷。看起來就很厲害 XD

有看過黑客的螢幕黑畫面游標飛來飛去?
文字突然出現又消失?
文字編輯完全不需要滑鼠?
分割畫面宛如黃金分割?

而這一切皆源自於 Vim 的全鍵盤操作理念。

Installation

  • Mac OS
    內建有,但需要在 Terminal 裡執行 vim,想要用 GUI 介面的可以下載 MacVim,兩者會使用相同的配置 vimrc 檔案所以不用擔心。
  • Windows
    如果有安裝 Git 可以直接在環境變數 PATH 中加入 C:\Program Files\Git\usr\bin 路徑,其裡面就有 Vim 執行檔,如果想要 GUI 版本可以安裝 gVim

現在打開終端機輸入 vim 就可以看到以下畫面(以 Mac OS 為例,gVim 有預設配置長不一樣):

https://imgur.com/a/ZhAhT24

黑白畫面很醜我知道,而且還很難用,所以需要一些基本設定。

vimrc 設定檔

超雷的第一個坑來了,為何我的設定沒有用?

Where is my vimrc?

Vim 會在你的電腦上根據以下順序去找尋設定檔,且注意僅使用第一個命中

  • for Mac OS, or Windows Vim in Git folder
    1. $HOME/.vimrc(不建議)
      網路上大多推薦這個路徑,但放在這邊有個缺點就是跟 Vim 其他所需檔案分離。
    2. $HOME/.vim/vimrc
      最推薦此路徑,因為跟其他 Vim 相關檔案放在一起,所以可以方便的利用版本控制工具例如 Git 來管理。
    3. $HOME/.exrc
    4. $VIMRUNTIME/defaults.vim
不知道 $HOME 在哪裡可以到 Mac OS 終端機(或 Windows Powershell)中輸入 echo $HOME。

我有刪掉一些系統路徑,想查看完整列表可以在終端機裡輸入:

$ vim --version

最後面就會寫這些設定檔的引入路徑順序。

或者在 Vim 的一般模式下輸入 :version 然後按 Enter,接著按 jd 滾動到最下面,按 q 離開說明文字。

如果你使用 gVim

Windows gVim 的大坑,因為他的搜尋路徑不一樣。

  • for Windows Vin in gVim folder
    1. $HOME\_vimrc
    2. $HOME\vimfiles\vimrc
    3. $HOME\_exrc

以下為求一致性,建議在 $HOME\vimfiles\vimrc 檔案中加入以下文字:

set encoding=utf-8              " encoding correction, or will warn with invalid characters for some settings
set runtimepath+=$HOME/.vim     " let vim also search vim files located in $HOME/.vim
source $HOME/.vim/vimrc         " source all settings from $HOME/.vim/vimrc

此後就可以共用 $HOME/.vim/vimrc 設定檔。

Minimal vimrc

本篇重點其實就以下這幾行,然後終於可以開始玩轉 Vim(苦笑。

filetype plugin indent on       " enable filetype detection
syntax on                       " enable syntax detection
set backspace=indent,eol,start  " let backspace key work at those positions
set hidden                      " allow unsaved file buffers
set noswapfile                  " disable .swp file for current file backup during editing
set hlsearch incsearch          " highlight & search when typing
set path=.,**                   " add file finding path to all recursive subfolders

基本操作

開啟一個檔案。

$ vim a_file.txt

超雷的第二個坑來了,打開 Vim 之後竟然不能輸入文字?

這是因為 Vim 預設為 Normal Mode(一般模式),狀態列竟然還沒有任何顯示?!此模式下的鍵盤主要功能為:

  • 移動游標
    • hjkl 分別代表 ←、↓、↑、→,當然你也可以用真正的方向鍵,但熟悉 hjkl 可以減少手腕的移動。
  • 文本操作
    • 輸入文字:按 i 進入 Insert Mode(插入模式),這也是一般文字編輯器僅有的模式,按 Esc 回到 Normal Mode。
    • 輸入 dd (delete) 刪除整行,yy (yank) 複製整行,p (paste) 貼上至後方,P 貼上至前方(這些操作都是在 Normal Mode)。
    • 輸入 u (undo) 復原上一步。
  • 執行指令(冒號開頭,輸入到一半可按 <C-c> 放棄)
    • 輸入 :w(或 :write)然後 Enter 存檔。
    • 輸入 :q(或 :quit)然後 Enter 離開 Vim,如果檔案有變更還沒保存要加驚嘆號 :q!(或 :quit!)強制離開 Vim。
      • 以上指令可以合併,例如 :wq(或 :write | quit)為存檔並離開。
注意大小寫有區別。<C-c> 代表按下 Ctrl-c。
建議的鍵盤設定:「重複鍵前延遲」調到最短,「重複速度」調到最快,你會在 Vim 裡移動的比較舒適。

也許有人想吐槽:也太多要記,但其實字母多半有對應英文意思,接著你發現有些動作會切換模式有些不會,初學者在搞不清楚模式的情況下使用 Vim 一律建議狂按 Esc 先回到 Normal Mode。

Display Mode in Status Line

如果想知道現在處於哪個 Mode,可以在 vimrc 設定檔中加入以下設定以顯示當前模式。

" Status Line show Mode
" modified from https://gist.github.com/meskarune/57b613907ebd1df67eb7bdb83c6e6641
let g:currentmode={
    \ 'n'  : 'Normal',
    \ 'v'  : 'Visual',
    \ 'V'  : 'V·Line',
    \ '^V' : 'V·Block',
    \ 'i'  : 'Insert',
    \ 'R'  : 'Replace',
    \ 'Rv' : 'V·Replace',
    \ 'c'  : 'Command',
    \ 'cv' : 'Vim Ex',
    \ 'ce' : 'Ex',
    \ 'rm' : 'More',
    \}

set laststatus=2                           " always show statusline
set noshowmode                             " disable default '-- Insert --', etc line
set statusline=
set statusline+=%{get(g:currentmode,\ mode(),\ mode())}\   " The current mode
set statusline+=%1*\ %<%F%m%r%h%w\         " File path, modified, readonly, helpfile, preview

重啟 Vim(或是在 Normal Mode 下輸入 :source $HOME/.vim/vimrc 然後按 Enter)以套用設定,此時左下角就會顯示目前模式。

按看看就對了

建議大家先用以上 Vim 指令動作玩看看,開始體會這種「有模式」的編輯器,下一篇再來正式介紹 Vim 主要的幾個模式和常用指令動作。(喂!!一點都不簡單好嗎!!

有看不懂的設定都可以用 :help xxx 來查看說明文件,例如 :help laststatus。

References

Useful for basic vimrc configuration

 


Using Vim in VS Code/Sublime

題外話,如果只是玩看看 Vim 的操作又不想花時間弄上面的那些設定,主流的編輯器都有套件可以模擬。

但以上的玩法有些就不吃 vimrc 這套而變成另一種設定方式,或者操作上跟 Vim 多少有出入,不在本文的範疇,儘供有興趣的人作為參考。

What is Vim?

1976 年美國計算機科學家 Bill Joy 編寫並發布了一個名為 vi 的文字編輯器,1988 年荷蘭程式設計師 Bram Moolenaar 基於 vi 開發了一套改良版文字編輯器 Vim,1992 年 Vim 移植到了 UNIX 和 MS-DOS 作業系統上,自此 Vim 逐漸成為各大系統的預載軟體。2015年 Vim 的一個 fork 分支名為 Neovim 正式發布了第一個版本,加入了更多的功能並改進初始設定。

後記

有些介紹 Vim 的網路文章劈頭就開始介紹外掛,但個人認為初學者不應該仰賴外掛,反而應該先對 Vim 有所認識,在這之上再來思考自己需要哪些外掛,而不是一昧的照單全收神人的 vimrc(vgodamix)。

也由於外掛會有 Vim 版本相依性的問題,例如有些外掛只能用於 Neovim 而不適用於 Vim,所以也更加希望大家都能從了解基本操作——所有版本共通的 Vim 語言——開始學習。