神級(jí)編輯器 Vim 使用 - 1.基礎(chǔ)篇

最近一段時(shí)間, 看了兩本關(guān)于 vim 的書, 重新學(xué)了一遍 vim, 在感慨 vim 強(qiáng)大的同時(shí), 也為從前的自滿感到汗顏, 我拿起了從前做的關(guān)于 vim 的筆記, 重新梳理了一遍, 作為一個(gè)系列分享到網(wǎng)上, 主要目的是想讓更多 vim 的愛好者能夠掌握更多的操作技巧.

本系列 vim 筆記的目的不是從零教會(huì)你如何操作 vim, 而是作為一本手冊(cè)或者擴(kuò)展你的視野, 讓你知道原來 vim 還能這么用.

希望你能從本系列教程中收獲到你感興趣的部分內(nèi)容!

本系列教程共分為以下四個(gè)部分:

  1. 神級(jí)編輯器 Vim 使用 - 1.基礎(chǔ)篇
  2. 神級(jí)編輯器 Vim 使用 - 2.操作篇
  3. 神級(jí)編輯器 Vim 使用 - 3.插件篇
  4. 神級(jí)編輯器 Vim 使用 - 4.正則操作篇
  5. 神級(jí)編輯器 Vim 使用 - 5.最后
himg

vim 是否值得學(xué)習(xí)

網(wǎng)上有很多形容 vim 的學(xué)習(xí)曲線是如何陡峭的說法. 人, 最恐懼未知的事情. 如果有人給你說: 你花一天的時(shí)間找一個(gè)入門教程進(jìn)行學(xué)習(xí)就可以學(xué)會(huì)基礎(chǔ)操作, 你會(huì)學(xué)習(xí) vim 嗎? 絕大部分人都是會(huì)的, 其實(shí)事實(shí)也就是這樣, 如果只是基礎(chǔ)操作的話 1 天時(shí)間絕對(duì)是夠了. 但是絕大多數(shù)人得不到這樣的答案, 所以他們關(guān)上了這扇窗.

在我看來, vim 的學(xué)習(xí)投入與產(chǎn)出的性價(jià)比是很高的, 學(xué)習(xí)了 vim 后你會(huì)有如下的一系列好處:

  • vim 基于終端, 熟練掌握 vim 后你對(duì)終端的理解也會(huì)變得更為深刻
  • vim 可以聯(lián)合終端中的其他工具共同組成你的工具鏈(譬如 git)
  • Atom, Sublime, VSCode, NOTEPAD++ 等工具泛濫的如今, 你可以選擇一個(gè)有著近 40 年歷史的經(jīng)過了時(shí)間考驗(yàn)的編輯器
  • 操作遠(yuǎn)程服務(wù)器時(shí)經(jīng)常需要在終端中進(jìn)行文本編輯, vim 可以讓你如履平地
  • vim 支持所有平臺(tái), 你可以使用一份配置文件全平臺(tái)通用
  • 裝 13

編輯器的切換是有成本的, 而且成本不小. 任何事情做到一半再去做另外的事情絕對(duì)比從一而終的人損失大得多, 因此選擇一個(gè)適合自己的編輯器作為以后的伙伴是一件應(yīng)該慎重的事情, 而使用過 vim 的人很少會(huì)再換用其他的編輯器, 這應(yīng)該能說明很多問題.

有些人持有工具無用論的觀點(diǎn), 認(rèn)為寫好代碼才是一切, 事實(shí)確實(shí)是這樣. 但是難道有人會(huì)拒絕更快速, 更高效的寫完一段優(yōu)雅的代碼嗎? 這兩者并非是魚和熊掌不可兼得, 我們都可以有.

這方面話題比較容易引戰(zhàn), 點(diǎn)到為止, 具體如何交由讀者自行判斷.

Let's go!

安裝

第一步當(dāng)然是安裝, 這里對(duì) MacOSLinux 進(jìn)行安裝示范

MacOS

不同版本安裝

  1. 系統(tǒng)內(nèi)置

    Mac OS 默認(rèn)內(nèi)置 vim, 在沒有安裝任何其他版本 vim 的情況下在終端中輸入 vim --version 可看到如下圖:

    himg

    + 代表含有的功能, - 代表不包含的功能. 可以看到系統(tǒng)內(nèi)置 Vimclipboard 選項(xiàng)為 - , 代表沒有剪貼板功能, 也就是說不會(huì)與系統(tǒng)剪貼板有任何互動(dòng), 即在 vim 中的內(nèi)容無法復(fù)制到另一個(gè)程序中, 無論如何設(shè)置都無法改變. 這是最大的區(qū)別.

    而且由于是系統(tǒng)內(nèi)置, 所以如果想要手動(dòng)升級(jí)的話沒有可能, 只能等到系統(tǒng)更新的時(shí)候 Apple 更新官方內(nèi)置 vim .

  2. 官方版 Vim, 通過 Homebrew 安裝

    在終端輸入 brew install vim 可以通過包管理工具 Homebrew 來安裝官方版本 Vim. 安裝完后的 vim 位置在 /usr/local/bin/vim (通過系統(tǒng)命令 which vim 可以知道具體程序的路徑), 而系統(tǒng)自帶的 vim 位置在 /usr/bin/vim, 如果要使用通過 Homebrew 安裝的 Vim, 則必須將系統(tǒng)識(shí)別的環(huán)境變量 PATH 順序調(diào)整為

    /usr/local/bin
    /usr/bin
    /bin
    /usr/sbin
    /sbin
    

    調(diào)整 PATH 順序方法: 打開路徑 /private/etc/paths (此為隱藏路徑, 需要打開顯示隱藏文件開關(guān)才能看到), 使用任意文本編輯器打開修改并保存. 如下圖:

    himg

    這樣設(shè)置之后當(dāng)在終端中輸入 vim 時(shí)系統(tǒng)會(huì)先對(duì) /usr/local/bin 路徑進(jìn)行檢索, 如果此路徑?jīng)]有的話在對(duì) /usr/bin 進(jìn)行檢索, 以此類推. 此時(shí)再次驗(yàn)證 which vim 命令, 如果返回了 /usr/local/bin 就說明設(shè)置成功. 以后只要是使用 vim [filename] 即可使用通過 Homebrew 安裝的 vim 來打開了.

    此時(shí)通過 vim --version 可看到如下圖

    himg

    最大的改變是 clipboard 選項(xiàng)變?yōu)榱?+, 而且很多功能也變?yōu)榱?+ .

    通過 Homebrew 安裝的 vim 一切都很好, 我也用了很長(zhǎng)一段時(shí)間, 但是有兩個(gè)問題一直困擾著我:

    1. 使用輸入法插件在插入模式與普通模式切換之間有較大延遲, 例如在退出輸入模式后會(huì)有 2-3 秒的延遲, 在這段延遲中如果我操作了鍵盤任何鍵位, 結(jié)果將被鍵入到輸入法中. 體驗(yàn)極差.
    2. 速度. 在編輯較長(zhǎng)的 Markdown 文件時(shí), 如果開啟了語(yǔ)法渲染以及底部狀態(tài)欄插件的話會(huì)在快速移動(dòng)光標(biāo)過程中有較大延遲. 這種感覺在遇到語(yǔ)法段落結(jié)構(gòu)復(fù)雜, 且光標(biāo)移動(dòng)較快時(shí)最為明顯. 極大的影響了使用感受.

    如果 vim 一直是這種問題的話也當(dāng)不得 編輯器之神 的稱呼了. 我上網(wǎng)搜索后發(fā)現(xiàn)有很多人都跟我一樣注意到了這一點(diǎn). Mac 終端上的 vim 速度慢, 卡頓, 在 Linux 下就非常流暢沒有任何延遲. 通過多方查證, 我測(cè)試了 MacVim 在 Mac 系統(tǒng)下的流暢程度. 果然有驚喜.

  3. MacVim, 通過 Homebrew 安裝

    MacVimvim 在 Mac 系統(tǒng)的移植, 其內(nèi)核與官方版本保持一致. 也就是說如果官方版本的 vim 在 Mac 上能實(shí)現(xiàn)什么功能, 那么 MacVim 也能實(shí)現(xiàn)相同的功能.

    通過 Homebrew 安裝的話只需要用到命令 brew install macvim. 安裝完成后在終端使用 mvim 即可打開 MacVim 桌面程序.

    如果想通過終端打開 MacVim 的命令行版本, 使用 mvim -v [filename] 即可.

    注: 由于通過 Homebrew 安裝的絕大部分包都沒有 GUI, 因此 Homebrew 不會(huì)將包移入 /Applications, 這導(dǎo)致了如果想在桌面上雙擊一個(gè)文件來使用 MacVim 打開很難實(shí)現(xiàn), 而且在 Mac 的 LaunchPad 里是找不到 MacVim 的(即使它是一個(gè) GUI 軟件)

    因此, 有了下一個(gè)解決方法.

  4. MacVim, 通過 Homebrew Cask 安裝

    CaskHomebrew 的一個(gè)軟件管理程序. Homebrew 本身就已經(jīng)是包管理工具了, 其下的 Cask 又能管理程序, 一層套一層, 真會(huì)玩. 不過 Homebrew 絕大部分包都是一些環(huán)境, 而不是日常用戶操作的交互式軟件. 而 Cask 絕大部分包都是 GUI 軟件. 通過 Cask 我們能安裝絕大部分我們?nèi)粘P枰能浖? 比如 QQ, 音樂, 瀏覽器, 各種工具...

    通過 brew install cask 安裝 Cask 包. 安裝完成后再通過 brew install macvim --cask 來安裝 MacVim .

    himg

    安裝完成后你可以通過終端得知 MacVim 自動(dòng)將 mvim 命令與路徑 /usr/local/bin 里的 vim, gvim, view 等命令進(jìn)行了綁定. 這表示在 系統(tǒng)變量 PATH/usr/local/bin 第一的時(shí)候, 我們只要是使用 vim, gvim, view 中的任意一個(gè)都會(huì)打開 MacVim 桌面端程序.

    如果此時(shí)還是想用 MacVim 以命令行模式打開文件的話可以使用 mvim -v 或者 vim -v 或者其他幾個(gè)綁定的命令. 當(dāng)然我為了方便直接在 ~/.zshrc (我是用的是 zsh) 中設(shè)置了 alias.

    alias vim='mvim -v'
    

    設(shè)置完記得使用 source ~/.zshrc 或者重啟終端來重載 ~/.zshrc

對(duì)比與總結(jié)

通過 MacVim 與 終端 vim 的安裝體驗(yàn)對(duì)比, 總結(jié)了 MacVim 的如下優(yōu)缺點(diǎn)(同樣對(duì)應(yīng) vim 的優(yōu)缺點(diǎn)):

  1. 優(yōu)點(diǎn)

    • 有系統(tǒng)級(jí)別的復(fù)制粘貼撤銷快捷鍵,
    • 滾動(dòng)更流暢,
    • 輸入法切換速度更快,
    • 右側(cè)的導(dǎo)航滑軌也有了作用
  2. 缺點(diǎn)

    • 沒有集成在終端中意味著與終端切換的成本更大
  3. 總結(jié)

    如果必須在 Mac 上使用 vim, 而且對(duì)流暢度要求比較高, 那么就是用 MacVim 吧.

    如果絕大多數(shù)工作環(huán)境都在終端上完成, 那么就使用終端 vim .

    如果要求兼具了以上兩者, 就等待吧, 等官方解決 Mac 系統(tǒng)上的延遲問題

CentOS

在 CentOS 中我們可以使用如下方法安裝 vim

  • 源碼編譯
  • yum 安裝
  • GUI 版 vim 安裝

但是經(jīng)過多次試驗(yàn)之后發(fā)現(xiàn)這三種方法的前兩種都是剪貼板缺失的 vim, 也就意味著不能與系統(tǒng)剪貼板進(jìn)行交互, 因此最好安裝 GUI 版 Vim

sudo yum install vim-X11

調(diào)用 vim 時(shí)使用 vimx 代替 vim

Debian && Ubuntu

安裝 vim-gtk or vim-gnome.

Arch Linux

安裝 install gvim

Vim 模式區(qū)分

模式是 vim 與其他編輯器的最重要區(qū)別之一, 簡(jiǎn)單來說就是同樣一個(gè)界面的同樣操作在不同模式下會(huì)產(chǎn)生不同的效果. 最常用的模式有 Normal Mode, Insert Mode, Visual Mode, 與 Command Line Mode

普通模式(Normal mode)

Vim 默認(rèn)模式, 又稱為命令模式, 可使用 hjkl 進(jìn)行移動(dòng)和簡(jiǎn)單編輯

插入模式(Insert Mode)

該模式下可以盡情地輸入, 普通模式通過 i, a, o, cc 等命令可進(jìn)入插入模式.

可視模式(Visual Mode)

與普通模式類似, 不同的是當(dāng)移動(dòng)時(shí)會(huì)進(jìn)行擴(kuò)展當(dāng)前的選擇區(qū)域. 普通模式按 v(進(jìn)入字符選擇模式) 或 V (進(jìn)入行選擇模式)進(jìn)入該模式

命令行模式(Command Line Mode)

在該模式下可以在窗口的下方輸入一行命令, 然后執(zhí)行. 當(dāng)一條命令執(zhí)行完會(huì)自動(dòng)退出命令模式進(jìn)入普通模式.

命令模式通過輸入 : 進(jìn)行開啟

替換模式(Replace Mode)

新輸入的文本會(huì)替換光標(biāo)所在處的文本, 并使光標(biāo)依次向后移動(dòng).

普通模式下通過按 R 進(jìn)入該模式

Ex Mode

與命令模式相似, 不同的是在該模式下可執(zhí)行多次命令不會(huì)自動(dòng)退出命令模式. 直至輸入 :visual 退出該模式

在普通模式下通過按 Q 可以進(jìn)入該模式

vim 鍵位映射

當(dāng)我們寫了腳本或者不喜歡某些按鍵的觸發(fā)方式, 我們當(dāng)然可以將其改為我們認(rèn)為最適合我們的鍵位, vim 對(duì)按鍵映射做了極為精細(xì)的區(qū)分, 讓我們可以更好地掌控全局.

鍵表

  • <k0>-<k9>: 小鍵盤數(shù)字 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 功能鍵

前綴

因?yàn)?vim 有多種模式, 因此我們可以針對(duì)不同的模式設(shè)置不同的快捷鍵映射

  • map: 用于正常模式, 可是模式, 選擇模式, 操作待決模式

  • nmap: 用于正常模式

  • vmap: 用于可視模式與選擇模式

  • xmap: 用于可視模式

  • smap: 用于選擇模式

  • omap: 用于操作待決模式

  • map!: 用于插入模式與命令行模式

  • imap: 用于插入模式

  • cmap: 用于命令行模式

  • nore: 不遞歸, 否則在下面的按鍵映射下按下 i 就等于按下 k, 就等于按下 j, 最后結(jié)果亂套.

    nnoremap  i   k
    nnoremap  k  j
    nnoremap  j   h
    
  • <Leader>: 意思就是在各種快捷鍵的最前面加上<leader> , 避免了二義性. 如下所示, 在普通模式按下##w 時(shí), 就完成了文件的保存工作(如果不進(jìn)行自定義設(shè)置的話, 默認(rèn)的 leader 鍵為反斜杠 \)

    let mapleader="##"
    nmap `<leader>` w    :w<CR>
    

實(shí)際修改舉例

inoremap ' ''<esc>i                   " 單引號(hào)補(bǔ)全
// 在普通模式, 快速按下 fw, 就相當(dāng)于輸入了: w<CR>, fw 可以理解成 file\_write.
"文件保存與退出
nmap fw     :w `<CR>`
nmap fq     :q `<CR>`
nmap fwq    :wq `<CR>`
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容