2013-08-31 1 views
34

Я недавно нашел плагин vim, используя что-то под названием <Plug>. Например, есть команда <Plug>abc_def, которую я хотел бы выполнить.Выполнение <Plug> команд в vim

Я пробовал все как :<Plug>abc_def и тому подобное. Ничего не получилось. И :help <Plug> не дал никакой информации.

Однако, я смог выполнить его, создав сопоставление :map x <Plug>(unite_redraw). Затем я могу выполнить его, нажав x.

Теперь, есть ли способ выполнить :<Plug>abc_def, не создавая сопоставление фиктивных данных, чтобы запустить его? Фактический плагин, который я использую, - Unite.

ответ

44

<Plug> сопоставлений означает, что должен отображаться и вызываться через карту. Карта <Plug> - это устройство, обеспечивающее пользователю доступ к чистому интерфейсу действий плагина.


Пример: Вместо отображения некоторых ключ к какой-то плагин функции в жестком коде плагина например, «карта zz к действию" центральный курсор эстетично»,

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

это лучше выставить только имя, указанное на картинке <Plug>, которое пользователь может затем переназначить, без необходимости копировать и вставлять «действие».

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

Это легко заменяет, повторно использовать, подключать к пользователю.


<Plug> отображения активны только в режимах они были определены для. Чтобы выполнить сопоставление <Plug>, которое определено для нормального режима, вы можете сделать так же, как с любой обычной командой: используйте :normal (без восклицательного знака).

:execute "normal \<Plug>NiceCenterCursor" 

С <Plug> на самом деле представляет собой специальный волшебный ключ, мы должны использовать :normal вместе с :execute и избежать <Plug>.

Механизм <Plug> подробно описан в :h 41.11. См. Также this article about this topic by a Vim master.

+4

О, так важно, чтобы 'nmap' был' nmap', а не 'nnoremap', потому что он будет думать о' NiceCenterCursor' как о простом сопоставлении. Верный? – Tarrasch

+4

@Tarrasch. Для того, чтобы это работало, правая часть карты должна быть переназначена. То же самое с ': normal': очень важно использовать (переназначение)': normal', а не непереворачивать ': normal!'. – glts