fzf.vim изменение рабочего каталога на лету

Когда я использую :Filesв fzf.vim он ищет файлы в текущем каталоге и подкаталогах. Текущий рабочий каталог исправлен. На скриншоте ниже он светло-голубой. Есть ли способ динамически изменять рабочий каталог, в котором запущен FZF? Например, если я просто удалю путь "Документы", тогда FZF начнется с ~ вместо ~/Documents.

Такая функциональность возможна в пакете Helm Emacs, который позволяет это через helm-execute-persistent-action.

1 ответ

Вы можете изменить текущий рабочий каталог, который vim в настоящее время использует :chdir или знакомый :cdкоманда. Видеть:h cd для получения дополнительной информации.

И если вы не хотите менять рабочий каталог vim и просто хотите, чтобы fzf использовал другой каталог, вы можете запустить fzf (:h fzf#run) с обычай dir вариант.

Это пример отображения в моем ~/.vimrc открыть файл в моем /.vim каталог:

nnoremap <leader>fv :call fzf#run({'options': '--reverse --prompt "VimFiles"', 'down': 20, 'dir': '~/.vim/', 'sink': 'e' })<CR>

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

В sinkопция указывает, что делать / выполнять при обнаружении совпадения. а такжеe предназначен для редактирования главного окна.

Это невозможно. Между тем, автор предлагает обходной путь. Взгляните сюда:

Если вы понимаете, что такое fzf на самом деле и как он работает (это универсальный контекстно-свободный текстовый фильтр, работающий вне Vim), вы поймете, что это не то, что мы можем легко реализовать с помощью fzf. Но вы можете экспериментировать с --expect вариант или reloadпривязка. Я думаю, это лучшее, что мы можем сделать на данный момент:

" Reloading source on CTRL-P. Requires fd command.
function! Foo(dir)
  let tf = tempname()
  call writefile(['.'], tf)

  call fzf#vim#files(a:dir, {'source': 'fd', 'options': ['--bind', printf('ctrl-p:reload:base="$(cat %s)"/..; echo "$base" > %s; fd . "$base"', shellescape(tf), shellescape(tf))]})
endfunction

command! -nargs=* Foo call Foo(<q-args>)

https://github.com/junegunn/fzf.vim/issues/338#issuecomment-623087034

Другие вопросы по тегам