Dies zu tun, würde eine Menge Arbeit erfordern, aber ich denke, Sie können mit dem Unite.vim-Plugin etwas ziemlich einfaches tun . Es bietet eine Integrationsschnittstelle zum Erstellen von Menüs aus verschiedenen Quellen. (Einige haben sogar CtrlP durch Unite ersetzt .) In diesem Beispiel in der Unite-Dokumentation (oder :help g:unite_source_menu_menus
, nachdem Sie Unite installiert haben , in einem Blick ) wird beschrieben, wie Sie ein grundlegendes Befehlsmenü erstellen.
Nach dieser Dokumentation habe ich ein einfaches Beispiel erstellt, das ein Menü mit Befehlen enthält. Zu Demonstrationszwecken habe ich Befehle zum Öffnen von NERDTree (über das NERDTree-Plugin), zum Anzeigen einer Git-Schuld (über das Plugin fugitive.vim) und zum Greifen nach TODOs in einem Projekt (über das integrierte Plugin) eingerichtet :grep
. Ich habe ein Mapping definiert, mit dem das Menü geöffnet werden kann <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>
Sie können dies in Ihre kopieren vimrc
und die vom Array definierte Befehlsliste bearbeiten g:unite_source_menu_menus.my_commands.command_candidates
. Jedes Element des Arrays ist ein Array des Formulars [Label, Command]
.
In meinem Beispiel my_commands
war ein Name, den ich gewählt habe, um mein Menü zu kennzeichnen. Sie können einen beliebigen Namen verwenden.
Hoffe das hilft!
BEARBEITEN: Hinzugefügt -start-insert
und -ignorecase
Optionen zum Mapping, um das Menü im Engermodus zu starten (wie bei einer Fuzzy-Suche).