Melakukan ini di luar kotak akan membutuhkan banyak pekerjaan, tetapi saya pikir Anda dapat melakukan sesuatu yang cukup mudah menggunakan plugin Unite.vim . Ini menyediakan antarmuka integrasi untuk membuat menu dari berbagai sumber. (Bahkan, beberapa bahkan mengganti CtrlP dengan Unite .) Contoh ini di dokumentasi Unite (atau lihat :help g:unite_source_menu_menus
, setelah Anda menginstal Unite) merinci cara membuat menu dasar perintah.
Setelah dokumentasi itu, saya datang dengan contoh sederhana yang menawarkan menu perintah. Untuk tujuan demonstrasi, saya telah mengaturnya dengan perintah untuk membuka NERDTree (dari plugin NERDTree), menunjukkan kesalahan git (dari plugin fugitive.vim) dan memahami TODO dalam sebuah proyek (menggunakan built-in :grep
). Saya telah menetapkan pemetaan untuk membuka 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>
Anda dapat menyalin ini ke Anda vimrc
, dan mengedit daftar perintah yang ditentukan oleh array g:unite_source_menu_menus.my_commands.command_candidates
. Setiap item array adalah array form [Label, Command]
.
Dalam contoh saya, my_commands
adalah nama yang saya pilih untuk mengidentifikasi menu saya. Anda dapat menggunakan nama apa pun yang Anda inginkan.
Semoga ini membantu!
EDIT: Ditambahkan -start-insert
dan -ignorecase
opsi untuk pemetaan untuk membuat menu mulai dalam mode penyempitan (seperti pencarian fuzzy).