Vimrc'de özel bir açılır pencere / menü nasıl tanımlanır


19

Her yararlı işlevi bir tuşa atamak, sık kullanılan araçlar için iyi çalışır, ancak nadiren kullandığım bazı işlemler var, bunları benim bilgisayarımda tanımlanan bazı açılır menüye atamayı tercih ederim vimrc.

CtrlP gibi eklentilerin bir açılır liste açtığını gördüm, bu mümkün olmalı.

Benim sorum şu:

Çeşitli komutları çalıştırabilecek özel bir açılır menü nasıl tanımlanır?


Not: Bu terminalde de çalışmalıdır.

X11'de CtrlP eklentisi veya dmenu gibi bir şey ideal olabilir, burada yazarken seçenekleri düzeltebilirsiniz, ancak farklı bir menü türü de yararlı olacaktır.

Yanıtlar:


11

Kutudan çıkarken yapmak oldukça fazla iş gerektirir, ancak Unite.vim eklentisini kullanarak oldukça basit bir şey yapabileceğinizi düşünüyorum . Çeşitli kaynaklardan menüler oluşturmak için bir entegrasyon arayüzü sağlar. (Aslında, bazıları CtrlP'yi Unite ile değiştirmiştir .) Unite belgelerindeki bu örnek (veya Unite'ı:help g:unite_source_menu_menus yükledikten sonra bir göz atın ), komutların temel menüsünün nasıl oluşturulacağını açıklar .

Bu dokümantasyonun ardından, bir komut menüsü sunan basit bir örnek buldum. Gösterim amacıyla, NERDTree'yi (NERDTree eklentisinden) açmak, bir git suçu (fugitive.vim eklentisinden) göstermek ve bir projedeki TODO'lar için (yerleşik olanı kullanarak) selamlamak için komutlarla ayarladım :grep. Menüyü açmak için bir eşleme tanımladım <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>

Bunu kendinize kopyalayabilir vimrcve dizi tarafından tanımlanan komutların listesini düzenleyebilirsiniz g:unite_source_menu_menus.my_commands.command_candidates. Dizinin her öğesi formun bir dizisidir [Label, Command].

Örneğimde, my_commandsmenümü tanımlamak için seçtiğim bir addı. İstediğiniz herhangi bir ismi kullanabilirsiniz.

Bu yardımcı olur umarım!

DÜZENLEME: Katma -start-insertve -ignorecaseeşleştirme seçenekleri (bulanık-arama gibi) modunu daralma menü başlangıç yapmak.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.