Цель состоит в том, чтобы ключ j выполнял, возможно, сложную задачу и , чтобы перейти к следующей строке (последнее действие выполняется точно так же, как исходная функция j ключ).
Моя первая попытка состояла в том, чтобы отобразить ключ j следующим образом:
nn j :<C-U>execute "call MyFun(" . v:count . ")"<CR>
(как вы можете видеть, я собираюсь сделать Поведение j зависит от счетчика, который к нему предшествует) и определить соответствующую функцию MyFun
:
fu! MyFun(count)
" do more stuff based on a:count
normal j
endf
, которая является ошибочной, поскольку теперь она нажимает j приводит к ошибке E169: Command too recursive
, поскольку нерекурсивность nnoremap
, если мой вывод верен, применяется к «буквальному» содержанию {rhs}
отображения, а не ко всему, что «внутри»это (другими словами, тело function
использует значение j в тот момент, когда оно вызывается, вызывая рекурсию в бесконечности).
Поэтому я попробовал следующее
nn , j
nn j :<C-U>execute "call MyFun(" . v:count . ")"<CR>
fu! MyFun(count)
" do more stuff based on a:count
normal ,
endf
Однако это означает, что я теряю ключ , .Я знаю, что могу избежать траты этого отображения, делая
nn <Plug>Nobody j
, но тогда я не знаю, как использовать <Plug>Nobody
(мое понимание действительно, что его использование только в {rhs}
другого, не - nore
отображение)