Отображения на основе <Plug>в Vim не работают с: нормальной командой - PullRequest
7 голосов
/ 14 января 2012

Скажите, у меня есть следующее

:nm <Plug>Ls :ls<CR>
:nm <Leader>L <Plug>Ls

Когда я делаю , L (, - лидер), я получаю вывод команды :ls. Я также получаю вывод, когда я :normal ,L, но я не получаю при выполнении следующего

:normal <Leader>L
:normal <Plug>Ls

Я могу понять, почему первый не работает, я должен сделать что-то вроде execute 'normal ' . mapleader . 'L'. То, что я не могу понять, является вторым. Это не дает мне никакой ошибки, просто ничего не делает, и это сводит меня с ума. Я не смог найти ничего по этому поводу в документах.

Что я хочу сделать, так это запустить все, что сопоставлено с <Plug>Ls, из командного режима (фактически, в функции). Для этого нужны какие-то темные хаки?

1 Ответ

11 голосов
/ 14 января 2012

Они работают нормально, вы просто не поставляете <Plug>, вы поставляете <, P, l, u, g, >. Правильный синтаксис:

:execute "normal \<Plug>Ls"

То же самое относится к feedkeys(): call feedkeys("\<Plug>Ls"), а не call feedkeys("<Plug>Ls").

Также обратите внимание, что execute "normal ".mapleader."L" на самом деле никогда не следует использовать, как если бы mapleader изменилось после выполнения :nm <Leader>L <Plug>Ls, тогда :execute … попытается вызвать несуществующее отображение (mapleader изменения не влияют на уже созданные отображения ). А у вас нет способов узнать, изменился ли mapleader.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...