Kakoune的简易项目切换器

Lobsters Hottest 工具

摘要

作者利用Kakoune终端编辑器的内置脚本实现了一个轻量级项目切换器,允许用户注册项目并通过模糊查找来切换。

<p><a href="https://lobste.rs/s/mem2md/simple_project_switcher_for_kakoune">评论</a></p>
查看原文
查看缓存全文

缓存时间: 2026/05/31 08:17

# Kakoune 的简易项目切换器 来源:https://bhoot.org/2026/kakoune-project-switcher/ ## 目录 1. 目录 (https://bhoot.org/2026/kakoune-project-switcher/#table-of-contents) 2. 其他编辑器如何实现项目切换器 (https://bhoot.org/2026/kakoune-project-switcher/#how-other-editors-implement-a-project-switcher) 3. 项目切换器的要素 (https://bhoot.org/2026/kakoune-project-switcher/#elements-of-a-project-switcher) 4. 我在 Kakoune 中实现这些要素的方式 (https://bhoot.org/2026/kakoune-project-switcher/#how-i-manifested-the-elements-in-kakoune) 1. 通过界面注册新项目 (https://bhoot.org/2026/kakoune-project-switcher/#registering-a-new-project-with-the-interface) 2. 切换到已注册的项目 (https://bhoot.org/2026/kakoune-project-switcher/#switching-to-a-registered-project) 5. 附加功能 – 文件选择器 (https://bhoot.org/2026/kakoune-project-switcher/#bonus---file-picker) 6. 附加功能 – 快捷键绑定 (https://bhoot.org/2026/kakoune-project-switcher/#bonus---keybindings) 7. 结语 (https://bhoot.org/2026/kakoune-project-switcher/#in-closing) 我一直很欣赏编辑器中的项目切换界面。 我没想到 Kakoune (https://kakoune.org/) 这个精简的终端编辑器会内置项目切换器。但在无数次执行 `cd $project_dir; kak` 之后,我开始寻找解决方案。 ## 其他编辑器如何实现项目切换器 VS Code 通过 *打开最近项目* 操作提供项目切换器,在 Linux 上绑定到 `Ctrl+R`。根据我的经验,通过 VS Code 的 *打开文件* 或 *打开文件夹* 对话框打开的任何文件或文件夹都会显示在这里。所以如果你经常直接打开文件,称它为项目切换器就有点牵强了。 以下视频片段展示了 VS Code 的切换器: JetBrains IDE 提供了一个无界的 *打开最近项目* 操作,切换器会在光标尖端打开。不过我会使用 FrameSwitcher 插件 (https://plugins.jetbrains.com/plugin/7138-frameswitcher),它的表现更好。 以下视频片段展示了 WebStorm 的切换器: ## 项目切换器的要素 我认为项目切换界面有两个基本要素: 1. 显示已通过界面注册的项目列表,可以通过模糊查找并切换到某个项目。切换后,所选项目的目录成为编辑器上下文中的当前目录,这样编辑器操作会基于所选项目目录进行。例如,文件查找器会在此目录下查找文件,等等。 2. 向界面添加新项目。这通常是自动完成的。当用户在 JetBrains IDE 或 VS Code 中打开新项目时,编辑器会自动将其注册到切换界面。 ## 我在 Kakoune 中实现这些要素的方式 Kakoune 的脚本原语,加上它使用 shell 脚本来扩展自身的理念,足以构建一个简单的项目切换器。 我需要一个地方来持久记录在 Kakoune 中打开过的项目目录。我选择了一个纯文本文件 `projects`,与 Kakoune 的配置文件 `~/.config/kak/kakrc` 放在一起。`projects` 文件中的每一行存储一个项目目录的路径。 ### 通过界面注册新项目 我编写了一个 Kakoune 命令:`project-add`,它: 1. 让用户使用 Kakoune 的路径补全界面从文件系统中选择一个目录 2. 将所选目录的路径追加到 `projects` 文件中 3. 使用 Kakoune 的 `:change-directory` 原语将所选目录设为 Kakoune 的工作目录 实现如下: ``` define-command project-add \ -docstring "Add a project" \ -params 1 %{ nop %sh{ printf "%s\n" "$1" >> ~/.config/kak/projects } change-directory %arg{1} exec ":file-picker " } complete-command project-add file ``` ### 切换到已注册的项目 我实现了一个 Kakoune 命令:`project-pick`,它: 1. 使用 Kakoune 的补全界面列出 `projects` 文件中存储的路径 2. 使用 `:change-directory` 原语将 Kakoune 的工作目录设为所选路径 实现如下: ``` define-command project-pick \ -docstring "Pick a project" \ -params 1 %{ change-directory %arg{1} exec ":file-picker " } complete-command project-pick \ shell-script-candidates \ %{ cat ~/.config/kak/projects } ``` ## 附加功能 – 文件选择器 `project-add` 和 `project-pick` 命令都会将用户带到一个文件选择界面,该界面同样基于 Kakoune 的补全界面构建,这样他们可以立即开始处理项目。 ``` define-command file-picker \ -docstring "Pick a file from current directory" \ -params 1 %{ edit %arg{1} } complete-command file-picker \ shell-script-candidates \ %{ git ls-files -c -o --exclude-standard } ``` ## 附加功能 – 快捷键绑定 两个命令都分配了各自的快捷键以便快速执行。Kakoune 提供了自定义用户模式,可以作为命名空间来整洁地收纳相关快捷键。我创建了一个 *project* 用户模式来实现这一点。 ``` declare-user-mode project map global user p ":enter-user-mode project " \ -docstring "Project commands" map global project p ":project-pick " \ -docstring "Pick a project" map global project a ":project-add " \ -docstring "Add a project" ``` ## 结语 我可以实现一些保护措施,比如检查 `projects` 文件是否存在,或者添加一个 `:project-delete` 命令,但我对当前状态已经满意。欢迎任何评论。

相似文章

Kakoune 代码编辑器

Lobsters Hottest

Kakoune 是一款多功能的文本和代码编辑器,它使用多选功能进行高效编辑,并提供语法高亮、自定义以及通过客户端/服务器架构实现协作编辑等功能。

从 Helix 中拆分 Konsole 视图以运行工具

Lobsters Hottest

作者描述如何创建一个 shell 脚本,以自动拆分 Konsole 终端视图并直接从 Helix 编辑器运行像 gitu 这样的工具,从而改善工作流自动化。

@koffuxu: https://x.com/koffuxu/status/2054527573439181206

X AI KOLs Timeline

cc-switch 是一个桌面应用,帮助用户通过可视化界面一键切换 Claude Code 使用的底层大模型,无需手动修改配置文件。文章介绍了如何安装配置以接入 DeepSeek 模型,并解释了其工作原理。

CMD+K快速切换器的发明奇史

Lobsters Hottest

本文探讨了CMD+K快速切换器的历史和发明,这是一个在许多应用程序中用于快速导航的普遍键盘快捷键。