कस्टम पॉपअप / मेनू को vimrc में कैसे परिभाषित करें


19

अक्सर उपयोग किए जाने वाले टूल के लिए हर उपयोगी फ़ंक्शन को एक कुंजी के साथ सौंपना अच्छी तरह से काम करता है, लेकिन कुछ ऐसे ऑपरेशन हैं जो मैं शायद ही कभी उपयोग करता हूं, कि मैं उन्हें अपने में परिभाषित कुछ पॉपअप मेनू को सौंपना पसंद करूंगा vimrc

मैंने देखा है कि CtrlP जैसे प्लगइन्स एक पॉपअप सूची खोलते हैं, इसलिए यह संभव होना चाहिए।

तो मेरा सवाल है:

कस्टम पॉपअप मेनू को कैसे परिभाषित करें जो विभिन्न कमांड चला सकता है?


नोट: यह एक टर्मिनल में भी चलना चाहिए।

X11 पर कुछ Ctrl Ctrl या dmenu की तरह आदर्श होगा, जहाँ आप विकल्पों को परिष्कृत कर सकते हैं जैसा कि आप टाइप करते हैं, लेकिन एक अलग तरह का मेनू भी उपयोगी होगा।

जवाबों:


11

इस आउट-ऑफ-द-बॉक्स को करने के लिए उचित मात्रा में काम करना होगा, लेकिन मुझे लगता है कि आप Unite.vim प्लगइन का उपयोग करके कुछ सीधे-सीधे कुछ कर सकते हैं । यह विभिन्न स्रोतों से मेनू बनाने के लिए एक एकीकरण इंटरफ़ेस प्रदान करता है। (वास्तव में, कुछ ने भी Ctrl को यूनाइट के साथ बदल दिया है ।) यूनाइट डॉक्यूमेंटेशन में यह उदाहरण है (या एक :help g:unite_source_menu_menusबार देखने के बाद , यूनाइट स्थापित होने के बाद) विवरणों के बेसिक मेन्यू कैसे बनाएं।

उस प्रलेखन के बाद, मैं एक साधारण उदाहरण के साथ आया हूं जो कमांड का एक मेनू प्रदान करता है। प्रदर्शन के उद्देश्यों के लिए, मैंने इसे NERDTree (NERDTree प्लगइन से) खोलने के लिए कमांड के साथ सेट किया है, जो एक प्रोजेक्ट में TOIT के लिए git दोष (fugitive.vim प्लगइन से) दिखा रहा है और बिल्ट-इन का उपयोग कर रहा है :grep। मैंने मेनू को खोलने के लिए मानचित्रण परिभाषित किया है <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>

आप इसे अपने में कॉपी कर सकते हैं vimrc, और सरणी द्वारा परिभाषित आदेशों की सूची को संपादित कर सकते हैं g:unite_source_menu_menus.my_commands.command_candidates। सरणी का प्रत्येक आइटम प्रपत्र का एक सरणी है [Label, Command]

मेरे उदाहरण में, my_commandsएक ऐसा नाम था जिसे मैंने अपने मेनू की पहचान करने के लिए चुना था। आप अपने इच्छित किसी भी नाम का उपयोग कर सकते हैं।

उम्मीद है की यह मदद करेगा!

संपादित करें: मेनू को संकरा मोड में शुरू करने के लिए मैपिंग में जोड़ा गया -start-insertऔर -ignorecaseविकल्प (जैसे फजी-सर्च)।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.