Это зависит от того, как реализован плагин.Если он просто выдает простые команды и затем переходит в режим вставки (например, через :startinsert
), это просто вопрос добавления ключей к исходному отображению:
:map <F4> :Files my_directory_path_here <CR><C-R>=strftime("%m%d")<CR>
Я не использую fzf (только старый FuzzyFinder), но я боюсь, что он не будет работать с плагином, если он делает более сложные вещи.Вот демонстрация, которая работает для меня (чтобы вы мне поверили):
:map <F4> :startinsert<CR><C-R>=strftime("%m%d")<CR>
Общая реализация чтения ввода в Vim довольно проста: есть ключевой буфер, который заполняется пользователем;всякий раз, когда обнаруживается полная команда, чтение из буфера приостанавливается, команда выполняется, а затем чтение продолжается (даже если команда тем временем изменила текущий режим ).
Еслиэтот простой подход не работает, есть :help feedkeys()
, низкоуровневая функция, которая позволяет напрямую писать в буфер ввода после любых ожидающих клавиш.
:map <F4> :call feedkeys("\<lt>C-R>=strftime('%m%d')\<lt>CR>", 't')<Bar>startinsert<CR>
Помимобезобразное экранирование для отображения (\<lt>
вместо <
), это просто помещает заполнение буфера ввода перед командой, но эти клавиши выполняются только после нее.
К сожалению, по крайней мере длямой FuzzyFinder, это все еще не работает, потому что плагин использует feedkeys()
самостоятельно для создания своего пользовательского интерфейса (и ему нужно запустить режим вставки и вызвать всплывающее окно завершения; вещи, которые нельзя сделать без feedkeys()
).При этом у нас заканчиваются абстракции в Vim, так что, похоже, нет другого выхода, кроме прямого расширения плагина, чтобы он каким-то образом принял «входную предустановку» в качестве необязательного аргумента.Поэтому, если вы действительно столкнулись с теми же проблемами с fzf, но считаете, что это важная функция, предложите усовершенствование автора fzf или воспользуйтесь обходным решением отдельного вторичного сопоставления.