Faire cela hors de la boîte nécessiterait beaucoup de travail, mais je pense que vous pouvez faire quelque chose d'assez simple en utilisant le plugin Unite.vim . Il fournit une interface d'intégration pour créer des menus à partir de diverses sources. (En fait, certains ont même remplacé CtrlP par Unite .) Cet exemple dans la documentation Unite (ou jetez un œil à :help g:unite_source_menu_menus
, une fois que vous avez installé Unite) explique comment créer un menu de base des commandes.
Suite à cette documentation, j'ai trouvé un exemple simple qui propose un menu de commandes. À des fins de démonstration, je l'ai configuré avec des commandes pour ouvrir NERDTree (à partir du plug-in NERDTree), montrant un blâme (à partir du plugin fugitive.vim) et saluant les TODO dans un projet (à l'aide du intégré :grep
). J'ai défini un mappage pour ouvrir le menu avec <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>
Vous pouvez copier ceci dans votre vimrc
, et modifier la liste des commandes définies par le tableau g:unite_source_menu_menus.my_commands.command_candidates
. Chaque élément du tableau est un tableau du formulaire [Label, Command]
.
Dans mon exemple, my_commands
était un nom que j'ai choisi pour identifier mon menu. Vous pouvez utiliser n'importe quel nom que vous souhaitez.
J'espère que cela t'aides!
EDIT: Ajout -start-insert
et -ignorecase
options à la cartographie pour faire démarrer le menu en mode rétrécissement (comme une recherche floue).