vimrc에서 사용자 정의 팝업 / 메뉴를 정의하는 방법


19

모든 유용한 기능을 키에 할당하는 것은 자주 사용하는 도구에는 효과적이지만, 거의 사용하지 않는 작업이 있으므로 my에 정의 된 팝업 메뉴에 할당하는 것을 선호합니다 vimrc.

CtrlP와 같은 플러그인이 팝업 목록을 여는 것을 보았으므로 이것이 가능해야합니다.

그래서 내 질문은 :

다양한 명령을 실행할 수있는 사용자 정의 팝업 메뉴를 정의하는 방법은 무엇입니까?


참고 : 이것은 터미널에서도 실행되어야합니다.

X11의 CtrlP 플러그인 또는 dmenu와 같은 것이 이상적이며 입력 할 때 옵션을 세분화 할 수 있지만 다른 종류의 메뉴도 유용합니다.

답변:


11

이 기본 제공 작업을 수행하려면 상당한 양의 작업이 필요하지만 Unite.vim 플러그인을 사용하여 매우 간단한 작업을 수행 할 수 있다고 생각합니다 . 다양한 소스에서 메뉴를 작성하기위한 통합 인터페이스를 제공합니다. (실제로 일부는 CtrlP를 Unite로 대체했습니다 .) Unite 설명서의이 예제 (또는 :help g:unite_source_menu_menusUnite를 설치 한 후에 살펴보십시오 )는 기본 명령 메뉴를 만드는 방법을 자세히 설명합니다.

이 문서에 이어 명령 메뉴를 제공하는 간단한 예를 제시했습니다. 데모 목적으로, NERDTree (NERDTree 플러그인에서)를 열고 git blame (fugitive.vim 플러그인에서)을 표시하고 프로젝트에서 TODO를 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.