国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Vim 插件:vim-which-key

chengtao1633 / 2075人閱讀

摘要:不過一直以來中都缺少像這樣形神兼備的插件,這一點我在的中也一早有提及。是里出現的一個比較接近的插件,它主要借鑒自,而是的前身,目前已經不更新了,上一次還是在年。引入針對的解決由于帶來的一些不友好體驗。

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

emacs 用戶相信應該對于 emacs-which-key 很熟悉,如果你在一定時間沒有輸入下一個按鍵,它會自動顯示接下來可能的所有快捷鍵映射,這對于常常需要多組合鍵的 emacs 來說很是方便。我在一開始使用 spacemacs 的時候,就被這個功能所吸引。不過一直以來 vim 中都缺少像 emacs-which-key 這樣“形神兼備”的插件,這一點我在 space-vim 的 README 中也一早有提及。

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

因為 vim-leader-guide 之前長時間沒有更新,而且在我看來不夠 fancy,所以我對它進行了一個大的改造,也就是現在的 vim-which-key,主要改進的地方有:

大量 UI 細節上的調整與改進,比如:

底部輸出當前輸入的內容

高亮群組

每列支持按照分隔符對齊

必要時更新窗口內容,而不是每一次都關閉再打開一個新窗口

......

使用 getchar() 而不是 input() 進行交互,快速響應用戶鍵入的每一個字符。

引入針對 vim-which-key 的 timeout 解決由于 getchar() 帶來的一些不友好體驗。

使用要求

vim-which-key 對于 vim 的版本和特性基本沒什么要求,需要注意的一點是不要關閉選項 timeout,即不要在 vimrc 中設置 set notimeout。另外可以自行設置 timeout 的時長:

" 默認超時是 1000 ms,如果不想那么長的話,你可以在 vimrc 中設置更短一些
set timeoutlen=500
安裝使用

如果使用 vim-plug:

Plug "liuchengxu/vim-which-key"

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

nnoremap   :WhichKey ""
nnoremap   :WhichKey ","

這是使用 vim-which-key 的最小配置,它會自動解析用戶自定義的 相關快捷鍵。但是通常來說,通過自動解析所展示的內容并不能起到 cheatsheet 的作用,所以一般還需要稍加一點自定義配置來實現一個比較好的效果。

自定義配置

要想實現上圖中的效果,只需要再多額外兩步配置。

第一步是用一個 dict 定義你要展示的信息和執行的操作,用過 vim-leader-guide 的應該都很熟悉,跟它很像,不同的地方主要有:

對于用戶已經定義的快捷鍵,可以只傳入一個字符串描述該快捷鍵

支持解析 等鍵位

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

let g:which_key_map =  {}

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

" =======================================================
" 基于已經存在的快捷鍵映射,直接使用一個字符串說明介紹信息即可
" =======================================================
" 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",
       }

" =======================================================
" 不存在相關的快捷鍵映射,需要用一個 list:
" 第一個元素表明執行的操作,第二個是該操作的介紹
" =======================================================
" 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"]  ,
         },
       }

第二步是注冊鍵位與對應的 dict,這一步比較簡單,不要忘記就行。

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

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

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

更多介紹請參看 vim-which-key 的 README 和 doc。

如果在使用 vim-which-key 過程中有任何問題,請到 GitHub 上的 issue 里面提,提 issue時請說明重現步驟并提供可重現的最小 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")

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/25032.html

相關文章

  • 使用 neovim 的浮動窗口讓你再次愛上 fzf

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

    msup 評論0 收藏0
  • 個人使用的 vim 插件集合

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

    李濤 評論0 收藏0
  • 如何安裝vim插件

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

    Rindia 評論0 收藏0
  • Vim 插件管理器概覽

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

    e10101 評論0 收藏0
  • Vim插件簡單介紹

    摘要:轉換時支持模板文件,配合強大的模板文件,可以自己創建,或者是實現語法高亮,還支持數學公式編輯。標簽文件允許這些項目能夠被一個文本編輯器或其它工具簡捷迅速的定位。 原文地址 Vim作為一個強大的編輯器,再配合強大的插件,就可以稱得上為編輯神器了。 pathogen pathogen為管理插件的插件,類似的還有vundle。在 Pathogen 之前,安裝插件就是把插件文件放在.vim目錄...

    dackel 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<