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