<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Intellij IDEA 自帶的 Vim 插件有哪些?

          共 3275字,需瀏覽 7分鐘

           ·

          2020-11-16 17:44

          來源:hsujee.com/2016/01/13/

          • 1. 切換Vim模擬器狀態(tài)
          • 2. ScrollOff 參數(shù)
          • 3. 行號定位
          • 4. 進入修改
          • 5. 范圍操作
          • 6. 選擇文本
          • 7. 復(fù)制粘貼
          • 8.一些插入模式下的常用快捷鍵
          • 9. 退出插入模式
          • 10. 重復(fù)操作
          • 11. 跳轉(zhuǎn)
          • 12 書簽
          • 13 文本替換
          • 11 代碼折疊
          • 14 宏定義
          • 15. 一些常用組合技
          • 16. 一些在目前版本已知沒有實現(xiàn)的一些常用Vim功能

          在 IDEA Intellij小技巧和插件 一文中簡單介紹了一下IdeaVim插件。在這里詳細總結(jié)一下這個插件在日常編程中的一些常用小技巧。

          供有興趣使用這個插件,但對Vim還不十分熟悉的朋友參考。當(dāng)然基本的hjkl移動光標(biāo)和幾種常見模式等等基本概念就略過不提了。

          為了確保只包含常用操作,這里提到的技巧都沒有從現(xiàn)成文檔里抄,而是憑記憶列出(不常用自然就不記得了)。

          估計會有所遺漏,慢慢再補充。

          1. 切換Vim模擬器狀態(tài)

          這個插件允許設(shè)置一個快捷鍵一鍵開啟或關(guān)閉,在切換模式時會同時自動切換keymap,十分方便。默認鍵位是Ctrl+Alt+V,但這個鍵位覆蓋了很常用的“抽取局部變量”功能,建議重設(shè),在setting->keymap中查找VIM Emulator即可。

          由于開啟和關(guān)閉狀態(tài)分別使用兩套keymap,因此兩套都需要設(shè)定??梢园褍商譳eymap下的都設(shè)為一樣的鍵,也就是用同一個鍵切換。但個人建議設(shè)為不同的鍵,這樣能清楚知道當(dāng)前處于那種模式中。并且,如果在開啟Vim的插入模式下關(guān)閉Vim模擬器,下次進入時仍然是插入模式,比較混亂(因為你關(guān)閉模擬器就是為了使用默認keymap輸入大段代碼,重新開啟Vim模擬器就是為了使用普通模式下的命令)。

          因此建議把Vim keymap中的Exit Insert Mode設(shè)為與另一個keymap的Vim Emulator相同的鍵(也就是進入Vim模擬器的快捷鍵)。

          例如,我使用的設(shè)定是:

          Default?keymap?->?Vim?Emulator?:?Ctrl+;?????(用Ctrl+分號開啟Vim模擬器)
          Vim?keymap?->?Vim?Emulator?:?Ctrl+,????(用Ctrl+逗號關(guān)閉Vim模擬器)
          Vim?keymap?->?Vim?Emulator?:?Ctrl+;????(用Ctrl+分號退出插入模式,進入普通模式)

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

          2. ScrollOff 參數(shù)

          啟動Intellij后在Vim模擬器下輸入命令 :

          set?so=5

          可以令屏幕滾動時在光標(biāo)上下方保留5行預(yù)覽代碼(也就是光標(biāo)會在第5行觸發(fā)向上滾動,或者在倒數(shù)第5行觸發(fā)向下滾動)。

          在代碼窗口比較狹小時(例如單步跟蹤調(diào)試時)非常方便??上H在Vim模擬器開啟時有效。

          3. 行號定位

          普通模式下輸入 行號G 或 :行號<回車> 都能快速定位到某一行。

          區(qū)別在于前者在輸入行號時屏幕上沒有任何提示,后者則在Vim命令輸入框中可以看到輸入過程。

          (題外話:Sublime Text 2也是用 :行號 來快速定位到某行,應(yīng)該是沿用了Vim的習(xí)慣)

          4. 進入修改

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

          o?-?在當(dāng)前行下方插入新行并自動縮進
          O?-?在當(dāng)前行上方插入新行并自動縮進?(普通模式下的大寫字母命令用?shift+字母鍵?輸入,下同)
          i?-?在當(dāng)前字符左方開始插入字符
          a?-?在當(dāng)前字符右方開始插入字符
          I?-?光標(biāo)移動到行首并進入插入模式
          A?-?光標(biāo)移動到行尾并進入插入模式
          s?-?刪除光標(biāo)所在字符并進入插入模式
          S?-?刪除光標(biāo)所在行并進入插入模式
          c<范圍>?-?刪除光標(biāo)所在位置周圍某個范圍的文本并進入插入模式。關(guān)于范圍請看第5點,常用的組合有:caw -?刪除一個單詞包括它后面的空格并開始插入;ciw -?刪除一個單詞并開始插入;ci"?-?刪除一個字符串內(nèi)部文本并開始插入;c$?-?從光標(biāo)位置刪除到行尾并開始插入;ct字符?-?從光標(biāo)位置刪除本行某個字符之前(保留該字符)并開始插入。等等。
          C?-?刪除光標(biāo)位置到行尾的內(nèi)容并進入插入模式?(相當(dāng)于c$)
          r?-?修改光標(biāo)所在字符,然后返回普通模式
          R?-?進入覆蓋模式

          5. 范圍操作

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

          d<范圍>?-?刪除一定范圍內(nèi)的文本
          c<范圍>?-?刪除一定范圍內(nèi)的文本并進入插入模式
          y<范圍>?-?將范圍內(nèi)的文本放入0號和"號注冊欄
          v<范圍>?-?選擇范圍內(nèi)的文本
          =<范圍>?-?自動縮進范圍內(nèi)的文本
          gU<范圍>?-?將范圍內(nèi)的字符轉(zhuǎn)換為大寫
          gu<范圍>?-?將范圍內(nèi)的字符轉(zhuǎn)換為小寫
          ><范圍>?-?將范圍中的內(nèi)容縮進一格
          <<范圍>?-?將范圍中的內(nèi)容取消縮進一格

          常用的范圍指令有:

          空格?-?光標(biāo)所在位置字符。(例如 gU空格?-?將光標(biāo)位置字符轉(zhuǎn)為大寫)
          重復(fù)某些動作命令?-?光標(biāo)所在行。?(例如dd刪除一行,yy復(fù)制一行,cc刪除一行文本并開始插入,>>?當(dāng)前行縮進一格,==自動縮進當(dāng)前行)
          $?-?從光標(biāo)位置到行尾
          ^?-?從光標(biāo)位置到行首,不包含縮進空白
          0?-?從光標(biāo)位置到行首,包含縮進空白
          gg?-?從光標(biāo)位置到文件開頭
          G?-?從光標(biāo)位置到文件結(jié)尾
          %?-?從光標(biāo)位置到另一邊匹配的括號
          f<字符>?-?從光標(biāo)位置到光標(biāo)右邊某個字符首次出現(xiàn)的位置,包括該字符
          F<字符>?-?從光標(biāo)位置到光標(biāo)左邊某個字符首次出現(xiàn)的位置,包括該字符
          t<字符>?-?從光標(biāo)位置到光標(biāo)右邊某個字符首次出現(xiàn)的位置,包括該字符
          F<字符>?-?從光標(biāo)位置到光標(biāo)左邊某個字符首次出現(xiàn)的位置,包括該字符
          /正則表達式?-?從光標(biāo)位置到下一個匹配正則表達式的位置(跨行)
          ?正則表達式?-?從光標(biāo)位置到上一個匹配正則表達式的位置(跨行)
          aw?-?一個單詞加一個空格?(a可理解為“一個”,下同)
          iw?-?一個單詞?(i可理解為in,下同)
          a"?-?一個字符串包括雙引號
          i"
          ?-?一個字符串內(nèi)部文本
          a包含的文本,包括號本身
          同理類推:i<, a[, i[, a(, i(
          • 注意:真正vim中的it范圍(一對xml標(biāo)簽內(nèi)部)在ideaVim中不生效。

          用/或?命令查找時,正則表達式默認大小寫敏感,如果需要不敏感,可以在正則表達式開始處加上\c標(biāo)志。

          例如 /\cabc 可以匹配到 ABC。下面提到的:s命令同樣適用。

          6. 選擇文本

          在Vim中,選擇文本需要進入“可視模式”(Visual Mode),這個名稱比較奇怪,它的來由據(jù)說是因為在Vim的前身Vi中,選擇區(qū)域是不可見的。

          在Vim中選擇區(qū)域會高亮顯示,因此稱為“可視模式”。

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

          進入相應(yīng)模式后移動光標(biāo)即可選中文本。過程中可按o鍵令光標(biāo)在選區(qū)兩端切換。

          在塊選擇模式中選中多行,然后按I或A后輸入文本,再退出插入模式,所輸入的文本將自動加入到每一行的開頭或結(jié)尾。

          7. 復(fù)制粘貼

          在Vim模式下,復(fù)制粘貼并不直接使用系統(tǒng)的剪貼板,而是使用Vim提供的多個“寄存器”,每個寄存器都以一個字符來表示。

          關(guān)于寄存器的詳細說明可以看這里 http://blah.blogsome.com/2006/04/27/vim_tut_register/ (隨便google的一個網(wǎng)頁),這里簡單列一些常用的操作技巧

          (注意,vim使用雙引號”來作為選擇寄存器的命令,因此下文中的雙引號均指在普通模式下按雙引號鍵):

          a)用y命令將文本存入寄存器后,如果想在別處替換原有內(nèi)容,可以先用v命令選中原有內(nèi)容,然后用p命令粘貼。

          但第一次粘貼后,默認的寄存器”將被替換為剛剛刪除的內(nèi)容。如果要再次粘貼之前復(fù)制的內(nèi)容,需要使用 “0p 命令組合來復(fù)制。

          也可以進入插入模式后用 Ctrl+r 0 來復(fù)制,例如 ciw0 命令組合將用粘貼內(nèi)容替換光標(biāo)處的一個單詞,并停留在插入模式。

          b)在Windows下,寄存器 + 和 * 都代表系統(tǒng)剪貼板,可以互換使用,選一個順手的即可。

          例如 “+yy 命令組合可將當(dāng)前行復(fù)制到系統(tǒng)剪貼板。ci”* 命令組合則將系統(tǒng)剪貼板的內(nèi)容替換字符串的內(nèi)部文本。

          c) 寄存器1至9記錄之前九次的刪除大段文本,每次超過一行的刪除操作都會導(dǎo)致這9個寄存器的內(nèi)容發(fā)生位移,最近刪除的文本會存入寄存器1。

          但只有刪除超過1行時才會影響寄存器1至9,行內(nèi)的刪除內(nèi)容則會被存入寄存器-(減號)。

          如果用q命令錄制宏時不涉及跨行刪除,可以在宏中直接使用這9個寄存器來暫存文本。

          (在Vim中,復(fù)制內(nèi)容與錄制宏共享同一套寄存器,因此我習(xí)慣把字母寄存器留給宏使用)

          d) 普通模式下小寫p把寄存器內(nèi)容復(fù)制到當(dāng)前位置之后,大寫P把寄存器內(nèi)容復(fù)制到當(dāng)前位置之前。

          e) 使用 :regs 命令可以列出當(dāng)前所有寄存器的內(nèi)容

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

          Ctrl+h?-?刪除光標(biāo)左邊字符
          Ctrl+w?-?刪除光標(biāo)左邊的單詞
          Ctrl+y?-?復(fù)制上方的一個字符
          Ctrl+e?-?復(fù)制下方的一個字符
          Ctrl+r?0?-?插入前一次用y命令寄存的內(nèi)容
          Ctrl+r?*?-?插入系統(tǒng)剪貼板的內(nèi)容
          Ctrl+r?<寄存器名稱>?-?插入指定寄存器的內(nèi)容
          Ctrl+a?-?插入前一次插入模式所鍵入的內(nèi)容
          Ctrl+o -?執(zhí)行一個普通模式下的命令然后返回插入模式。?例如 Ctrl+o A 相當(dāng)于按 End鍵, Ctrl+o I相當(dāng)于按Home鍵

          9. 退出插入模式

          退出插入模式可以用 ESC 鍵,但鍵位太遠。其實也可以用 Ctrl+[ 鍵退出插入模式 。

          當(dāng)然也可以用第1點自定義的Ctrl+;快捷鍵,但這不是標(biāo)準(zhǔn)vim按鍵,會養(yǎng)成不良習(xí)慣,不建議使用。

          10. 重復(fù)操作

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

          &?-?重復(fù)上一次的:s替換命令
          @@?-?重復(fù)上一次執(zhí)行的宏

          11. 跳轉(zhuǎn)

          Ctrl+]?跳轉(zhuǎn)到當(dāng)前標(biāo)識符的定義位置?(相當(dāng)于在當(dāng)前光標(biāo)位置的單詞上按住ctrl用鼠標(biāo)點擊)
          Ctrl+o?回退一步?(go?back)
          Ctrl+i?前進一步?(go?forward)
          `.?跳轉(zhuǎn)到之前修改位置
          ``?在前一次跳轉(zhuǎn)位置與當(dāng)前位置間切換
          行號G?或?:行號<回車>??跳轉(zhuǎn)到某一行
          gg?跳轉(zhuǎn)到文件開頭
          G??跳轉(zhuǎn)到文件末尾
          H??跳轉(zhuǎn)到屏幕頂端(如果設(shè)置了set?so=n,則跳轉(zhuǎn)到第n行)
          L??跳轉(zhuǎn)到屏幕底端(如果設(shè)置了set?so=n,則跳轉(zhuǎn)到倒數(shù)第n行)
          M??跳轉(zhuǎn)到屏幕中間
          f 或 F 跳轉(zhuǎn)到本行某個字符,小寫f向右查找,大寫F向左查找。用;或,在匹配間切換
          t 或 T 跳轉(zhuǎn)到本行某個字符之前,小寫t向右查找,大寫T向左查找。用;或,在匹配間切換
          /正則表達式??跳轉(zhuǎn)到下一個匹配。用n或N在匹配間切換。
          ?正則表達式??跳轉(zhuǎn)到上一個匹配。用n或N在匹配間切換。

          (結(jié)合前面第5點,你也許注意到了,在指定范圍時,使用跳轉(zhuǎn)命令將指定一個從光標(biāo)位置到跳轉(zhuǎn)目標(biāo)的區(qū)域)

          12 書簽

          在普通模式下按 m<小寫字母> 即可定義書簽,按 `<字母> 則可跳轉(zhuǎn)到某個書簽的精確位置,按 ‘<字母>可跳轉(zhuǎn)到某個書簽所在行的行首(用來錄制宏時比較有用)。

          最常用的自然是mm, mn, mj, mk, ml這幾個順手的鍵位。

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

          13 文本替換

          使用 :s/正則表達式/替換文本/ 可在本行內(nèi)替換首次出現(xiàn)的匹配

          使用 :s/正則表達式/替換文本/g 在本行內(nèi)替換所有出現(xiàn)的匹配

          使用 :%s/正則表達式/替換文本/g 在當(dāng)前文件內(nèi)替換所有出現(xiàn)的匹配

          在可視模式下選中文本后,使用:’<,’>s/正則表達式/替換文本/g 命令可在選中區(qū)域中替換文本。

          其中’<,’>部分在可視模式下,按:冒號后自動加入,直接輸入s命令即可。但有效區(qū)域只能以行為單位。

          真正Vim中的 %V 標(biāo)志在IdeaVim中不生效。

          11 代碼折疊

          zo?-?打開折疊
          zc?-?關(guān)閉折疊

          14 宏定義

          在IdeaVim中定義宏比Idea自帶的宏功能要輕量許多。

          按在普通模式下 q<寄存器名稱> 即可開始把后續(xù)按鍵序列錄制到指定寄存器中(寄存器參考前面第7條)。錄制完畢進入普通模式再按q鍵即可停止錄制。

          之后用 @<寄存器名稱> 即可重放。需要注意的是宏和復(fù)制粘貼共用一套寄存器,因此在錄制宏時就注意不要把當(dāng)前宏正在使用的寄存器用來復(fù)制了。

          寄存器內(nèi)容是自動保存的,重啟Idea仍然生效。但IdeaVim沒有導(dǎo)出宏獨立保存的功能。因此最好把用來保存宏的寄存器和用來復(fù)制粘貼的寄存器分開,不要同一個寄存器有時用來記錄宏,有時用來復(fù)制粘貼。我的習(xí)慣是鍵盤左手區(qū)用來保存一些長期使用的宏(比如說我有一個宏專門用來把pom.xml中的版本號抽取到property區(qū)域,原來的位置則改用${property}引用)。

          右手區(qū)的hjklnm鍵用來保存一些臨時宏。yuiop五個寄存器保留用來復(fù)制粘貼。如果錄制的宏不涉及刪除大段代碼,寄存器1至9也可以用來進行復(fù)制粘貼。

          執(zhí)行一次宏后,可以用@@命令重復(fù)上一次執(zhí)行的宏。

          在Idea中錄制宏時,如果觸發(fā)了代碼自動完成,在自動完成列表啟動的狀態(tài)輸入的字符不會被記錄。因此最好在Setting -> Code Completion -> Autopopup code completion中把延遲設(shè)為500ms以上或干脆關(guān)掉。在錄制宏的過程中避免觸發(fā)代碼自動完成功能。

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

          15. 一些常用組合技

          全選:ggvG
          調(diào)換兩個字符位置:xp
          復(fù)制一行:yyp
          調(diào)換兩行位置:ddp
          插入模式下到行尾繼續(xù)輸入(相當(dāng)于End鍵):Ctrl+o A 或 Ctrl+[ A
          插入模式下到行首繼續(xù)輸入(相當(dāng)于Home鍵):Ctrl+o I 或 Ctrl+[ I
          到類定義位置(適用于正確縮進的public,protected類)?:?^p回車

          16. 一些在目前版本已知沒有實現(xiàn)的一些常用Vim功能

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

          a)let命令?(沒有l(wèi)et命令就無法導(dǎo)出/導(dǎo)入寄存器內(nèi)容,也就是無法導(dǎo)入宏)
          b):g命令?(在文本處理中很有用的一個命令,在編程中倒是不那么常用)
          c)!命令?(執(zhí)行shell命令)
          d)大部分正則表達式標(biāo)記?(例如?\%V,?\v?等等)
          e)?某些多鍵命令雙擊最后一個字符表示作用于當(dāng)前行。例如在Vim中g(shù)UU可以把當(dāng)前行轉(zhuǎn)換為大寫,在IdeaVim中無效,實現(xiàn)同樣功能可以先用V命令選中當(dāng)前行,再用gU轉(zhuǎn)換為大寫。
          f)關(guān)于窗口操作的大部分命令?(Ctrl+w系列命令,?:split等)
          g)所有Vim腳本插件?(不過大部分可以用Idea自身的功能和插件來補償)

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

          END




          下方二維碼關(guān)注我

          互聯(lián)網(wǎng)草根,堅持分享技術(shù)、創(chuàng)業(yè)、產(chǎn)品心得和總結(jié)~



          點擊“閱讀原文”,領(lǐng)取 2020 年最新免費技術(shù)資料大全

          ↓↓↓?
          瀏覽 29
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  插逼免费视频 | 在线观看爱爱视频 | 91人人妻人人妻人人澡 | 国产女人18水真多毛片18精品 | 婷婷亚洲丁香 |