
如何在 Nushell 中启用 fzf 的快捷键绑定与模糊补全【免费下载链接】fzf:cherry_blossom: A command-line fuzzy finder项目地址: https://gitcode.com/GitHub_Trending/fz/fzf如果你在 Nushell 中使用 fzf只想运行find | fzf手动过滤是不够的。fzf 官方为 Nushell 提供了集成脚本启用后可以在 shell 里直接用CTRL-T、CTRL-R、ALT-C呼出文件、历史、目录查找器并用**TAB触发模糊补全。本文按 fzf 仓库文档README.md、install、shell/key-bindings.nu、shell/completion.nu给出启用这两类功能的完整路径以及验证和禁用方法。前提条件已安装 fzf 且fzf命令可用。安装方式任选例如 macOS/Linux 上的brew install fzfDebian 9/Ubuntu 19.10 上的sudo apt install fzf完整列表见 README.md 的 Installation 一节。已安装 Nushellnu命令可用。install 脚本通过command -v nu检测 Nushell检测不到就不会配置它。fzf --nushell这类选项--bash、--zsh、--fish、--nushell只在较新版本的 fzf 中可用。如果你的 fzf 版本较老文档给出的替代方案是手动加载仓库 shell 目录下的脚本文件文件位置可能因包管理器而异可用包管理器的文档查询例如apt show fzf。启用集成文件Nushell 与 bash/zsh 的关键区别Nushell 不支持把输出管道给source所以不能像 bash 那样写eval $(fzf --bash)。fzf 的做法是把集成脚本生成到 Nushell 的 autoload 目录由 Nushell 自动加载。主路径运行 install 脚本git clone --depth 1 https://gitcode.com/GitHub_Trending/fz/fzf.git ~/.fzf ~/.fzf/installinstall 脚本会修改 shell 配置并设置 shell 集成。它对 Nushell 的处理逻辑见 install是用nu -c $nu.user-autoload-dirs | first取得 autoload 目录并mkdir -p创建同时勾选快捷键绑定和自动补全时把fzf --nushell的完整输出写入该目录下的_fzf_integration.nu只勾选其中一项时则分别复制 shell/key-bindings.nu 或 shell/completion.nu 到同一位置结束后输出提示# nushell: files are loaded automatically from autoload directory——集成文件从 autoload 目录自动加载无需手动 source重启 Nushell 即可生效。不想配置 Nushell 时install 脚本支持--no-nushell参数跳过。替代路径不跑 install 脚本手动生成如果你已经通过包管理器装好 fzf、不想走 clone install 流程README.md 给出的手动设置方式是# Generate the integration script mkdir ($nu.default-config-dir | path join autoload) fzf --nushell | save -f ($nu.default-config-dir | path join autoload _fzf_integration.nu)第一条命令在$nu.default-config-dirNushell 默认配置目录下创建autoload子目录第二条把fzf --nushell的输出保存为_fzf_integration.nu。重启 Nushell 后该文件会被自动加载。三个快捷键绑定集成生效后可以在 bash、zsh、fish 和 Nushell 中共用的三个绑定在 Nushell 中同样提供README.md “Key bindings for command-line” 一节CTRL-T把选中的文件和目录粘贴到命令行。默认用--walker file,dir,follow,hidden生成列表可多选。CTRL-R从命令历史中选择并粘贴回命令行。按TAB可多选命令再按一次CTRL-R可切换“按相关性 / 按时间”排序。ALT-C进入选中的目录等效于对选中目录执行cd。从 shell/key-bindings.nu 可以看到这三个绑定注册在emacs、vi_normal、vi_insert模式下因此 Nushell 的 Emacs 和 Vi 编辑模式都能使用。历史绑定默认按“最近优先、去重”展示并带--schemehistory选项。验证是否生效重启 Nushellinstall 脚本提示“files are loaded automatically from autoload directory”文件放在正确的 autoload 目录后重启 shell 是生效条件按ALT-C应弹出反向排列的目录查找器选择后当前工作目录切换过去按CTRL-R并输入任意前缀应弹出历史命令列表选中后命令填回命令行在输入vim **后按TAB见下文补全触发规则应弹出文件列表。仓库的测试套件中也包含 Nushell 集成的专门测试类TestNushelltest/test_shell_integration.rb可作为集成行为预期的参考。禁用与定制快捷键文档明确把对应的*_COMMAND变量设为空字符串即可禁用某个绑定未定义则启用显式设为则禁用。在 Nushell 中README.md 给出的做法是写进你的env.nu$env.FZF_CTRL_R_COMMAND $env.FZF_ALT_C_COMMAND 注意 shell/key-bindings.nu 中的判断逻辑变量为 null未定义时绑定启用为时禁用。并且 README 特别提醒——在集成脚本加载之后再设置这些变量不会有任何效果必须让变量在加载前就位。其他可用变量FZF_CTRL_T_COMMAND/FZF_ALT_C_COMMAND设成自定义命令可覆盖默认列表来源FZF_CTRL_T_OPTS/FZF_CTRL_R_OPTS/FZF_ALT_C_OPTS给对应绑定追加 fzf 选项FZF_DEFAULT_OPTS/FZF_DEFAULT_OPTS_FILE全局选项集成脚本按“内置参数 →FZF_DEFAULT_OPTS_FILE内容 →FZF_DEFAULT_OPTS→ 绑定级参数”的顺序合并。模糊补全**TAB触发Nushell 的模糊补全通过 Nushell 的 external completer 机制实现shell/completion.nu。注册逻辑会先尝试 fzf 补全器若当前词不以触发序列结尾则回退到你原有的 external completer因此不会顶掉已有补全配置。触发规则光标前的词以触发序列默认**由FZF_COMPLETION_TRIGGER控制结尾时按TABCOMMAND [DIRECTORY/][FUZZY_PATTERN]**TABREADME.md 中给出的典型用法# Files under the current directory可按 TAB 多选 vim **TAB # Files under parent directory vim ../**TAB # Files under your home directory vim ~/**TAB # Directories under current directory单选 cd **TAB # 进程补全可按 TAB 多选 kill -9 **TAB # 主机名补全 ssh **TABNushell 与 bash/zsh 的重要差异README 的 “Fuzzy completion for Nushell” 一节明确指出了两点Nushell 0.103.0 起external completer 不再对内置命令如cd、ls触发。也就是说在较新的 Nushell 上**TAB只对 external commands 生效上面的cd **TAB示例在新版本中不会走 fzf 补全路径。如果你的 Nushell 版本在 0.103.0 及以上对内置命令做目录补全时要以外部命令的等价方式验证。目录补全针对的命令列表由FZF_COMPLETION_DIR_COMMANDS控制shell/completion.nu 中默认值为[cd, pushd, rmdir]。可用环境变量README 列出 Nushell 补全支持以下环境变量默认值以 shell/completion.nu 头部注释为准变量用途FZF_COMPLETION_TRIGGER触发序列默认**FZF_COMPLETION_OPTS补全用的 fzf 通用选项如--borderFZF_COMPLETION_PATH_OPTS文件路径补全专用 fzf 选项FZF_COMPLETION_DIR_OPTS目录补全专用 fzf 选项FZF_COMPLETION_DIR_COMMANDS走目录补全的命令列表默认cd、pushd、rmdirssh、scp、sftp、telnet的主机补全会从~/.ssh/config、~/.ssh/known_hosts、/etc/hosts等文件提取主机名逻辑见 shell/completion.nu 的__fzf_list_hostskill走ps -eo ...输出并抽取 PID。自定义补全器在config.nu中定义$env.FZF_COMPLETERS记录可以为任意命令挂自定义候选源。每个条目是一个闭包接收 prefix 和命令 spans返回候选字符串列表或返回{ candidates: [...], opts: [...] }记录以附带自定义 fzf 选项。README.md 中的 pacman 示例示例结果供格式参考$env.FZF_COMPLETERS { pacman: {|prefix, spans| let sub $spans | skip 1 | first let candidates (if ($sub ~ -[SF]) { ^pacman -Slq | lines } else if ($sub ~ -[QR]) { ^pacman -Qq | lines } else { [] }) { candidates: $candidates, opts: [--preview, pacman -Si {}] } } }更多例子见 shell/completion-examples.nu。已知限制--nushell选项要求较新版本的 fzf老版本只能改用 shell 目录中的key-bindings.nu/completion.nu手动加载文件位置随包管理器而变。Nushell 0.103.0 上内置命令不触发 external completer**TAB仅对外部命令生效。tmux 内默认不调用 fzf-tmuxFZF_TMUX默认为0只有设置FZF_TMUX为非 0 或设置了FZF_TMUX_OPTS时shell/key-bindings.nu 与 shell/completion.nu 才会切换到fzf-tmux窗口模式高度由FZF_TMUX_HEIGHT默认40%控制。手动生成路径使用$nu.default-config-dir | path join autoload而 install 脚本使用nu -c $nu.user-autoload-dirs | first定位 autoload 目录——两者都是文档给出的位置以你实际采用的启用路径为准放错目录文件不会被自动加载。完成上述任一路径并重启 Nushell 后ALT-C弹出目录查找器、vim **TAB弹出文件补全即表示快捷键绑定与模糊补全都已生效。【免费下载链接】fzf:cherry_blossom: A command-line fuzzy finder项目地址: https://gitcode.com/GitHub_Trending/fz/fzf创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考