วิธีกำหนดป๊อปอัพ / เมนูที่กำหนดเองใน vimrc


19

การกำหนดทุกฟังก์ชั่นที่มีประโยชน์ให้กับคีย์นั้นใช้งานได้ดีสำหรับเครื่องมือที่ใช้บ่อย แต่มีการดำเนินการบางอย่างที่ฉันใช้บ่อยครั้งvimrcมาก

ฉันเห็นปลั๊กอินเช่น CtrlP เปิดรายการป๊อปอัพดังนั้นควรเป็นไปได้

ดังนั้นคำถามของฉันคือ:

วิธีกำหนดเมนูป็อปอัพที่กำหนดเองซึ่งสามารถเรียกใช้คำสั่งต่าง ๆ ได้อย่างไร


หมายเหตุ: ควรรันในเทอร์มินัลด้วย

บางอย่างเช่นปลั๊กอิน CtrlP หรือ dmenu บน X11 เหมาะอย่างยิ่งที่คุณสามารถปรับแต่งตัวเลือกต่าง ๆ ในขณะที่คุณพิมพ์ แต่เมนูประเภทอื่นจะมีประโยชน์เช่นกัน

คำตอบ:


11

ทำออกจากกล่องนี้จะต้องมีจำนวนเงินที่ยุติธรรมของการทำงาน แต่ฉันคิดว่าคุณสามารถทำบางสิ่งบางอย่างเป็นธรรมตรงไปข้างหน้าโดยใช้ปลั๊กอิน Unite.vim มันมีอินเทอร์เฟซการรวมสำหรับการสร้างเมนูจากแหล่งต่าง ๆ (อันที่จริงมีบางคนแทนที่ด้วย CtrlP ด้วย Unite ) ตัวอย่างนี้ในเอกสาร Unite (หรือลองดู:help g:unite_source_menu_menusเมื่อคุณติดตั้ง Unite) รายละเอียดวิธีสร้างเมนูพื้นฐานของคำสั่ง

จากเอกสารดังกล่าวฉันได้พบกับตัวอย่างง่ายๆที่มีเมนูคำสั่ง เพื่อวัตถุประสงค์ในการสาธิตฉันได้ตั้งค่าด้วยคำสั่งสำหรับการเปิด NERDTree (จากปลั๊กอิน NERDTree) แสดงการตำหนิ git (จากปลั๊กอิน fugitive.vim) และการ grepping สำหรับสิ่งที่ต้องทำในโครงการ (ใช้บิวด์อิน: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ตัวเลือกในการทำแผนที่เพื่อให้เมนูเริ่มต้นในโหมดการ จำกัด (เช่นการค้นหาแบบคลุมเครือ)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.