2013-08-31 16 views
34

Niedawno znalazłem wtyczkę vim, używając czegoś o nazwie <Plug>. Na przykład jest polecenie <Plug>abc_def, które chciałbym wykonać.Wykonywanie poleceń <Plug> w vim

Próbowałem wszystkiego, jak :<Plug>abc_def i podobne. Nic nie działało. I :help <Plug> nie podał żadnych informacji.

Jednak udało mi się go wykonać, tworząc mapowanie :map x <Plug>(unite_redraw). Następnie mogę go uruchomić, naciskając x.

Czy jest jakiś sposób na wykonanie :<Plug>abc_def bez tworzenia mapowania manekina tylko po to, aby go uruchomić? Rzeczywistą wtyczką, której używam jest Unite.

Odpowiedz

44

mapowanie to oznaczało do mapowania i wywoływania poprzez mapę. Mapa <Plug> to urządzenie, które ujawnia użytkownikowi czysty interfejs działań wtyczek.


Przykład: Zamiast mapowania niektóre klucz do niektórych funkcji wtyczki w twardej kod wtyczki, takich jak „mapa zz do działania Centrum kursor estetycznie '”

nnoremap <expr> zz 'zz'.float2nr(winheight(0)*0.1).'<C-E>' 

jest lepiej eksponować tylko mapowane mapowanie <Plug>, które użytkownik może następnie zmienić, bez konieczności kopiowania i wklejania "akcji".

nnoremap <expr> <Plug>NiceCenterCursor 'zz'.float2nr(winheight(0)*0.1).'<C-E>' 
nmap zz <Plug>NiceCenterCursor 

Jest to łatwe do zastąpienia, ponownego użycia, podłączenia przez użytkownika.


<Plug> mapowania są aktywne tylko w trybach zostały one zdefiniowane dla. Aby wykonać odwzorowanie <Plug> zdefiniowane dla trybu normalnego, można zrobić tak, jak w przypadku zwykłego polecenia: użyj :normal (bez wykrzyknika).

:execute "normal \<Plug>NiceCenterCursor" 

Od <Plug> faktycznie reprezentuje specjalnego klucza magiczne, musimy użyć :normal wraz z :execute i uciec <Plug>.

Mechanizm <Plug> został szczegółowo opisany pod numerem :h 41.11. Zobacz także this article about this topic by a Vim master.

+4

Och, więc ważne jest, aby 'nmap' był' nmap', a nie 'nnoremap', ponieważ będzie traktował' NiceCenterCursor' jako kolejne mapowanie. Poprawny? – Tarrasch

+4

@ Tarrasch Dokładnie, prawostronna strona mapy musi być remapowana, aby to zadziałało. To samo z ': normal': niezbędne jest użycie (remapping)': normal', a nie non remapping ': normal!'. – glts

Powiązane problemy