Kakoune的简易项目切换器
摘要
作者利用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 代码编辑器
Kakoune 是一款多功能的文本和代码编辑器,它使用多选功能进行高效编辑,并提供语法高亮、自定义以及通过客户端/服务器架构实现协作编辑等功能。
面向 aspiring 高级用户的 Kakoune 详细介绍
本文全面介绍了 Kakoune 这一模态文本编辑器,详细阐述了其设计理念、逆向语法,以及多光标选择和服务器-客户端架构等独特功能。
从 Helix 中拆分 Konsole 视图以运行工具
作者描述如何创建一个 shell 脚本,以自动拆分 Konsole 终端视图并直接从 Helix 编辑器运行像 gitu 这样的工具,从而改善工作流自动化。
@koffuxu: https://x.com/koffuxu/status/2054527573439181206
cc-switch 是一个桌面应用,帮助用户通过可视化界面一键切换 Claude Code 使用的底层大模型,无需手动修改配置文件。文章介绍了如何安装配置以接入 DeepSeek 模型,并解释了其工作原理。
CMD+K快速切换器的发明奇史
本文探讨了CMD+K快速切换器的历史和发明,这是一个在许多应用程序中用于快速导航的普遍键盘快捷键。