Fazer isso imediatamente exigiria uma quantidade considerável de trabalho, mas acho que você pode fazer algo bastante simples usando o plug-in Unite.vim . Ele fornece uma interface de integração para criar menus de várias fontes. (De fato, alguns até substituíram CtrlP por Unite .) Este exemplo na documentação do Unite (ou dê uma olhada :help g:unite_source_menu_menus
, depois de instalar o Unite) detalha como criar um menu básico de comandos.
Após essa documentação, criei um exemplo simples que oferece um menu de comandos. Para fins de demonstração, configurei-o com comandos para abrir o NERDTree (do plug-in NERDTree), mostrando uma culpa git (do plug-in fugitive.vim) e grepping para TODOs em um projeto (usando o built-in :grep
). Eu defini um mapeamento para abrir o 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>
Você pode copiar isso no seu vimrc
e editar a lista de comandos definidos pela matriz g:unite_source_menu_menus.my_commands.command_candidates
. Cada item da matriz é uma matriz do formulário [Label, Command]
.
No meu exemplo, my_commands
foi um nome que escolhi para identificar meu menu. Você pode usar qualquer nome que desejar.
Espero que isto ajude!
EDIT: Adicionado -start-insert
e -ignorecase
opções ao mapeamento para iniciar o menu no modo de restrição (como uma pesquisa difusa).