神級編輯器 Vim 使用 - 1.基礎篇

最近一段時間, 看了兩本關於 vim 的書, 從新學了一遍 vim, 在感慨 vim 強大的同時, 也爲從前的自滿感到汗顏, 我拿起了從前作的關於 vim 的筆記, 從新梳理了一遍, 做爲一個系列分享到網上, 主要目的是想讓更多 vim 的愛好者可以掌握更多的操做技巧.html

本系列 vim 筆記的目的不是從零教會你如何操做 vim, 而是做爲一本手冊或者擴展你的視野, 讓你知道原來 vim 還能這麼用.git

但願你能從本系列教程中收穫到你感興趣的部份內容!vim

本系列教程共分爲如下四個部分:瀏覽器

  1. 神級編輯器 Vim 使用 - 1.基礎篇
  2. 神級編輯器 Vim 使用 - 2.操做篇
  3. 神級編輯器 Vim 使用 - 3.插件篇
  4. 神級編輯器 Vim 使用 - 4.正則操做篇
  5. 神級編輯器 Vim 使用 - 5.最後

himg

vim 是否值得學習

網上有不少形容 vim 的學習曲線是如何陡峭的說法. 人, 最恐懼未知的事情. 若是有人給你說: 你花一天的時間找一個入門教程進行學習就能夠學會基礎操做, 你會學習 vim 嗎? 絕大部分人都是會的, 其實事實也就是這樣, 若是隻是基礎操做的話 1 天時間絕對是夠了. 可是絕大多數人得不到這樣的答案, 因此他們關上了這扇窗.bash

在我看來, vim 的學習投入與產出的性價比是很高的, 學習了 vim 後你會有以下的一系列好處:服務器

  • vim 基於終端, 熟練掌握 vim 後你對終端的理解也會變得更爲深入
  • vim 能夠聯合終端中的其餘工具共同組成你的工具鏈(譬如 git)
  • Atom, Sublime, VSCode, NOTEPAD++ 等工具氾濫的現在, 你能夠選擇一個有着近 40 年曆史的通過了時間考驗的編輯器
  • 操做遠程服務器時常常須要在終端中進行文本編輯, vim 可讓你如履平地
  • vim 支持全部平臺, 你可使用一份配置文件全平臺通用
  • 裝 13

編輯器的切換是有成本的, 並且成本不小. 任何事情作到一半再去作另外的事情絕對比從一而終的人損失大得多, 所以選擇一個適合本身的編輯器做爲之後的夥伴是一件應該慎重的事情, 而使用過 vim 的人不多會再換用其餘的編輯器, 這應該能說明不少問題.markdown

有些人持有工具無用論的觀點, 認爲寫好代碼纔是一切, 事實確實是這樣. 可是難道有人會拒絕更快速, 更高效的寫完一段優雅的代碼嗎? 這二者並不是是魚和熊掌不可兼得, 咱們均可以有.編輯器

這方面話題比較容易引戰, 點到爲止, 具體如何交由讀者自行判斷.工具

Let's go!oop

安裝

第一步固然是安裝, 這裏對 MacOSLinux 進行安裝示範

MacOS

不一樣版本安裝

  1. 系統內置

    Mac OS 默認內置 vim, 在沒有安裝任何其餘版本 vim 的狀況下在終端中輸入 vim --version 可看到以下圖:

    himg

    + 表明含有的功能, - 表明不包含的功能. 能夠看到系統內置 Vimclipboard 選項爲 - , 表明沒有剪貼板功能, 也就是說不會與系統剪貼板有任何互動, 即在 vim 中的內容沒法複製到另外一個程序中, 不管如何設置都沒法改變. 這是最大的區別.

    並且因爲是系統內置, 因此若是想要手動升級的話沒有可能, 只能等到系統更新的時候 Apple 更新官方內置 vim .

  2. 官方版 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 (此爲隱藏路徑, 須要打開顯示隱藏文件開關才能看到), 使用任意文本編輯器打開修改並保存. 以下圖:

    himg

    這樣設置以後當在終端中輸入 vim 時系統會先對 /usr/local/bin 路徑進行檢索, 若是此路徑沒有的話在對 /usr/bin 進行檢索, 以此類推. 此時再次驗證 which vim 命令, 若是返回了 /usr/local/bin 就說明設置成功. 之後只要是使用 vim [filename] 便可使用經過 Homebrew 安裝的 vim 來打開了.

    此時經過 vim --version 可看到以下圖

    himg

    最大的改變是 clipboard 選項變爲了 +, 並且不少功能也變爲了 + .

    經過 Homebrew 安裝的 vim 一切都很好, 我也用了很長一段時間, 可是有兩個問題一直困擾着我:

    1. 使用輸入法插件在插入模式與普通模式切換之間有較大延遲, 例如在退出輸入模式後會有 2-3 秒的延遲, 在這段延遲中若是我操做了鍵盤任何鍵位, 結果將被鍵入到輸入法中. 體驗極差.
    2. 速度. 在編輯較長的 Markdown 文件時, 若是開啓了語法渲染以及底部狀態欄插件的話會在快速移動光標過程當中有較大延遲. 這種感受在遇到語法段落結構複雜, 且光標移動較快時最爲明顯. 極大的影響了使用感覺.

    若是 vim 一直是這種問題的話也當不得 編輯器之神 的稱呼了. 我上網搜索後發現有不少人都跟我同樣注意到了這一點. Mac 終端上的 vim 速度慢, 卡頓, 在 Linux 下就很是流暢沒有任何延遲. 經過多方查證, 我測試了 MacVim 在 Mac 系統下的流暢程度. 果真有驚喜.

  3. MacVim, 經過 Homebrew 安裝

    MacVimvim 在 Mac 系統的移植, 其內核與官方版本保持一致. 也就是說若是官方版本的 vim 在 Mac 上能實現什麼功能, 那麼 MacVim 也能實現相同的功能.

    經過 Homebrew 安裝的話只須要用到命令 brew install macvim. 安裝完成後在終端使用 mvim 便可打開 MacVim 桌面程序.

    若是想經過終端打開 MacVim 的命令行版本, 使用 mvim -v [filename] 便可.

    注: 因爲經過 Homebrew 安裝的絕大部分包都沒有 GUI, 所以 Homebrew 不會將包移入 /Applications, 這致使了若是想在桌面上雙擊一個文件來使用 MacVim 打開很難實現, 並且在 Mac 的 LaunchPad 裏是找不到 MacVim 的(即便它是一個 GUI 軟件)

    所以, 有了下一個解決方法.

  4. MacVim, 經過 Homebrew Cask 安裝

    CaskHomebrew 的一個軟件管理程序. Homebrew 自己就已是包管理工具了, 其下的 Cask 又能管理程序, 一層套一層, 真會玩. 不過 Homebrew 絕大部分包都是一些環境, 而不是平常用戶操做的交互式軟件. 而 Cask 絕大部分包都是 GUI 軟件. 經過 Cask 咱們能安裝絕大部分咱們平常須要的軟件, 好比 QQ, 音樂, 瀏覽器, 各類工具...

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

    himg

    安裝完成後你能夠經過終端得知 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 的優缺點):

  1. 優勢

    • 有系統級別的複製粘貼撤銷快捷鍵,
    • 滾動更流暢,
    • 輸入法切換速度更快,
    • 右側的導航滑軌也有了做用
  2. 缺點

    • 沒有集成在終端中意味着與終端切換的成本更大
  3. 總結

    若是必須在 Mac 上使用 vim, 並且對流暢度要求比較高, 那麼就是用 MacVim 吧.

    若是絕大多數工做環境都在終端上完成, 那麼就使用終端 vim .

    若是要求兼具了以上二者, 就等待吧, 等官方解決 Mac 系統上的延遲問題

CentOS

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

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

可是通過屢次試驗以後發現這三種方法的前兩種都是剪貼板缺失的 vim, 也就意味着不能與系統剪貼板進行交互, 所以最好安裝 GUI 版 Vim

sudo yum install vim-X11
複製代碼

調用 vim 時使用 vimx 代替 vim

Debian && Ubuntu

安裝 vim-gtk or vim-gnome.

Arch Linux

安裝 install gvim

Vim 模式區分

模式是 vim 與其餘編輯器的最重要區別之一, 簡單來講就是一樣一個界面的一樣操做在不一樣模式下會產生不一樣的效果. 最經常使用的模式有 Normal Mode, Insert Mode, Visual Mode, 與 Command Line Mode

普通模式(Normal mode)

Vim 默認模式, 又稱爲命令模式, 可以使用 hjkl 進行移動和簡單編輯

插入模式(Insert Mode)

該模式下能夠盡情地輸入, 普通模式經過 i, a, o, cc 等命令可進入插入模式.

可視模式(Visual Mode)

與普通模式相似, 不一樣的是當移動時會進行擴展當前的選擇區域. 普通模式按 v(進入字符選擇模式) 或 V (進入行選擇模式)進入該模式

命令行模式(Command Line Mode)

在該模式下能夠在窗口的下方輸入一行命令, 而後執行. 當一條命令執行完會自動退出命令模式進入普通模式.

命令模式經過輸入 : 進行開啓

替換模式(Replace Mode)

新輸入的文本會替換光標所在處的文本, 並使光標依次向後移動.

普通模式下經過按 R 進入該模式

Ex Mode

與命令模式類似, 不一樣的是在該模式下可執行屢次命令不會自動退出命令模式. 直至輸入 :visual 退出該模式

在普通模式下經過按 Q 能夠進入該模式

vim 鍵位映射

當咱們寫了腳本或者不喜歡某些按鍵的觸發方式, 咱們固然能夠將其改成咱們認爲最適合咱們的鍵位, 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

相關文章
相關標籤/搜索