最近一段時間, 看了兩本關於 vim 的書, 從新學了一遍 vim, 在感慨 vim 強大的同時, 也爲從前的自滿感到汗顏, 我拿起了從前作的關於 vim 的筆記, 從新梳理了一遍, 做爲一個系列分享到網上, 主要目的是想讓更多 vim 的愛好者可以掌握更多的操做技巧.html
本系列 vim 筆記的目的不是從零教會你如何操做 vim, 而是做爲一本手冊或者擴展你的視野, 讓你知道原來 vim 還能這麼用.git
但願你能從本系列教程中收穫到你感興趣的部份內容!vim
本系列教程共分爲如下四個部分:瀏覽器
網上有不少形容 vim 的學習曲線是如何陡峭的說法. 人, 最恐懼未知的事情. 若是有人給你說: 你花一天的時間找一個入門教程進行學習就能夠學會基礎操做
, 你會學習 vim 嗎? 絕大部分人都是會的, 其實事實也就是這樣, 若是隻是基礎操做的話 1 天時間絕對是夠了. 可是絕大多數人得不到這樣的答案, 因此他們關上了這扇窗.bash
在我看來, vim 的學習投入與產出的性價比是很高的, 學習了 vim 後你會有以下的一系列好處:服務器
git
)Atom
, Sublime
, VSCode
, NOTEPAD++
等工具氾濫的現在, 你能夠選擇一個有着近 40 年曆史的通過了時間考驗的編輯器編輯器的切換是有成本的, 並且成本不小. 任何事情作到一半再去作另外的事情絕對比從一而終的人損失大得多, 所以選擇一個適合本身的編輯器做爲之後的夥伴是一件應該慎重的事情, 而使用過 vim 的人不多會再換用其餘的編輯器, 這應該能說明不少問題.markdown
有些人持有工具無用論的觀點, 認爲寫好代碼纔是一切, 事實確實是這樣. 可是難道有人會拒絕更快速, 更高效的寫完一段優雅的代碼嗎? 這二者並不是是魚和熊掌不可兼得, 咱們均可以有.編輯器
這方面話題比較容易引戰, 點到爲止, 具體如何交由讀者自行判斷.工具
Let's go!oop
第一步固然是安裝, 這裏對 MacOS
與 Linux
進行安裝示範
系統內置
Mac OS 默認內置 vim, 在沒有安裝任何其餘版本 vim 的狀況下在終端中輸入 vim --version
可看到以下圖:
+
表明含有的功能, -
表明不包含的功能. 能夠看到系統內置 Vim
的 clipboard
選項爲 -
, 表明沒有剪貼板功能, 也就是說不會與系統剪貼板有任何互動, 即在 vim 中的內容沒法複製到另外一個程序中, 不管如何設置都沒法改變. 這是最大的區別.
並且因爲是系統內置, 因此若是想要手動升級的話沒有可能, 只能等到系統更新的時候 Apple 更新官方內置 vim
.
官方版 Vim, 經過 Homebrew 安裝
在終端輸入 brew install vim
能夠經過包管理工具 Homebrew
來安裝官方版本 Vim
. 安裝完後的 vim 位置在 /usr/local/bin/vim
(經過系統命令 which vim
能夠知道具體程序的路徑), 而系統自帶的 vim 位置在 /usr/bin/vim
, 若是要使用經過 Homebrew 安裝的 Vim
, 則必須將系統識別的環境變量 PATH
順序調整爲
/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin
複製代碼
調整 PATH
順序方法: 打開路徑 /private/etc/paths
(此爲隱藏路徑, 須要打開顯示隱藏文件開關才能看到), 使用任意文本編輯器打開修改並保存. 以下圖:
這樣設置以後當在終端中輸入 vim 時系統會先對 /usr/local/bin
路徑進行檢索, 若是此路徑沒有的話在對 /usr/bin
進行檢索, 以此類推. 此時再次驗證 which vim
命令, 若是返回了 /usr/local/bin
就說明設置成功. 之後只要是使用 vim [filename]
便可使用經過 Homebrew
安裝的 vim
來打開了.
此時經過 vim --version
可看到以下圖
最大的改變是 clipboard
選項變爲了 +
, 並且不少功能也變爲了 +
.
經過 Homebrew
安裝的 vim
一切都很好, 我也用了很長一段時間, 可是有兩個問題一直困擾着我:
Markdown
文件時, 若是開啓了語法渲染以及底部狀態欄插件的話會在快速移動光標過程當中有較大延遲. 這種感受在遇到語法段落結構複雜, 且光標移動較快時最爲明顯. 極大的影響了使用感覺.若是 vim
一直是這種問題的話也當不得 編輯器之神 的稱呼了. 我上網搜索後發現有不少人都跟我同樣注意到了這一點. Mac 終端上的 vim
速度慢, 卡頓, 在 Linux 下就很是流暢沒有任何延遲. 經過多方查證, 我測試了 MacVim 在 Mac 系統下的流暢程度. 果真有驚喜.
MacVim, 經過 Homebrew 安裝
MacVim
是 vim
在 Mac 系統的移植, 其內核與官方版本保持一致. 也就是說若是官方版本的 vim
在 Mac 上能實現什麼功能, 那麼 MacVim
也能實現相同的功能.
經過 Homebrew 安裝的話只須要用到命令 brew install macvim
. 安裝完成後在終端使用 mvim
便可打開 MacVim
桌面程序.
若是想經過終端打開 MacVim
的命令行版本, 使用 mvim -v [filename]
便可.
注: 因爲經過 Homebrew
安裝的絕大部分包都沒有 GUI, 所以 Homebrew
不會將包移入 /Applications
, 這致使了若是想在桌面上雙擊一個文件來使用 MacVim
打開很難實現, 並且在 Mac 的 LaunchPad
裏是找不到 MacVim
的(即便它是一個 GUI 軟件)
所以, 有了下一個解決方法.
MacVim, 經過 Homebrew Cask 安裝
Cask
是 Homebrew
的一個軟件管理程序. Homebrew
自己就已是包管理工具了, 其下的 Cask
又能管理程序, 一層套一層, 真會玩. 不過 Homebrew
絕大部分包都是一些環境, 而不是平常用戶操做的交互式軟件. 而 Cask
絕大部分包都是 GUI 軟件. 經過 Cask
咱們能安裝絕大部分咱們平常須要的軟件, 好比 QQ, 音樂, 瀏覽器, 各類工具...
經過 brew install cask
安裝 Cask
包. 安裝完成後再經過 brew install macvim --cask
來安裝 MacVim
.
安裝完成後你能夠經過終端得知 MacVim
自動將 mvim
命令與路徑 /usr/local/bin
裏的 vim
, gvim
, view
等命令進行了綁定. 這表示在 系統變量 PATH
爲 /usr/local/bin
第一的時候, 咱們只要是使用 vim
, gvim
, view
中的任意一個都會打開 MacVim
桌面端程序.
若是此時仍是想用 MacVim
以命令行模式打開文件的話可使用 mvim -v
或者 vim -v
或者其餘幾個綁定的命令. 固然我爲了方便直接在 ~/.zshrc
(我是用的是 zsh) 中設置了 alias.
alias vim='mvim -v'
複製代碼
設置完記得使用 source ~/.zshrc
或者重啓終端來重載 ~/.zshrc
經過 MacVim
與 終端 vim
的安裝體驗對比, 總結了 MacVim
的以下優缺點(一樣對應 vim
的優缺點):
優勢
缺點
總結
若是必須在 Mac 上使用 vim, 並且對流暢度要求比較高, 那麼就是用 MacVim 吧.
若是絕大多數工做環境都在終端上完成, 那麼就使用終端 vim
.
若是要求兼具了以上二者, 就等待吧, 等官方解決 Mac 系統上的延遲問題
在 CentOS 中咱們可使用以下方法安裝 vim
可是通過屢次試驗以後發現這三種方法的前兩種都是剪貼板缺失的 vim, 也就意味着不能與系統剪貼板進行交互, 所以最好安裝 GUI 版 Vim
sudo yum install vim-X11
複製代碼
調用 vim
時使用 vimx
代替 vim
安裝 vim-gtk
or vim-gnome
.
安裝 install gvim
模式是 vim 與其餘編輯器的最重要區別之一, 簡單來講就是一樣一個界面的一樣操做在不一樣模式下會產生不一樣的效果. 最經常使用的模式有 Normal Mode
, Insert Mode
, Visual Mode
, 與 Command Line Mode
Vim 默認模式, 又稱爲命令模式, 可以使用 hjkl 進行移動和簡單編輯
該模式下能夠盡情地輸入, 普通模式經過 i
, a
, o
, cc
等命令可進入插入模式.
與普通模式相似, 不一樣的是當移動時會進行擴展當前的選擇區域. 普通模式按 v
(進入字符選擇模式) 或 V
(進入行選擇模式)進入該模式
在該模式下能夠在窗口的下方輸入一行命令, 而後執行. 當一條命令執行完會自動退出命令模式進入普通模式.
命令模式經過輸入 :
進行開啓
新輸入的文本會替換光標所在處的文本, 並使光標依次向後移動.
普通模式下經過按 R
進入該模式
與命令模式類似, 不一樣的是在該模式下可執行屢次命令不會自動退出命令模式. 直至輸入 :visual
退出該模式
在普通模式下經過按 Q
能夠進入該模式
當咱們寫了腳本或者不喜歡某些按鍵的觸發方式, 咱們固然能夠將其改成咱們認爲最適合咱們的鍵位, vim 對按鍵映射作了極爲精細的區分, 讓咱們能夠更好地掌控全局.
<k0>-<k9>
: 小鍵盤數字 0 到 9<S-x>
: 大寫 S 配合 x, 意味着 shift+x 組合鍵<C-x>
: 大寫 C 配合 x, 意味着 ctrl+x 組合鍵<A-x>
: 大寫 A 配合 x, 意味着 alt+x 組合鍵<ESC>
: ESC 鍵<BS>
: backspace 退格鍵<CR>
: ENTER 回車鍵<Space>
: 空格鍵<Shift>
: shift 鍵<Ctrl>
: ctrl 鍵<Alt>
: alt 鍵<F1>-<F12>
: F1 到 F12 功能鍵由於 vim 有多種模式, 所以咱們能夠針對不一樣的模式設置不一樣的快捷鍵映射
map
: 用於正常模式, 但是模式, 選擇模式, 操做待決模式
nmap
: 用於正常模式
vmap
: 用於可視模式與選擇模式
xmap
: 用於可視模式
smap
: 用於選擇模式
omap
: 用於操做待決模式
map!
: 用於插入模式與命令行模式
imap
: 用於插入模式
cmap
: 用於命令行模式
nore
: 不遞歸, 不然在下面的按鍵映射下按下 i 就等於按下 k, 就等於按下 j, 最後結果亂套.
nnoremap i k
nnoremap k j
nnoremap j h
複製代碼
<Leader>
: 意思就是在各類快捷鍵的最前面加上<leader>
, 避免了二義性. 以下所示, 在普通模式按下##w 時, 就完成了文件的保存工做(若是不進行自定義設置的話, 默認的 leader 鍵爲反斜槓 \
)
let mapleader="##"
nmap `<leader>` w :w<CR>
複製代碼
inoremap ' ''<esc>i " 單引號補全 // 在普通模式, 快速按下 fw, 就至關於輸入了: w<CR>, fw 能夠理解成 file\_write. "文件保存與退出 nmap fw :w `<CR>` nmap fq :q `<CR>` nmap fwq :wq `<CR>` 複製代碼
本文做者 Hanley Lee, 首發於 閃耀旅途, 若是對本文比較承認, 歡迎 Follow