我已经在 debian 11 (bullseye) 上安装了 fzf。当我输入 ctrl-r 来触发历史搜索时,没有任何反应。在我的 Mac 上运行良好。我正在使用 zsh。
更新:尝试添加bindkey '^r' fzf-history-widget
到 .zshrc 但我只是收到“没有这样的小部件”错误。
fzf --版本报告 0.24(开发)
是否可以在 zsh shell 中自动触发 fzf 历史搜索?
在这个视频中,用户点击“Ctrl+r”开始历史搜索,然后开始输入。当我开始输入任何内容时,是否可以自动启动历史搜索?或者,是否可以配置 zsh 以便新提示始终以“Ctrl + r”模式启动?
例如,在 vim 中,您可以搜索类似 , 的名称test1
,test2
或者test9
\n按/\\<test\\d\\>
。我想要这个“功能”,例如查找文件名test<num>
中包含该单词的文件名。我尝试了一下:
但正如你所看到的,它不起作用。
\n这是我的 FZF 环境变量:
\n$FZF_DEFAULT_COMMAND\nrg --files --hidden --glob "!.git/*"
$FZF_DEFAULT_OPTS\n--prompt=\'\xef\x8c\x83 \' --cycle --preview=\'bat {}\' +i --bind=ctrl-j:preview-half-page-down,ctrl-k:preview-half-page-up
如何使用 vim 和 sed 中的正则表达式模式来查找文件(以及是否可以在这些文件中查找单词)?
\n问题
我一直在尝试使用fzf绑定快捷方式(最好是Ctrl+ o)以交互方式搜索文件并将其通过管道传输到xdg-open
zsh 中。fzf
只要您获取位于fzf/shell/key-bindings.zsh中的文件,许多快捷方式就已经是该实用程序的一部分。在那里,您将找到用于绑定Ctrl+r模糊搜索命令历史记录和Ctrl+t模糊完成当前命令行的片段。这是 fzf 源代码中第一个快捷方式的样子:
# CTRL-R - Paste the selected command from history into the command line
fzf-history-widget() {
local selected num
setopt localoptions noglobsubst noposixbuiltins pipefail no_aliases 2> /dev/null
selected=( $(fc -rl 1 | perl -ne 'print if !$seen{(/^\s*[0-9]+\**\s+(.*)/, $1)}++' |
FZF_DEFAULT_OPTS="--height ${FZF_TMUX_HEIGHT:-40%} $FZF_DEFAULT_OPTS -n2..,.. --tiebreak=index --bind=ctrl-r:toggle-sort,ctrl-z:ignore $FZF_CTRL_R_OPTS --query=${(qqq)LBUFFER} +m" $(__fzfcmd)) )
local ret=$?
if [ -n "$selected" …
Run Code Online (Sandbox Code Playgroud) FZF 是一个可爱的工具,我遇到的主要问题是我最终使用它运行的命令不会出现在我的 bash 历史记录中。
假设我这样做
history | fzf
Run Code Online (Sandbox Code Playgroud)
我选择最近运行的命令,例如echo "hello"
。然后,当我查看 bash 历史记录时,我最近运行的命令不是echo "hello"
,而是history | fzf
。这意味着如果我想再次运行它,我必须重新运行整个history | fzf
并找到相同的echo "hello"
命令。
有没有办法强制我选择的命令,我通过使用fzf
进入我的 bash 历史记录?
我正在尝试使用 fzf 来选择并激活不同的虚拟环境。但是,我收到以下错误:
xargs: source: No such file or directory
我的命令包括三个部分:find | fzf | xargs
(1) find 定位我的虚拟环境,
(2) 使用 fzf 选择虚拟环境,
(3) xargs 用于source
所选文件。
下面是完整的命令:
find ~/.virtualenvs/ -maxdepth 1 -type d | fzf | xargs -I {} source {}/bin/activate
xargs: source: No such file or directory
我可以直接获取该文件(即命令提示符显示进入 fzf_delete 虚拟环境):
brian:~$ source /home/brian/.virtualenvs/fzf_delete/bin/activate
(fzf_delete) brian:~$
我可以使用 fzf 选择虚拟环境:
find ~/.virtualenvs/ -maxdepth 1 -type d | fzf
/home/brian/.virtualenvs/fzf_delete
我还通过删除对 find 和 fzf 的依赖来将问题隔离到 xargs:
echo "/home/brian/.virtualenvs/fzf_delete" | xargs …
a.1.58 fadado/CSV https://github.com/fadado/CSV
a.1.63 jehiah/json2csv https://github.com/jehiah/json2csv
a.1.80 stedolan/jq https://github.com/stedolan/jq/issues/370
Run Code Online (Sandbox Code Playgroud)
mapfile -d $'\t' -t Link < <(awk 'BEGIN{FS="\t"; OFS="\t"} {print $2,$3}' "${SessionP}" | fzf)
Run Code Online (Sandbox Code Playgroud)
在上面的命令中,我使用-t
了 mapfile 选项,但echo "${Link[1]}"
打印了一个新的行尾!
参考
我有一个函数,我希望它能让我对我一直在查看的最新目录进行模糊搜索并节省时间,这是一个简单的 1 行:
dirs | sed 'y/ /\n/' | fzf | xargs cd
Run Code Online (Sandbox Code Playgroud)
2 小时后,我不知道出了什么问题):
我不断收到以下错误:
/usr/bin/cd: line 4: cd: ~/Downloads/demo: No such file or directory
Run Code Online (Sandbox Code Playgroud)
即使目录确实存在,无论我做什么。cd 怎么了,为什么这不起作用?
感谢您的评论:更多信息 我尝试了其他一些方法,例如编写函数:
fdr() {
local dir
dir=`dirs | sed 'y/ /\n/' | fzf`
cd $dir
}
Run Code Online (Sandbox Code Playgroud)
虽然 dir
具有正确的值,我得到与上面相同的错误。
我的最终功能
感谢您的帮助,sub shells 正在让我思考,这是我的最终答案,有点hackey,但现在不是什么。
/usr/bin/cd: line 4: cd: ~/Downloads/demo: No such file or directory
Run Code Online (Sandbox Code Playgroud) bash 别名不喜欢引号
dpkg-query -W -f '${Installed-Size;8}kb ${Package} ${Version} ${Status}\n' | sort -n | column -t | grep -Pv "(lib*)" | fzf
Run Code Online (Sandbox Code Playgroud)