當前位置: 妍妍網 > 碼農

IDEA + Vim,竟可以這麽牛逼!!

2024-06-03碼農

轉自:撿田螺的小男孩

本教程並不是單純的 vim 操作介紹,更多的是與 Intellj Idea 進行配合。需要同時具備 Intellj Idea vim 使用基礎的同學學習。

1

簡介

Vim 是一個高度可配置的文字編輯器,旨在高效地建立和更改任何型別的文本。它作為「 vi 」包含在大多數 UNIX 系統和 Apple OS X 中。 Vim 非常穩定,並且正在不斷開發以變得更好。

它的特點包括:

  1. 持久的、多級復原樹

  2. 廣泛的外掛程式系統

  1. 支持數百種程式語言和檔格式

  2. 強大的搜尋和替換

  3. 與許多工具整合

為什麽要在 Intellj Idea 中使用 Vim?在我們學習某一項新技能,或者新的程式語言,新的編程模式。我們應該自問讓我們做出這樣的行為的驅動力是什麽?學習完它之後它能解決你什麽樣的疼點問題。這樣我們學習起來會更有動力一些。

讓我嘗試學習 Vim 的理由:

Mac 平台下 Intellj Idea 的很多的常用的 action 都是需要 command + option 這個組合鍵,從我轉到 Mac 下,就一直很懊惱,個人感覺這個按鍵很反人類。

作為一名伺服端開發同學,還是會經常需要在 linux 伺服器上去修改伺服器的系統設定檔。比如 nginx 配置,這個時候不可避免的需要使用到 vim 編輯器。如果你不熟練 操作起來還是相當的難受的。

Intellj Idea 中安裝了 vim 外掛程式之後。是一個互補的狀態 利用各自的優勢 使得編程更有效率。

2

安裝

Intellj Idea 中 安裝以下三個外掛程式

  • IdeaVim

  • IdeaVim-EasyMotion

  • IdeaVimExtension

  • 發現圖示像上面一樣編程一個小方塊的時候 就代表外掛程式安裝成功

    3

    Vim

    不得不說 vim 的學習成本還是有的,典型的入門很難 入門之後就會愛不釋手。 我這裏對一些基礎操作進行一些簡單的總結和整理。

    練習一:方向鍵聯系 hjkl

    根據我自己的經驗總結下來從原生編輯器過度到 Vim 最不習慣的當屬方向鍵的移動從原本的 方向鍵變成了 hjkl

    這個其實沒有太多好說的 就是需要克服這一關。多練就行。(下圖為 Gif 演示)

    練習二:復制 & 貼上

    CV 大法好,畢竟大家有時候自嘲都是 C V 工程師 😈 所以 復制 貼上 還是需要在第一時間學會,這樣才能更好的 coding 💩。

  • yy 復制當前行

  • p 貼上

  • 練習三:在學多一點點

    在學習一些其他的命令 送出效率。

    y p f h c i

    GIF 中步驟如下:

    1. yy 復制當前行 private String username;

    2. p 將復制的內容進行貼上

    3. f; 跳轉到字元 ; 處,這裏其實就是相當於行位。

    4. h 向左移動一個光標

    5. ciw 刪除當前處的詞,並進入 插入模式

    6. password 輸入 password 完成

    v j d


    GIF 中步驟如下:

    1. V 進入內容選擇模式

    2. kkk 向上移動 3 行,並進行選中

    3. d 刪除選中部份

    塊級刪除「常用」di* da*

    di" 刪除 " 內的內容,個人感覺這個還是非常常用了。也是初步在效率上優於傳統的 intellj idea 的操作方式。如果想要刪除之後馬上進入插入模式 可以使用 ci"

    di( 刪除 ( 內的內容,如果想要刪除之後馬上進入插入模式 可以使用 ci(

    di{ 刪除 { 內的內容,如果想要刪除之後馬上進入插入模式 可以使用 ci{

    各種進入插入模式

  • i 在光標之前,進入插入模式

  • I 在本行開頭,進入插入模式

  • a 在光標之後,進入插入模式

  • A 在本行結尾,進入插入模式

  • o 在本行之後新增一行,並進入插入模式

  • O 在本行之前新增一行,並進入插入模式

  • s 刪除當前字元,並進入插入模式

  • S 刪除當前行中的所有文本,並進入插入模式

  • 在我最開始的學習 vim 的時候只知道 i 進入插入模式。後面才知道還有這麽多種方式。

    如果你真的是切換過來之後 這裏所有的方式都能用到。

    在IDEA Intellij小技巧和外掛程式一文中簡單介紹了一下IdeaVim外掛程式。在這裏詳細總結一下這個外掛程式在日常編程中的一些常用小技巧。供有興趣使用這個外掛程式,但對Vim還不十分熟悉的朋友參考。當然基本的hjkl移動光標和幾種常見模式等等基本概念就略過不提了。為了確保只包含常用操作,這裏提到的技巧都沒有從現成文件裏抄,而是憑記憶列出(不常用自然就不記得了)。估計會有所遺漏,慢慢再補充。

    1.切換Vim模擬器狀態

    這個外掛程式允許設定一個快捷鍵一鍵開啟或關閉,在切換模式時會同時自動切換keymap,十分方便。預設鍵位是Ctrl+Alt+V,但這個鍵位覆蓋了很常用的「抽取局部變量」功能,建議重設,在setting->keymap中尋找VIM Emulator即可。

    由於開啟和關閉狀態分別使用兩套keymap,因此兩套都需要設定。可以把兩套keymap下的都設為一樣的鍵,也就是用同一個鍵切換。但個人建議設為不同的鍵,這樣能清楚知道當前處於那種模式中。並且,如果在開啟Vim的插入模式下關閉Vim模擬器,下次進入時仍然是插入模式,比較混亂(因為你關閉模擬器就是為了使用預設keymap輸入大段程式碼,重新開啟Vim模擬器就是為了使用普通模式下的命令)。因此建議把Vim keymap中的Exit Insert Mode設為與另一個keymap的Vim Emulator相同的鍵(也就是進入Vim模擬器的快捷鍵)。例如,我使用的設定是:

    Default keymap -> Vim Emulator :Ctrl+;(用Ctrl+分號開啟Vim模擬器)

    Vim keymap -> Vim Emulator : Ctrl+,(用Ctrl+逗號關閉Vim模擬器)

    Vim keymap -> Vim Emulator : Ctrl+;(用Ctrl+分號結束插入模式,進入普通模式)

    這樣,在任何時候只要連按兩下ctrl+分號,就能保證必定在Vim模擬器的普通模式中。

    2. ScrollOff參數

    啟動Intellij後在Vim模擬器下輸入命令:set so=5可以令螢幕捲動時在光標上下方保留5行預覽程式碼(也就是光標會在第5行觸發向上捲動,或者在倒數第5行觸發向下捲動)。在程式碼視窗比較狹小時(例如單步跟蹤偵錯時)非常方便。可惜僅在Vim模擬器開啟時有效。

    3.行號定位

    普通模式下輸入行號G或:行號<回車>都能快速定位到某一行。區別在於前者在輸入行號時螢幕上沒有任何提示,後者則在Vim命令輸入框中可以看到輸入過程。(題外話:Sublime Text 2也是用:行號來快速定位到某行,應該是沿用了Vim的習慣)

    4.進入修改

    進入插入模式的方式有很多,直接選用合適的方式進入插入模式比進入後再用箭頭鍵移動光標要好。常用的有:

    o -在當前行下方插入新行並自動縮排

    O -在當前行上方插入新行並自動縮排(普通模式下的大寫字母命令用shift+字母鍵輸入,下同)

    i -在當前字元左方開始插入字元

    a -在當前字元右方開始插入字元

    I -光標移動到行首並進入插入模式

    A -光標移動到行尾並進入插入模式

    s -刪除光標所在字元並進入插入模式

    S -刪除光標所在行並進入插入模式

    c<範圍> -刪除光標所在位置周圍某個範圍的文本並進入插入模式。關於範圍請看第5點,常用的組合有:caw -刪除一個單詞包括它後面的空格並開始插入;ciw -刪除一個單詞並開始插入;ci" -刪除一個字串內部文本並開始插入;c$ -從光標位置刪除到行尾並開始插入;ct字元-從光標位置刪除本行某個字元之前(保留該字元)並開始插入。等等。

    C -刪除光標位置到行尾的內容並進入插入模式(相當於c$)

    r -修改光標所在字元,然後返回普通模式

    R -進入覆蓋模式

    5.範圍操作

    某些普通模式的動作命令後面可以追加一些表示範圍的指令,表示該動作將作用在整個範圍上。這類命令常用的有:

    d<範圍> -刪除一定範圍內的文本

    c<範圍> -刪除一定範圍內的文本並進入插入模式

    y<範圍> -將範圍內的文本放入0號和"號註冊欄

    v<範圍> -選擇範圍內的文本

    =<範圍> -自動縮排範圍內的文本

    gU<範圍> -將範圍內的字元轉換為大寫

    gu<範圍> -將範圍內的字元轉換為小寫

    ><範圍> -將範圍中的內容縮排一格

    <<範圍> -將範圍中的內容取消縮排一格

    常用的範圍指令有:

    空格-光標所在位置字元。(例如gU空格-將光標位置字元轉為大寫)

    重復某些動作命令-光標所在行。(例如dd刪除一行,yy復制一行,cc刪除一行文本並開始插入,>>當前行縮排一格,==自動縮排當前行)

    $ -從光標位置到行尾

    ^ -從光標位置到行首,不包含縮排空白

    0 -從光標位置到行首,包含縮排空白

    gg -從光標位置到檔開頭

    G -從光標位置到檔結尾

    % -從光標位置到另一邊匹配的括弧

    f<字元> -從光標位置到光標右邊某個字元首次出現的位置,包括該字元

    F<字元> -從光標位置到光標左邊某個字元首次出現的位置,包括該字元

    t<字元> -從光標位置到光標右邊某個字元首次出現的位置,包括該字元

    F<字元> -從光標位置到光標左邊某個字元首次出現的位置,包括該字元

    /正規表式-從光標位置到下一個匹配正規表式的位置(跨行)

    ?正規表式-從光標位置到上一個匹配正規表式的位置(跨行)

    aw -一個單詞加一個空格(a可理解為「一個」,下同)

    iw -一個單詞(i可理解為in,下同)

    a" -一個字串包括雙引號

    i" -一個字串內部文本

    a< -一組< >包含的文本,包括<

    >號本身

    同理類推:i<, a[, i[, a(, i(

    註意:真正vim中的it範圍(一對xml標簽內部)在ideaVim中不生效。

    用/或?命令尋找時,正規表式預設大小寫敏感,如果需要不敏感,可以在正規表式開始處加上\c標誌。例如/\cabc可以匹配到ABC。下面提到的:s命令同樣適用。

    6.選擇文本

    在Vim中,選擇文本需要進入「可視模式」(Visual Mode),這個名稱比較奇怪,它的來由據說是因為在Vim的前身Vi中,選擇區域是不可見的。在Vim中選擇區域會高亮顯示,因此稱為「可視模式」。

    v -進入字元選擇模式,V -進入行選擇模式,Ctrl+v -進入塊選擇模式。

    進入相應模式後移動光標即可選中文本。過程中可按o鍵令光標在選區兩端切換。

    在塊選擇模式中選中多行,然後按I或A後輸入文本,再結束插入模式,所輸入的文本將自動加入到每一行的開頭或結尾。

    7.復制貼上

    在Vim模式下,復制貼上並不直接使用系統的剪貼簿,而是使用Vim提供的多個「寄存器」,每個寄存器都以一個字元來表示。關於寄存器的詳細說明可以看這裏http://blah.blogsome.com/2006/04/27/vim_tut_register/(隨便google的一個網頁),這裏簡單列一些常用的操作技巧(註意,vim使用雙引號"來作為選擇寄存器的命令,因此下文中的雙引號均指在普通模式下按雙引號鍵):

    a)用y命令將文本存入寄存器後,如果想在別處替換原有內容,可以先用v命令選中原有內容,然後用p命令貼上。但第一次貼上後,預設的寄存器"將被替換為剛剛刪除的內容。如果要再次貼上之前復制的內容,需要使用"0p命令組合來復制。也可以進入插入模式後用Ctrl+r 0來復制,例如ciw0命令組合將用貼上內容替換光標處的一個單詞,並停留在插入模式。

    b)在Windows下,寄存器+和*都代表系統剪貼簿,可以互換使用,選一個順手的即可。例如"+yy命令組合可將當前行復制到系統剪貼簿。ci"*命令組合則將系統剪貼簿的內容替換字串的內部文本。

    c)寄存器1至9記錄之前九次的刪除大段文本,每次超過一行的刪除操作都會導致這9個寄存器的內容發生位移,最近刪除的文本會存入寄存器1。但只有刪除超過1行時才會影響寄存器1至9,行內的刪除內容則會被存入寄存器-(減號)。如果用q命令錄制宏時不涉及跨行刪除,可以在宏中直接使用這9個寄存器來暫存文本。(在Vim中,復制內容與錄制宏共享同一套寄存器,因此我習慣把字母寄存器留給宏使用)

    d)普通模式下小寫p把寄存器內容復制到當前位置之後,大寫P把寄存器內容復制到當前位置之前。

    e)使用:regs命令可以列出當前所有寄存器的內容

    8.一些插入模式下的常用快捷鍵

    Ctrl+h -刪除光標左邊字元

    Ctrl+w -刪除光標左邊的單詞

    Ctrl+y -復制上方的一個字元

    Ctrl+e -復制下方的一個字元

    Ctrl+r 0 -插入前一次用y命令寄存的內容

    Ctrl+r * -插入系統剪貼簿的內容

    Ctrl+r <寄存器名稱> -插入指定寄存器的內容

    Ctrl+a -插入前一次插入模式所鍵入的內容

    Ctrl+o -執行一個普通模式下的命令然後返回插入模式。例如Ctrl+o A相當於按End鍵,Ctrl+o I相當於按Home鍵

    9.結束插入模式

    結束插入模式可以用ESC鍵,但鍵位太遠。其實也可以用Ctrl+[鍵結束插入模式。當然也可以用第1點自訂的Ctrl+;快捷鍵,但這不是標準vim按鍵,會養成不良習慣,不建議使用。

    10.重復操作

    普通模式下按.(小數點)可重復上一次的修改操作

    & -重復上一次的:s替換命令

    @@ -重復上一次執行的宏

    11.跳轉

    Ctrl+]跳轉到當前識別元的定義位置(相當於在當前光標位置的單詞上按住ctrl用滑鼠點選)

    Ctrl+o回退一步(go back)

    Ctrl+i前進一步(go forward)

    `.跳轉到之前修改位置

    ``在前一次跳轉位置與當前位置間切換

    行號G或:行號<回車>跳轉到某一行

    gg跳轉到檔開頭

    G跳轉到檔末尾

    H跳轉到螢幕頂端(如果設定了set

    so=n,則跳轉到第n行)

    L跳轉到螢幕底端(如果設定了set

    so=n,則跳轉到倒數第n行)

    M跳轉到螢幕中間

    f或F跳轉到本行某個字元,小寫f向右尋找,大寫F向左尋找。用;或,在匹配間切換

    t或T跳轉到本行某個字元之前,小寫t向右尋找,大寫T向左尋找。用;或,在匹配間切換

    /正規表式跳轉到下一個匹配。用n或N在匹配間切換。

    ?正規表式跳轉到上一個匹配。用n或N在匹配間切換。

    (結合前面第5點,你也許註意到了,在指定範圍時,使用跳轉命令將指定一個從光標位置到跳轉目標的區域)

    這裏補充一部份文章【vim的跳轉與回跳】的內容:

    vim的跳轉

    1. 標簽跳轉,

    1.1 跳到標簽xxx處

    1) 移動光標到xxx處, 按 CTRL+]

    2) :tag xxx

    1.2. 標簽跳轉的回跳.

    CTRL+T, 可以多次回跳

    2. 普通跳轉

    2.1 跳轉: 各種可以導致移動到當前行以外的操作.

    2.2 普通跳轉的回跳

    2.2.1 `` 可以回跳到上一個位置. 多次按``會在兩個位置間跳轉.

    2.2.2 CTRL+o, 向後跳. CTRL+i 向前跳.

    2.2.3 內部標記

    ' 或 ` 上一次的位置

    " 上次編輯該檔時的位置.

    [ 最後一次修改的起始位置(似乎不管用)

    ] 最後一次修改的結束為止(似乎不管用).

    2.2.4 marks

    2.2.4.1 :marks 現實當前可用marks

    2.2.4.2 在任意位置, 按mt, (t可以為任意字母), 就做好了一個名字為t的mark,

    可用:marks檢視, 也可用`t跳到此位置(t為上述的任意字元).

    12書簽

    在普通模式下按m<小寫字母>即可定義書簽,按`<字母>則可跳轉到某個書簽的精確位置,按'<字母>可跳轉到某個書簽所在行的行首(用來錄制宏時比較有用)。最常用的自然是mm, mn, mj, mk, ml這幾個順手的鍵位。

    真正的vim中的全域書簽m<大寫字母>在目前IdeaVim版本中不生效。需要定義全域書簽可以使用Idea原本的F11 +數位方式

    13文本替換

    使用:s/正規表式/替換文本/可在本行內替換首次出現的匹配

    使用:s/正規表式/替換文本/g在本行內替換所有出現的匹配

    使用:%s/正規表式/替換文本/g在當前檔內替換所有出現的匹配

    在可視模式下選中文本後,使用:'<,'>s/正規表式/替換文本/g命令可在選中區域中替換文本。其中'<,'>部份在可視模式下,按:冒號後自動加入,直接輸入s命令即可。但有效區域只能以行為單位。真正Vim中的\%V標誌在IdeaVim中不生效。

    11程式碼折疊

    zo -開啟折疊

    zc -關閉折疊

    14宏定義

    在IdeaVim中定義宏比Idea內建的宏功能要輕量許多。按在普通模式下q<寄存器名稱>即可開始把後續按鍵序列錄制到指定寄存器中(寄存器參考前面第7條)。錄制完畢進入普通模式再按q鍵即可停止錄制。之後用@<寄存器名稱>即可重放。需要註意的是宏和復制貼上共用一套寄存器,因此在錄制宏時就註意不要把當前宏正在使用的寄存器用來復制了。寄存器內容是自動保存的,重新開機Idea仍然生效。但IdeaVim沒有匯出宏獨立保存的功能。因此最好把用來保存宏的寄存器和用來復制貼上的寄存器分開,不要同一個寄存器有時用來記錄宏,有時用來復制貼上。我的習慣是鍵盤左手區用來保存一些長期使用的宏(比如說我有一個宏專門用來把pom.xml中的版本號抽取到property區域,原來的位置則改用${property}參照)。右手區的hjklnm鍵用來保存一些臨時宏。yuiop五個寄存器保留用來復制貼上。如果錄制的宏不涉及刪除大段程式碼,寄存器1至9也可以用來進行復制貼上。

    執行一次宏後,可以用@@命令重復上一次執行的宏。

    在Idea中錄制宏時,如果觸發了程式碼自動完成,在自動完成列表啟動的狀態輸入的字元不會被記錄。因此最好在Setting -> Code Completion -> Autopopup code completion中把延遲設為500ms以上或幹脆關掉。在錄制宏的過程中避免觸發程式碼自動完成功能。

    錄制一些長期有效的宏時,開始錄制後,最好先用0,^,T, F, $等命令把光標對齊到行首行末或某個特定起始位置(比如說用F"跳轉到字串的左邊引號),再用一個f或/指令跳轉到操作位置,這樣的宏就不用必須把光標放在某個特定字元才能使用了。

    15.一些常用組合技

    全選:ggvG

    調換兩個字元位置:xp

    復制一行:yyp

    調換兩行位置:ddp

    插入模式下到行尾繼續輸入(相當於End鍵):Ctrl+o A或Ctrl+[ A

    插入模式下到行首繼續輸入(相當於Home鍵):Ctrl+o I或Ctrl+[ I

    到類別定義位置(適用於正確縮排的public,protected類):?^p回車

    16.一些在目前版本已知沒有實作的一些常用Vim功能

    (如果對Vim不熟悉可以跳過這節)

    a)let命令(沒有let命令就無法匯出/匯入寄存器內容,也就是無法匯入宏)

    b):g命令(在文本處理中很有用的一個命令,在編程中倒是不那麽常用)

    c)!命令(執行shell命令)

    d)大部份正規表式標記(例如\%V,\v等等)

    e)某些多鍵命令雙擊最後一個字元表示作用於當前行。例如在Vim中gUU可以把當前行轉換為大寫,在IdeaVim中無效,實作同樣功能可以先用V命令選中當前行,再用gU轉換為大寫。

    f)關於視窗操作的大部份命令(Ctrl+w系列命令, :split等)

    g)所有Vim指令碼外掛程式(不過大部份可以用Idea自身的功能和外掛程式來補償)

    嗯,差點忘了,在普通模式下按u撤銷上一個修改(相當於其他IDE的Ctrl+z),按Ctrl+r重做被撤銷的修改。

    下面是 gif 演示 可以直接跳過

  • a 在光標之後,進入插入模式

  • i 在光標之前,進入插入模式

  • o 在本行之後新增一行,並進入插入模式

  • A 在本行結尾,進入插入模式

  • I 在本行開頭,進入插入模式

  • O 在本行之前新增一行,並進入插入模式

  • 練習四:jump

    不得不說我們使用 vim 更多的就是為了減少滑鼠操作,因為使用滑鼠你的手需要離開鍵盤。

    一來一回 麻煩!!!所以我們需要了解更多光標移動操作

  • [n]f{word} f 用來尋找在 當前行 當前光標後是否存在某個字元 {word} 如果存在則將光標移動過去

  • $ | ^ $ 跳轉到行尾 ^ 跳轉到行首

  • % 括弧匹配跳轉 () [] {}

  • * 跳轉到上一個字元的定位處

  • [n]h/j/k/l 數位加上方向鍵 代表重復執行多少次

  • 2jj 向下移動兩行

  • 10l 向右移動 10 個字元

  • 3kk 向下移動 3 行

  • 20h 向左移動 20 字元

  • G | gg

  • G 移動到最後一行

  • gg 移動到第一行

  • H | M | L

  • H 移動到當前頁的第一行

  • M 移動到編輯器中部

  • L 移動到當前頁的最後一行

  • [n]w 移動到後面 word 的開始位置,前面加上數位 代表重復多少次

  • e 移動到下一個詞語的末尾

  • b 移動到上一個單詞的開頭

  • zz 改變視窗的整體位置,將當前光標所在處 移動到視窗中部

  • 下面是 gif 演示

  • [n]f{word} f 用來尋找在 當前行 當前光標後是否存在某個字元 {word} 如果存在則將光標移動過去。

  • 如果將這裏的 f 改為 F 則是反向尋找

  • $ | ^ $ 跳轉到行尾 ^ 跳轉到行首

  • % 括弧匹配跳轉 () [] {}

  • 練習五 學習一些通用場景

    其他的比較好用的命令

  • zo | zc

  • dt{char}

  • 微信搜尋公眾號:架構師指南,回復:架構師 領取資料 。

    4

    配置

    在安裝了 Vim 之後,其實官方只是給我們了一個基本的架子,能夠實作 Vim 的基本操作。如果你想要用的更加順手,那麽你需要對 Vim 進行自己的個人化配置。 這是一張白紙,它會被書寫成什麽樣子由你自己決定。

    如何對 Idea 中的 Vim 模組進行配置

    在右下角點選 Vim 圖示,然後點選 Open ~/.ideavimrc

    基礎配置

    老規矩,個人感覺對於新手對編輯器進行配置,還是參照社群的常用配置進行使用。當自己對 Vim 更加熟練的時候可以在加入自己的東西

    "語法高亮
    syntax on
    "顯示行號
    set number relativenumber
    "顯示光標所在位置的行號和列號
    set ruler
    set wrap "自動折行
    set shiftwidth=4
    set tabstop=4
    set softtabstop=4
    set expandtab "將tab替換為相應數量空格
    set smartindent
    set backspace=2
    set co=5
    "設定取消備份 禁止臨時檔生成
    set nobackup
    set noswapfile
    " 為IdeaVim外掛程式增加自動切換為英文輸入法的功能,
    " idea 需要安裝 IdeaVimExtension plugin
    set keep-english-in-normal
    "設定匹配模式 類似當輸入一個左括弧時會匹配相應的那個右括弧
    set showmatch
    set clipboard^=unnamed,unnamedplus
    "set laststatus=2 "命令列為兩行
    "set fenc=utf-8 "檔編碼
    "set mouse=a "啟用滑鼠
    "set ignorecase "忽略大小寫
    set cursorline "突出顯示當前行
    "set cursorcolumn "突出顯示當前列
    set fdm=marker

    上面當中比較特別的配置就是

  • 設定 relativenumber 這樣可以看相對行號

  • keep-english-in-normal 這個設定開啟之後可以在進入命令模式之後自動將輸入法切換為英文。這個還是非常推薦設定的,不然每次從 插入模式 切換到 命令模式的時候 如果這個時候是中文輸入法,體驗就極差了

  • set clipboard^=unamed,unnamedplus 共享剪下板,Vim 的剪下板和系統的剪下板是隔離的。設定之後可以共享。

  • Action 配置

    在 Idea 中大部份的操作都可以抽象為一個 Action 比如

  • 檔重新命名 Rename File

  • 重新命名變量 或者 類名 RenameElement

  • 去到介面實作 GotoImplementation

  • 復制 class 參照 CopyReference

  • ...

  • 在 Vim 中可以透過插入命令模式 直接呼叫 action

    上圖中 gif 中演示的就是透過 呼叫 RenameElement Action 重新命名變量。

    初步的介紹完 Intellj Idea action 之後,下面分享我自己目前在用的幾個比較常用的配置,透過快捷鍵 呼叫 action

    "jk結束insert模式
    inoremap jk <ESC>
    let mapleader = '\<space>'
    "Idea action 配置
    " 重命令元素
    nnoremap <Leader>re :action RenameElement<CR>
    nnoremap <Leader>gi :action GotoImplementation<CR>
    nnoremap <Leader>im :action ImplementMethods<CR>
    nnoremap <Leader>rv :action IntroduceVariable<CR>
    nnoremap <Leader>cr :action CopyReference<CR>
    nnoremap <Leader>em :action ExtractMethod<CR>
    nnoremap <Leader>sw :action SurroundWith<CR>

    action list Intellj Idea 中只是的所有的 action 列表

    外掛程式配置

    其實本來 Vim 中的外掛程式體系是非常強大的,但是因為我們是在 Intellj Idea 中使用 Vim 可以利用很多 Intellj Idea 原本的很多功能。目前我個人還沒有發現有很亮眼的外掛程式。所以如果你也正在使用 可以分享一下。

    參考文獻

  • B 站 vim 入門講解:bilibili.com/video/BV1Yt411X7mu

  • 簡明 VIM 練級攻略:coolshell.cn/articles/5426.html

  • learn-vim:github.com/iggredible/Learn-Vim

  • Vim 配置:ruanyifeng.com/blog/2018/09/vimrc.html