成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Vim 插件:vim-which-key

chengtao1633 / 2125人閱讀

摘要:不過(guò)一直以來(lái)中都缺少像這樣形神兼?zhèn)涞牟寮?,這一點(diǎn)我在的中也一早有提及。是里出現(xiàn)的一個(gè)比較接近的插件,它主要借鑒自,而是的前身,目前已經(jīng)不更新了,上一次還是在年。引入針對(duì)的解決由于帶來(lái)的一些不友好體驗(yàn)。

從 emacs-which-key 到 vim-which-key

emacs 用戶相信應(yīng)該對(duì)于 emacs-which-key 很熟悉,如果你在一定時(shí)間沒有輸入下一個(gè)按鍵,它會(huì)自動(dòng)顯示接下來(lái)可能的所有快捷鍵映射,這對(duì)于常常需要多組合鍵的 emacs 來(lái)說(shuō)很是方便。我在一開始使用 spacemacs 的時(shí)候,就被這個(gè)功能所吸引。不過(guò)一直以來(lái) vim 中都缺少像 emacs-which-key 這樣“形神兼?zhèn)洹钡牟寮@一點(diǎn)我在 space-vim 的 README 中也一早有提及。

vim-leader-guide 是 vim 里出現(xiàn)的一個(gè)比較接近的插件,它主要借鑒自 guide-key,而 guide-key 是 emacs-which-key 的前身,目前已經(jīng)不更新了,上一次 commit 還是在 2015 年。emacs-which-key 作為 guide-key 的繼任者對(duì)它進(jìn)行了重寫,并加入了一些新的特性。

因?yàn)?vim-leader-guide 之前長(zhǎng)時(shí)間沒有更新,而且在我看來(lái)不夠 fancy,所以我對(duì)它進(jìn)行了一個(gè)大的改造,也就是現(xiàn)在的 vim-which-key,主要改進(jìn)的地方有:

大量 UI 細(xì)節(jié)上的調(diào)整與改進(jìn),比如:

底部輸出當(dāng)前輸入的內(nèi)容

高亮群組

每列支持按照分隔符對(duì)齊

必要時(shí)更新窗口內(nèi)容,而不是每一次都關(guān)閉再打開一個(gè)新窗口

......

使用 getchar() 而不是 input() 進(jìn)行交互,快速響應(yīng)用戶鍵入的每一個(gè)字符。

引入針對(duì) vim-which-key 的 timeout 解決由于 getchar() 帶來(lái)的一些不友好體驗(yàn)。

使用要求

vim-which-key 對(duì)于 vim 的版本和特性基本沒什么要求,需要注意的一點(diǎn)是不要關(guān)閉選項(xiàng) timeout,即不要在 vimrc 中設(shè)置 set notimeout。另外可以自行設(shè)置 timeout 的時(shí)長(zhǎng):

" 默認(rèn)超時(shí)是 1000 ms,如果不想那么長(zhǎng)的話,你可以在 vimrc 中設(shè)置更短一些
set timeoutlen=500
安裝使用

如果使用 vim-plug:

Plug "liuchengxu/vim-which-key"

let g:mapleader = ""
let g:maplocalleader = ","

nnoremap   :WhichKey ""
nnoremap   :WhichKey ","

這是使用 vim-which-key 的最小配置,它會(huì)自動(dòng)解析用戶自定義的 相關(guān)快捷鍵。但是通常來(lái)說(shuō),通過(guò)自動(dòng)解析所展示的內(nèi)容并不能起到 cheatsheet 的作用,所以一般還需要稍加一點(diǎn)自定義配置來(lái)實(shí)現(xiàn)一個(gè)比較好的效果。

自定義配置

要想實(shí)現(xiàn)上圖中的效果,只需要再多額外兩步配置。

第一步是用一個(gè) dict 定義你要展示的信息和執(zhí)行的操作,用過(guò) vim-leader-guide 的應(yīng)該都很熟悉,跟它很像,不同的地方主要有:

對(duì)于用戶已經(jīng)定義的快捷鍵,可以只傳入一個(gè)字符串描述該快捷鍵

支持解析 等鍵位

更詳細(xì)的樣例可以參考 space-vim 的 leader.vim, 它也是截圖中的配置。

let g:which_key_map =  {}

" `name` 是一個(gè)特殊字段,如果 dict 里面的元素也是一個(gè) dict,那么表明一個(gè) group,比如 `+file`, 就會(huì)高亮和顯示 `+file` 。默認(rèn)是 `+prefix`.

" =======================================================
" 基于已經(jīng)存在的快捷鍵映射,直接使用一個(gè)字符串說(shuō)明介紹信息即可
" =======================================================
" You can pass a descriptive text to an existing mapping.

let g:which_key_map.f = { "name" : "+file" }

nnoremap  fs :update
let g:which_key_map.f.s = "save-file"

nnoremap  fd :e $MYVIMRC
let g:which_key_map.f.d = "open-vimrc"

nnoremap  oq  :copen
nnoremap  ol  :lopen
let g:which_key_map.o = {
       "name" : "+open",
       "q" : "open-quickfix"    ,
       "l" : "open-locationlist",
       }

" =======================================================
" 不存在相關(guān)的快捷鍵映射,需要用一個(gè) list:
" 第一個(gè)元素表明執(zhí)行的操作,第二個(gè)是該操作的介紹
" =======================================================
" Provide commands(ex-command, // mapping, etc.) and descriptions for existing mappings
let g:which_key_map.b = {
       "name" : "+buffer" ,
       "1" : ["b1"        , "buffer 1"]        ,
       "2" : ["b2"        , "buffer 2"]        ,
       "d" : ["bd"        , "delete-buffer"]   ,
       "f" : ["bfirst"    , "first-buffer"]    ,
       "h" : ["Startify"  , "home-buffer"]     ,
       "l" : ["blast"     , "last-buffer"]     ,
       "n" : ["bnext"     , "next-buffer"]     ,
       "p" : ["bprevious" , "previous-buffer"] ,
       "?" : ["Buffers"   , "fzf-buffer"]      ,
       }

let g:which_key_map.l = {
       "name" : "+lsp"                                            ,
       "f" : ["LanguageClient#textDocument_formatting()"     , "formatting"]       ,
       "h" : ["LanguageClient#textDocument_hover()"          , "hover"]            ,
       "r" : ["LanguageClient#textDocument_references()"     , "references"]       ,
       "R" : ["LanguageClient#textDocument_rename()"         , "rename"]           ,
       "s" : ["LanguageClient#textDocument_documentSymbol()" , "document-symbol"]  ,
       "S" : ["LanguageClient#workspace_symbol()"            , "workspace-symbol"] ,
       "g" : {
         "name": "+goto",
         "d" : ["LanguageClient#textDocument_definition()"     , "definition"]       ,
         "t" : ["LanguageClient#textDocument_typeDefinition()" , "type-definition"]  ,
         "i" : ["LanguageClient#textDocument_implementation()"  , "implementation"]  ,
         },
       }

第二步是注冊(cè)鍵位與對(duì)應(yīng)的 dict,這一步比較簡(jiǎn)單,不要忘記就行。

call which_key#register("", "g:which_key_map")
nnoremap   :WhichKey ""
vnoremap   :WhichKeyVisual ""

除了 leaderlocalleader,如果想要提示其他鍵也可以:

nnoremap  ] :WhichKey "]"
nnoremap  [ :WhichKey "["

更多介紹請(qǐng)參看 vim-which-key 的 README 和 doc。

如果在使用 vim-which-key 過(guò)程中有任何問題,請(qǐng)到 GitHub 上的 issue 里面提,提 issue時(shí)請(qǐng)說(shuō)明重現(xiàn)步驟并提供可重現(xiàn)的最小 vimrc,比如這樣:

set nocompatible

call plug#begin()
Plug "liuchengxu/vim-which-key"
call plug#end()

let g:mapleader=""

nnoremap        :WhichKey ""
nnoremap   :WhichKey  ","

nnoremap a :echom "Hello, World"
nnoremap 1 :echom "THis is one"

let g:which_key_map = {}

let g:which_key_map.a = {
             "name":"Test",
             "":"Hello world"
            }

let g:which_key_map.1 = "One"

call which_key#register("", "g:which_key_map")

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/25032.html

相關(guān)文章

  • 使用 neovim 的浮動(dòng)窗口讓你再次愛上 fzf

    摘要:自從的浮動(dòng)窗口被合到以后,很多插件都利用了這個(gè)特性實(shí)現(xiàn)了很多很酷的功能,比如,另外和也利用了這一特性。首先是個(gè)配置項(xiàng)讓輸入上方,搜索列表在下方打開的方式選擇還有個(gè)函數(shù)指定如何打開浮動(dòng)窗口設(shè)置浮動(dòng)窗口打開的位置,大小等。 fzf 是一個(gè)非常高效實(shí)用且美觀的命令行工具,并且配置有對(duì)應(yīng)的 vim 插件 fzf.vim, 相信很多人都用過(guò)。這里就不在贅述,如果你還沒有用過(guò),很推薦一試。 自從 ...

    msup 評(píng)論0 收藏0
  • 個(gè)人使用的 vim 插件集合

    摘要:擴(kuò)展了的,用于快速跳轉(zhuǎn)到配對(duì)的標(biāo)簽對(duì)編輯有很大幫助,新版以上自帶該插件快速編寫的神級(jí)插件,可支持快速編輯和的插件,可支持為文件提供函數(shù)提供快速對(duì)齊操作符解析顏色語(yǔ)法并用想對(duì)應(yīng)顏色做為背景色顯示,支持多種語(yǔ)法和文件類型,支持的代碼段管 matchit.vim 擴(kuò)展了 vim 的 %,用于快速跳轉(zhuǎn)到配對(duì)的標(biāo)簽(對(duì)編輯 html 有很大幫助), 新版 vim 7.0 以上自帶該插件 emm...

    李濤 評(píng)論0 收藏0
  • 如何安裝vim插件

    摘要:概述之所以廣受青睞好評(píng)如潮,它豐富多樣的插件起到了舉足輕重的貢獻(xiàn)。那么如何獲取和安裝插件呢通常我們可以在官網(wǎng)或上獲取插件,然后可以手動(dòng)安裝或利用等插件管理器來(lái)安裝。如果你想避免可以使用下面的插件管理器來(lái)安裝插件。 概述 vim之所以廣受青睞好評(píng)如潮,它豐富多樣的插件起到了舉足輕重的貢獻(xiàn)。那么如何獲取和安裝插件呢? 通常我們可以在vim官網(wǎng)或github上獲取插件,然后可以手動(dòng)安裝或利用...

    Rindia 評(píng)論0 收藏0
  • Vim 插件管理器概覽

    摘要:什么是插件見一個(gè)插件不過(guò)是啟動(dòng)時(shí)自動(dòng)加載的腳本而已啟動(dòng)時(shí)會(huì)自動(dòng)加載中的子目錄下的所有文件那么又是什么就是查找腳本文件的地方之于,有點(diǎn)類似之于下面有兩個(gè)子目錄需要注意目錄下面的所有文件都會(huì)在啟動(dòng)時(shí)進(jìn)行記載里面的文件在啟動(dòng)時(shí)并不會(huì)進(jìn)行加載而是通 什么是 Vim 插件 見 :h plugin : Vims functionality can be extended by adding plu...

    e10101 評(píng)論0 收藏0
  • Vim插件簡(jiǎn)單介紹

    摘要:轉(zhuǎn)換時(shí)支持模板文件,配合強(qiáng)大的模板文件,可以自己創(chuàng)建,或者是實(shí)現(xiàn)語(yǔ)法高亮,還支持?jǐn)?shù)學(xué)公式編輯。標(biāo)簽文件允許這些項(xiàng)目能夠被一個(gè)文本編輯器或其它工具簡(jiǎn)捷迅速的定位。 原文地址 Vim作為一個(gè)強(qiáng)大的編輯器,再配合強(qiáng)大的插件,就可以稱得上為編輯神器了。 pathogen pathogen為管理插件的插件,類似的還有vundle。在 Pathogen 之前,安裝插件就是把插件文件放在.vim目錄...

    dackel 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<