Vim 5 其他編輯器的 Vim 插件

由於 Vim 的編輯方式實在是很優秀, 並且在程序員普及率比較高(大誤…), 所以很多編輯器/IDE 也都有模仿 Vim 的插件. 我現在的主力開發工具是 VSCode/IDE + Vim 插件, 既能使用 Vim 的編輯功能, 也能使用 IDE 強大的代碼提示, 重構, 調試等功能.

下面列舉幾個常用編輯器/IDE 的 Vim 插件.

VS Code

VSCode 中可以使用 VSCodeVim, 在 VS Code 插件市場裏安裝即可.

安裝好之後需要做一些配置:

  1. 在 VSCode 的 settings.json 中:
    /* ---- Vim start ---- */
    // 高亮搜索
    "vim.hlsearch": true,
    // 行寬
    "vim.textwidth": 120,
    // leader key
    "vim.leader": ";",
    // 不使用 Vim Ctrl 相關的快捷鍵
    "vim.useCtrlKeys": false,
    // 使用系統的剪切板
    "vim.useSystemClipboard": true,
    "vim.insertModeKeyBindings": [
        {
            "before": [
                "k",
                "k"
            ],
            "after": [
                "<Esc>"
            ]
        }
    ],
    "vim.visualModeKeyBindingsNonRecursive": [
        // 可視模式粘貼時不替換寄存器
        {
            "before": [
                "p",
            ],
            "after": [
                "p",
                "g",
                "v",
                "y"
            ]
        }
    ],
    "vim.normalModeKeyBindingsNonRecursive": [
        {
            "before": [
                "leader",
                "w"
            ],
            "after": [],
            "commands": [
                {
                    "command": "workbench.action.files.save",
                    "args": []
                }
            ]
        },
        {
            "before": [":"],
            "commands": [
                "workbench.action.showCommands",
            ]
        },
        {
            "before": ["k"],
            "after": ["g", "k"]
        },
        {
            "before": ["j"],
            "after": ["g", "j"]
        }
    ],
    /* ---- Vim end ---- */
  1. 我習慣把插入模式下的 Ctrl-h/j/k/l 配置成左下上右, 這可以在 VSCode 的 keybindings.json 中進行配置:
    /* ---- Vim begin ---- */
    {
        "key": "ctrl+h",
        "command": "cursorLeft",
        "when": "editorTextFocus"
    },
    {
        "key": "ctrl+l",
        "command": "cursorRight",
        "when": "editorTextFocus"
    },
    {
        "key": "ctrl+j",
        "command": "cursorDown",
        "when": "editorTextFocus"
    },
    {
        "key": "ctrl+j",
        "command": "selectNextSuggestion",
        "when": "editorTextFocus && suggestWidgetMultipleSuggestions && suggestWidgetVisible"
    },
    {
        "key": "ctrl+j",
        "command": "showNextParameterHint",
        "when": "editorTextFocus && parameterHintsMultipleSignatures && parameterHintsVisible"
    },
    {
        "key": "ctrl+k",
        "command": "cursorUp",
        "when": "editorTextFocus"
    },
    {
        "key": "ctrl+k",
        "command": "selectPrevSuggestion",
        "when": "editorTextFocus && suggestWidgetMultipleSuggestions && suggestWidgetVisible"
    },
    {
        "key": "ctrl+k",
        "command": "showPrevParameterHint",
        "when": "editorTextFocus && parameterHintsMultipleSignatures && parameterHintsVisible"
    },
    /* ---- Vim end ---- */

JetBrains 全家桶

JetBrains 全家桶可以使用 IdeaVim 這個插件, JetBrains 全家桶裏的任何一款 IDE 裏都可以安裝這個插件.

IdeaVim 有自己的 vimrc 文件, 名爲: .ideavimrc, 需要放在用戶目錄下, 其中的配置大部分都是和 Vim 一致的, 具體參考: https://github.com/JetBrains/ideavim, 這裏給我一份我常用的配置:

" ----------------
" 高亮顯示匹配的括號
set showmatch
" 高亮顯示搜索到的關鍵字
set hlsearch
" 即時搜索
set incsearch
" 智能大小寫敏感, 只要有一個字母大寫, 就大小寫敏感, 否則不敏感
set ignorecase smartcase
" ----------------

" ----------------
" 將 kk 映射成 Esc
inoremap kk <Esc>
" 防止一次跳多行
nnoremap k gk
nnoremap j gj
" 在可視模式下使用p粘貼時不替換寄存器內容
vnoremap p "_dP

" 將 leader 配置爲 ;
let mapleader=";"
" 按 <leader>w 保存文件
nnoremap <leader>w :w<CR>
" 可視模式下按 <leader>y 將內容寫入系統寄存器
vnoremap <leader>y "+y
" 按 <leader>p 將系統寄存器中的內容粘貼出來
nnoremap <leader>p "+p
" ----------------

除此之外, 在 IDE 中, 將 left, down, up, right 映射成 Ctrl-h/j/k/l, 這樣在插入模式下也可以移動了.

另外注意: 在 IDE 中, 如果使用的 IDE 快捷鍵和 Vim 快捷鍵有衝突, IDE 會提示使用誰的, 自行選擇即可. 也可在 IDE 設置中進行統一設置.

Eclipse

在 Eclipse 中, 可以使用 vrapper, 通過 Eclipse Marketplace 安裝即可, 如果不行的話, 到其官網上下載, 手動安裝.

vrapper 也有自己的 vimrc 文件: _vrapperrc, 同樣需要放在用戶目錄下, 配置方式參照官方文檔: http://vrapper.sourceforge.net/documentation/

我的常用配置:

inoremap kk <Esc>
let mapleader=";"
nmap <leader>w :w<CR>
vnoremap p "_dP
" 可視模式下按 <leader>y 將內容寫入系統寄存器
vnoremap <leader>y "+y
" 按 <leader>p 將系統寄存器中的內容粘貼出來
nnoremap <leader>p "+p

同樣的, 在 Eclipse 中, 把 previous column, down, next column, up 映射成 Ctrl-h/j/k/l 即可.

總結

Vim 系列的文章到此就結束了, 你可能會說: 你還沒講怎麼使用 Vim 進行 C/C++/Java/Python/Web 開發呢?

不吹不黑, Vim 確實很優秀, 但是在當今的環境下, 完全使用 Vim 作爲開發工具不太現實, 即使是我現在使用 Vim, 更多的是使用它的編輯功能, 開發的話, 更依賴別的 IDE. 把 Vim 打造成 IDE 實在太麻煩, 而且還不一定有其他 IDE 好用. 學會 Vim 的基本使用, 在其他 IDE 中裝上 Vim 插件, 也可以用的很舒服. 而 Vim 本身, 我更願意把它當作一個文本編輯器.

有時候我會想, 上古時期的程序員使用 Vim 編寫出了龐大的軟件世界, 那真是一個英雄輩出的年代, Vim 既是他們手中的神兵利器, 也體現了那個時代程序員的智慧(Emacs: 我不配擁有姓名嗎?).

但是時代在前進, 即使 Vim 是神器, 在某些方面, 終究會被新的工具超越, 這不是什麼悲哀的事情, 對於我們程序員來說, 反而是件好事, 我們應該接受新事物. 反過來說, Vim 的一些思想和用法依然是非常優秀的, 且對於用慣了普通編輯器的人來說, Vim 就是新事物, 值得認可和學習. 所以我希望大家能去了解它, 嘗試使用它, 相信它能提升你的效率, 給你帶來幫助.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章