我在为FZF vim插件中的最新文件找到合适的解决方案时遇到问题.
这个插件应具有以下功能:
我试过两个解决方案
command! FZFMru call fzf#run({
\ 'source': reverse(s:all_files()),
\ 'sink': 'edit',
\ 'options': '-m --no-sort -x',
\ 'down': '40%' })
function! s:all_files()
return extend(
\ filter(copy(v:oldfiles),
\ "v:val !~ 'fugitive:\\|\\.svg|NERD_tree\\|^/tmp/\\|.git/'"),
\ map(filter(range(1, bufnr('$')), 'buflisted(v:val)'), 'bufname(v:val)'))
endfunction
Run Code Online (Sandbox Code Playgroud)
这个在打开会话期间工作,但是当我重新启动vim时,我没有看到所有上次打开的文件.
command! FZFMru call s:fzf_wrap({
\'source': 'bash -c "'.
\ 'echo -e \"'.s:old_files().'\";'.
\ 'ag -l -g \"\"'.
\ '"',
\})
function! s:fzf_wrap(dict)
let defaults = {
\'sink' : 'edit',
\'options' : '+s -e -m',
\'tmux_height': '40%',
\}
call …
Run Code Online (Sandbox Code Playgroud) 我已经处理了这个问题差不多一个月了,我感到很沮丧,任何帮助都会非常感激.
我正在尝试为我的takenote
命令编写一个小部件.小部件的目的是将文件~/notes
夹中的所有markdown文件提供fzf
给用户,以便用户可以选择其中一个并开始编辑它.在用户输入takenote
并按下之后,<tab>
我希望小部件能够运行.
这是_takenote.zsh
小部件定义:
#compdef takenote
local file=$( find -L "$HOME/notes/" -print 2> /dev/null | fzf-tmux +m )
zle reset-prompt
compadd $file
return 1
Run Code Online (Sandbox Code Playgroud)
不幸的是,上面的代码不起作用,因为zle reset-prompt
,如果我删除它然后结果将是这样的:
选择文件后,它将变成:
如您所见,将破坏提示和命令本身.在我看来,我需要做的是zle reset-prompt
在调用之前做一个compadd
但这只有在我将函数绑定到一个键时才能工作,否则,我将得到以下错误:
只有在ZLE处于活动状态时才能调用小部件
我最近发现了这个名为fzf的命令行工具。我按照说明安装了它,它确实有效,除了CTRL-T键绑定之外。尽管如此,我按照他们的说明安装了带有键绑定的特殊内容,并且我还尝试安装从 git 存储库下载的 fzf,而不是通过自制程序,所有CTRL-T键绑定仍然是交换最后两个字符。
我找到了有关此问题的讨论,但所提供的答案都不适合我。
编辑:您可以在第一个视频中看到我想要实现的目标。编辑2:我正在使用MacOs 的终端。
我经常用来fzf
导航文件系统,尤其是 Alt-c 键绑定。
调用时,fzf
从当前工作目录生成一个列表。
是否可以fzf
从指定目录生成列表?
我已经尝试过fzf <dir>
,但它会导致错误(未知选项)。另外,我找不到任何选项,例如-C <dir>
指定起始目录。
我在 vim 中设置了 fzf,几乎没有任何自定义:
" fzf and ripgrep settings
set rtp+=/usr/local/opt/fzf
let g:fzf_action = {
\ 'ctrl-t': 'tab split',
\ 'ctrl-i': 'split',
\ 'ctrl-s': 'vsplit'
\ }
Run Code Online (Sandbox Code Playgroud)
在我的 中.bash_profile
,我将环境变量设置FZF_DEFAULT_COMMAND
为显示隐藏,但忽略node_modules
和.git
:
export FZF_DEFAULT_COMMAND='rg --files --follow --no-ignore-vcs --hidden -g "!{node_modules/*,.git/*}"'
Run Code Online (Sandbox Code Playgroud)
但是,当我:Files
在 vim 中使用函数时,它仍然在我想忽略的文件夹中搜索。
当我:Files
在 fzf.vim 中使用时,它会搜索当前目录和子目录中的文件。当前工作目录是固定的。在下面的屏幕截图中,它是浅蓝色的。有没有办法动态更改运行 FZF 的工作目录?例如,如果我只是删除“Documents”路径,那么 FZF 从 ~ 而不是 ~/Documents 开始。
这种功能在 Emacs helm 包中是可能的,它允许通过 helm-execute-persistent-action 来实现。
我用fzf(模糊查找器)找到了git示例,它们确实很好用.喜欢:
# fbr - checkout git branch
fbr() {
local branches branch
branches=$(git branch -vv) &&
branch=$(echo "$branches" | fzf +m) &&
git checkout $(echo "$branch" | awk '{print $1}' | sed "s/.* //")
}
# fbr - checkout git branch (including remote branches)
fbr() {
local branches branch
branches=$(git branch --all | grep -v HEAD) &&
branch=$(echo "$branches" |
fzf-tmux -d $(( 2 + $(wc -l <<< "$branches") )) +m) &&
git checkout $(echo "$branch" …
Run Code Online (Sandbox Code Playgroud) 我有以下命令可以在命令行中模糊查找文件并在 VSCode 中打开所选文件:
fzf --print0 -e | xargs -0 -r code
Run Code Online (Sandbox Code Playgroud)
现在我希望能够在文件内容中搜索字符串。我可以在命令行中找到搜索的字符串:
rg . | fzf --print0 -e
Run Code Online (Sandbox Code Playgroud)
但现在使用以下命令在 VSCode 中打开文件不再起作用:
rg . | fzf --print0 -e | xargs -0 -r code
Run Code Online (Sandbox Code Playgroud)
因为 VSCode 传递了一个文件名,其中包含文件名本身和搜索字符串(当然是一个空文件)。
如何组合上述两个命令将文件名传递给包含搜索字符串的 VSCode?
我下载了 .exe 文件并将其放入我的 PATH 变量中。fzf
似乎在命令提示符下工作。但我想在 git-bash 中使用它。当我fzf
在 git-bash 中使用时,它似乎开始了,但没有任何反应。
任何意见将是有益的。我试图为自己节省一些按键。
我想使用FZF搜索文件,然后在我选择的编辑器(例如 Sublime、Atom)中打开它们。我不知道如何为此配置我的 shell,我已经尝试了以下方法,但无法让它工作。
你能帮我吗?
谢谢!
fe() {
local files
IFS=$'\n' files=($(fzf-tmux --query="$1" --multi --select-1 --exit-0))
[[ -n "$files" ]] && ${EDITOR:-atom} "${files[@]}"
}
Run Code Online (Sandbox Code Playgroud) fzf ×10
bash ×3
command-line ×3
vim ×3
fuzzy-search ×2
terminal ×2
vim-fzf ×2
completion ×1
directory ×1
filesystems ×1
fuzzyfinder ×1
git-bash ×1
homebrew ×1
macos ×1
mru ×1
neovim ×1
ripgrep ×1
shell ×1
vim-plugin ×1
widget ×1
windows ×1
xargs ×1
zsh ×1
zsh-zle ×1