Fare questo out-of-the-box richiederebbe una discreta quantità di lavoro, ma penso che tu possa fare qualcosa di abbastanza semplice usando il plugin Unite.vim . Fornisce un'interfaccia di integrazione per la creazione di menu da varie fonti. (In effetti, alcuni hanno persino sostituito CtrlP con Unite .) Questo esempio nella documentazione di Unite (o dai un'occhiata a :help g:unite_source_menu_menus
, una volta installato Unite) spiega come creare un menu di comandi di base.
Seguendo quella documentazione, ho trovato un semplice esempio che offre un menu di comandi. A scopo dimostrativo, l'ho impostato con i comandi per aprire NERDTree (dal plug-in NERDTree), mostrando una colpa git (dal plug-in fugitive.vim) e facendo il grepping per TODO in un progetto (usando il built-in :grep
). Ho definito una mappatura con cui aprire il menu <Leader>c
.
# Initialize Unite's global list of menus
if !exists('g:unite_source_menu_menus')
let g:unite_source_menu_menus = {}
endif
# Create an entry for our new menu of commands
let g:unite_source_menu_menus.my_commands = {
\ 'description': 'My Commands'
\ }
# Define the function that maps our command labels to the commands they execute
function! g:unite_source_menu_menus.my_commands.map(key, value)
return {
\ 'word': a:key,
\ 'kind': 'command',
\ 'action__command': a:value
\ }
endfunction
# Define our list of [Label, Command] pairs
let g:unite_source_menu_menus.my_commands.command_candidates = [
\ ['Open/Close NERDTree', 'NERDTreeToggle'],
\ ['Git Blame', 'Gblame'],
\ ['Grep for TODOs', 'grep TODO']
\ ]
# Create a mapping to open our menu
nnoremap <Leader>c :<C-U>Unite menu:my_commands -start-insert -ignorecase<CR>
Puoi copiarlo nel tuo vimrc
e modificare l'elenco dei comandi definiti dall'array g:unite_source_menu_menus.my_commands.command_candidates
. Ogni elemento dell'array è un array del modulo [Label, Command]
.
Nel mio esempio, my_commands
era un nome che ho scelto per identificare il mio menu. Puoi usare qualsiasi nome tu voglia.
Spero che sia di aiuto!
EDIT: aggiunti -start-insert
e -ignorecase
opzioni alla mappatura per far iniziare il menu in modalità restringimento (come una ricerca fuzzy).