Как запустить fzf внутри vim и открыть выбранный файл в разделенном окне?

Как запустить fzf внутри vim и открыть выбранный файл в разделенном окне?

Как запустить fzfвнутри vimи открыть выбранный файл в разделенном окне? Я не хочу устанавливать никаких плагинов.

Я пытался

:!a=$(ls | fzf) && vsplit $a

решение1

Так как fzfнеобходим доступ к консоли, вам придется запустить его как команду переднего плана, и на самом деле нет хорошего способа сделать это.иперехватывать вывод из fzf(имя файла) в Vim через канал. Поэтому использование временного файла для хранения имени файла — самый простой подход.

Простое решение:

function! SelectFile()
  let tmp = tempname()
  execute '!ls | fzf >'.tmp
  let fname = readfile(tmp)[0]
  silent execute '!rm '.tmp
  execute 'vsplit '.fname
endfunction

Затем используйте его с:

:call SelectFile()

(Или создайте сопоставление клавиш или пользовательскую команду для него.)

Использование Vim :terminalдля запуска fzfвнутри него (вместо того, чтобы тратиться на :!) также является хорошим вариантом.

В любом случае, лучшим подходом здесь будет просто использовать один из превосходных плагинов Vim, либо простой, но базовый, который включен вфзфсам по себе и, вероятно, также более полныйfzf.vimкоторый создан на основе низкоуровневого подключаемого модуля и предоставляет мощные функции, которые вам пригодятся.

Связанный контент