Передача ввода в ярлык fzf в vimrc - PullRequest
0 голосов
/ 29 ноября 2018

В моем vimrc есть отображение для вызова fzf для определенного каталога.

:map <F4> :Files my_directory_path_here <CR>

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

Я ищу способ передачи ввода (текущая дата в формате mmdd) в мое отображение выше.

Я поднял глаза и смог найти способ сопоставить это сдругой ключ.

imap <F5> <C-R>=strftime("%m%d")<CR>

Но как мне добавить это в качестве входных данных для моего сопоставления клавиш?

Спасибо.

1 Ответ

0 голосов
/ 29 ноября 2018

Это зависит от того, как реализован плагин.Если он просто выдает простые команды и затем переходит в режим вставки (например, через :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 или воспользуйтесь обходным решением отдельного вторичного сопоставления.

...