joshmedeski/sesh
GitHub: joshmedeski/sesh
一款基于 Go 开发的智能 tmux 会话管理工具,通过整合 zoxide 实现项目间快速切换和会话自动化配置。
Stars: 2155 | Forks: 98
Sesh,智能 tmux 会话管理器
[English](README.md) | [简体中文](README.zh-cn.md)
Sesh 是一个 CLI 工具,可帮助你利用 zoxide 快速轻松地创建和管理 tmux 会话。
- **智能会话创建** - 根据 git 仓库、git 远程地址或目录自动命名会话
- **Zoxide 集成** - 瞬间跳转到你最常用的项目
- **会话配置** - 在 `sesh.toml` 中为每个项目定义启动命令、窗口和预览命令
- **通配符配置** - 将设置应用于所有匹配 glob 模式的项目
- **内置选择器** - 交互式会话选择器,或与 fzf、television、gum 集成
- **克隆并连接** - 一步完成 git 仓库克隆并启动会话
- **最近会话切换** - 在两个最近的会话之间无缝切换
- **根会话导航** - 跳转到 git worktree 或仓库的根目录
- **Nerd Font 图标** - 在选择器中显示会话类型图标
- **Shell 补全** - 支持 Bash、Zsh、Fish 和 PowerShell 的 Tab 补全
## 目录
| - [视频](#videos) - [如何安装](#how-to-install) - [Shell 补全](#shell-completion) - [扩展](#extensions) - [如何使用](#how-to-use) - [推荐的 tmux 设置](#recommended-tmux-settings) | - [额外功能](#bonus) - [配置](#configuration) - [贡献](#contributing) - [背景("t" 脚本)](#background-the-t-script) - [贡献者](#contributors) - [Star 历史](#star-history) |
Intro from Josh Medeski (sesh's creator) |
Review from DevOps Toolbox |
Homebrew
要安装 sesh,请运行以下 [homebrew](https://brew.sh/) 命令: ``` brew install sesh ```Arch Linux AUR
要安装 sesh,请运行以下 [yay](https://aur.archlinux.org/packages/yay) 命令: ``` yay -S sesh-bin ```Go
或者,你可以使用 Go 的 go install 命令安装 Sesh: ``` go install github.com/joshmedeski/sesh/v2@latest ``` 这将下载并安装最新版本的 Sesh。请确保你的 Go 环境已正确设置。Conda
要安装 sesh,根据你的配置运行以下命令中的**一个**: - Conda/(micro)mamba 用户 ``` # 如果需要,替换为 mamba/micromamba conda -c conda-forge install sesh ``` - Pixi 用户 ``` pixi global install sesh ```Nix
请参阅 [nix 包目录](https://search.nixos.org/packages?channel=unstable&show=sesh&from=0&size=50&sort=relevance&type=packages&query=sesh) 获取有关如何通过 nix 平台安装 sesh 的说明。Bash
``` # 生成补全脚本 sesh completion bash > sesh-completion.bash # 安装到系统全局(推荐) sudo cp sesh-completion.bash /etc/bash_completion.d/ # 或者仅安装到当前用户 mkdir -p ~/.local/share/bash-completion/completions cp sesh-completion.bash ~/.local/share/bash-completion/completions/sesh # 重新加载 shell source ~/.bashrc ```Zsh
``` # 生成补全脚本 sesh completion zsh > _sesh # 安装到系统全局(推荐) sudo mkdir -p /usr/local/share/zsh/site-functions sudo cp _sesh /usr/local/share/zsh/site-functions/ # 或者仅安装到当前用户 mkdir -p ~/.zsh/completions cp _sesh ~/.zsh/completions/ echo 'fpath=(~/.zsh/completions $fpath)' >> ~/.zshrc echo 'autoload -U compinit && compinit' >> ~/.zshrc # 重新加载 shell source ~/.zshrc ```Fish
``` # 生成并安装补全 sesh completion fish > ~/.config/fish/completions/sesh.fish # 重新加载 fish 配置 source ~/.config/fish/config.fish ```PowerShell
``` # 生成补全脚本 sesh completion powershell > sesh.ps1 # 创建 PowerShell 配置文件目录(如果不存在) mkdir -p (Split-Path $PROFILE) # 添加到 PowerShell 配置文件 Add-Content $PROFILE ". /path/to/sesh.ps1" # 重新加载 PowerShell & $PROFILE ```
## Ulauncher 扩展
对于使用 [Ulauncher](https://ulauncher.io/) 的 Linux 用户,有两个扩展可以在终端外使用 sesh:
- [Sesh Session Manager](https://ext.ulauncher.io/-/github-jacostag-sesh-ulauncher)
- [SESHion Manager](https://ext.ulauncher.io/-/github-mrinfinidy-seshion-manager)
以下是 Sesh Session Manager 需要注意的限制:
- 在使用扩展之前,tmux 必须处于运行状态
## Walker launcher 使用方法 (Linux)
直接在 $XDG_CONFIG_HOME/config.toml 中创建一个操作
```
[[plugins]]
name = "sesh"
prefix = ";s "
src_once = "sesh list -d -c -t -T"
cmd = "sesh connect --switch %RESULT%"
keep_sort = false
recalculate_score = true
show_icon_when_single = true
switcher_only = true
```
### 对于 dmenu 模式,你可以使用:
#### Fish shell:
set ssession $(sesh l -t -T -d -H | walker -d -f -k -p "Sesh sessions"); sesh cn --switch $ssession
#### Bash/Zsh:
ssession=$(sesh l -t -T -d -H | walker -d -f -k -p "Sesh sessions"); sesh cn --switch $ssession
##### 对于 dmenu 启动器,将 walker -dfk 替换为 dmenu 或 rofi)
### 如何使用
### 用于会话的 tmux
[tmux](https://github.com/tmux/tmux) 是一个强大的终端复用器,允许你创建和管理多个终端会话。Sesh 旨在简化 tmux 会话的管理。
### 用于目录的 zoxide
[zoxide](https://github.com/ajeetdsouza/zoxide) 是 `cd` 的一个极快替代品,它会跟踪你最常用的目录。Sesh 使用 zoxide 来管理你的项目。你需要先设置 zoxide,但一旦设置完成,你就可以用它快速跳转到最常用的目录。
### 基本用法
一旦设置好 tmux 和 zoxide,`sesh list` 将列出你所有的 tmux 会话和 zoxide 结果,而 `sesh connect {session}` 将连接到一个会话(如果尚不存在则自动创建)。最好将其集成到你的 shell 和 tmux 中使用。
#### fzf
将 sesh 集成到你工作流程中最简单的方法是使用 [fzf](https://github.com/junegunn/fzf)。你可以用它来选择一个要连接的会话:
```
sesh connect $(sesh list | fzf)
```
#### tmux + fzf
为了与 tmux 集成,你可以在 tmux 配置(`tmux.conf`)中添加一个键绑定。例如,以下内容会将 `ctrl-a T` 绑定到以 tmux 弹出窗口形式打开 fzf 提示符(使用 `fzf-tmux`),并使用不同的命令列出活动会话(`sesh list -t`)、配置的会话(`sesh list -c`)、zoxide 目录(`sesh list -z`)以及查找目录(`fd...`)。
```
bind-key "T" run-shell "sesh connect \"$(
sesh list --icons | fzf-tmux -p 80%,70% \
--no-sort --ansi --border-label ' sesh ' --prompt '⚡ ' \
--header ' ^a all ^t tmux ^g configs ^x zoxide ^d tmux kill ^f find' \
--bind 'tab:down,btab:up' \
--bind 'ctrl-a:change-prompt(⚡ )+reload(sesh list --icons)' \
--bind 'ctrl-t:change-prompt(🪟 )+reload(sesh list -t --icons)' \
--bind 'ctrl-g:change-prompt(⚙️ )+reload(sesh list -c --icons)' \
--bind 'ctrl-x:change-prompt(📁 )+reload(sesh list -z --icons)' \
--bind 'ctrl-f:change-prompt(🔎 )+reload(fd -H -d 2 -t d -E .Trash . ~)' \
--bind 'ctrl-d:execute(tmux kill-session -t {2..})+change-prompt(⚡ )+reload(sesh list --icons)' \
--preview-window 'right:55%' \
--preview 'sesh preview {}'
)\""
```
你可以根据需要自定义,有关不同选项的更多信息,请参阅 `man fzf`。
#### tmux + [television](https://github.com/alexpasmantier/television)
如果你更喜欢使用 television 而不是 fzf,你可以在 tmux 配置中添加一个绑定,以 tmux 弹出窗口的形式打开 [sesh channel](https://alexpasmantier.github.io/television/community/channels-unix/#sesh)。
```
bind-key "T" display-popup -E -w 80% -h 70% -d '#{pane_current_path}' -T 'Sesh' tv sesh
```
使用 `Ctrl-s` 在源之间切换,使用 `Ctrl-d` 终止高亮显示的会话。
### 窗口管理
`sesh window`(别名 `w`)允许你在会话中列出、切换和创建 tmux 窗口 —— 类似于 `sesh list` 和 `sesh connect` 对会话的操作方式。
#### 列出当前会话中的窗口
```
sesh window
```
#### 按名称切换到现有窗口
```
sesh window editor
```
如果当前会话中存在名为 `editor` 的窗口,sesh 将切换到该窗口。
#### 在目录中创建新窗口
```
sesh window ~/projects/my-app
```
如果不存在具有该名称的窗口,sesh 将创建一个以该目录(`my-app`)命名的新窗口,并将其工作目录设置为给定路径。
#### 定位特定会话
使用 `--session` / `-s` 管理非当前附加会话中的窗口:
```
sesh window --session work
sesh window ~/projects/my-app --session work
```
#### fzf 集成
你可以将 `sesh window` 与 fzf 结合使用,以交互方式切换窗口:
```
sesh window $(sesh window | fzf)
```
或者作为 tmux 键绑定:
```
bind-key "W" run-shell "sesh window \"$(sesh window | fzf-tmux -p 60%,50% --prompt '🪟 ')\""
```
## gum + tmux
如果你更喜欢使用 [charmbracelet 的 gum](https://github.com/charmbracelet/gum),那么你可以使用以下命令连接到会话:
```
bind-key "K" display-popup -E -w 40% "sesh connect \"$(
sesh list -i | gum filter --limit 1 --no-sort --fuzzy --placeholder 'Pick a sesh' --height 50 --prompt='⚡'
)\""
```
**注意:** 与 fzf 相比,gum 可用的功能较少,但我发现它的匹配算法更快,而且感觉更现代。
请观看我的视频 [Top 4 Fuzzy CLIs](https://www.youtube.com/watch?v=T0O2qrOhauY),了解更多可以与 sesh 集成的工具灵感。
#### sesh 选择器
Sesh 有一个内置选择器,可以用作 tmux 弹出窗口:
```
bind-key "K" display-popup -h 90% -w 50% -E "sesh picker -i"
```
## zsh 键绑定
如果你使用 zsh,可以将以下键绑定添加到 `.zshrc` 以连接到会话:
```
function sesh-sessions() {
{
exec /dev/null 2>&1 || true
[[ -z "$session" ]] && return
sesh connect $session
}
}
zle -N sesh-sessions
bindkey -M emacs '\es' sesh-sessions
bindkey -M vicmd '\es' sesh-sessions
bindkey -M viins '\es' sesh-sessions
```
将其添加到 `.zshrc` 后,你可以按 `Alt-s` 打开 fzf 提示符以连接到会话。
## 推荐的 tmux 设置
我建议你将这些设置添加到 `tmux.conf` 中,以便更好地使用此插件。
```
bind-key x kill-pane # skip "kill-pane 1? (y/n)" prompt
set -g detach-on-destroy off # don't exit from tmux when closing a session
```
## 额外功能
### Last(上一个)
默认的 `标签:CLI, EVTX分析, FZF, Git集成, Go语言, Linux 内核安全, Linux工具, Python安全, Shell脚本, tmux, WiFi技术, Zoxide, 会话管理器, 威胁情报, 工作流优化, 开发效率, 开发者工具, 日志审计, 智能命名, 模糊搜索, 程序破解, 端口探测, 终端增强, 终端复用, 网络可观测性, 网络调试, 自动化, 项目管理