golang快速创建和管理tmux会话的CLI插件sesh的使用
Golang快速创建和管理tmux会话的CLI插件sesh使用指南
简介
Sesh是一个智能终端会话管理器CLI工具,可以帮助你快速轻松地使用zoxide创建和管理tmux会话。
安装方法
Homebrew安装
brew install sesh
Arch Linux AUR安装
yay -S sesh-bin
Go安装
go install github.com/joshmedeski/sesh/v2@latest
基本使用
Sesh需要tmux和zoxide配合使用:
- tmux:强大的终端复用器,允许创建和管理多个终端会话
- zoxide:快速替代cd命令的工具,跟踪你最常使用的目录
基本命令:
# 列出所有tmux会话和zoxide结果
sesh list
# 连接到会话(如果不存在则自动创建)
sesh connect {session}
与fzf集成
最简单的方法是与fzf集成来选择会话:
sesh connect $(sesh list | fzf)
tmux + fzf配置示例
将以下绑定添加到tmux配置(tmux.conf
)中:
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 {}'
)\""
与gum集成
如果你更喜欢使用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='⚡'
)\""
zsh快捷键绑定
在.zshrc
中添加以下内容:
function sesh-sessions() {
{
exec </dev/tty
exec <&1
local session
session=$(sesh list -t -c | fzf --height 40% --reverse --border-label ' sesh ' --border --prompt '⚡ ')
zle reset-prompt > /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
添加后,可以按Alt-s
打开fzf提示连接会话。
推荐tmux设置
在tmux.conf
中添加以下设置以获得更好体验:
bind-key x kill-pane # 跳过"kill-pane 1? (y/n)"提示
set -g detach-on-destroy off # 关闭会话时不退出tmux
配置
在$XDG_CONFIG_HOME/sesh
或$HOME/.config/sesh
目录创建sesh.toml
文件:
mkdir -p ~/.config/sesh && touch ~/.config/sesh/sesh.toml
黑名单配置
blacklist = ["scratch"]
排序配置
sort_order = [
"tmuxinator", # 最先显示
"config",
"tmux",
"zoxide", # 最后显示
]
默认会话配置
[default_session]
startup_command = "nvim -c ':Telescope find_files'"
preview_command = "eza --all --git --icons --color=always {}"
会话配置示例
[[session]]
name = "Downloads 📥"
path = "~/Downloads"
startup_command = "ls"
[[session]]
name = "tmux config"
path = "~/c/dotfiles/.config/tmux"
startup_command = "nvim tmux.conf"
preview_command = "bat --color=always ~/c/dotfiles/.config/tmux/tmux.conf"
多窗口配置
[[session]]
name = "Downloads 📥"
path = "~/Downloads"
startup_command = "ls"
[[session]]
name = "tmux config"
path = "~/c/dotfiles/.config/tmux"
startup_command = "nvim tmux.conf"
preview_command = "bat --color=always ~/c/dotfiles/.config/tmux/tmux.conf"
windows = [ "git" ]
[[window]]
name = "git"
startup_script = "git pull"
路径替换
在启动或预览命令中使用{}
作为会话路径的占位符:
[default_session]
startup_command = "tmuxinator start default_project path={}"
preview_command = "eza --all --git --icons --color=always {}"
背景
Sesh是作者之前流行的t-smart-tmux-session-manager tmux插件的后继者。使用Go语言重写,旨在成为一个多路复用器无关的会话管理器。
更多关于golang快速创建和管理tmux会话的CLI插件sesh的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
更多关于golang快速创建和管理tmux会话的CLI插件sesh的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
使用sesh快速创建和管理tmux会话
sesh是一个用Go编写的CLI工具,用于简化tmux会话的创建和管理。它允许你通过简单的命令快速启动预配置的tmux会话,非常适合开发者和系统管理员使用。
安装sesh
# 使用go安装
go install github.com/joshmedeski/sesh@latest
# 或者下载预编译二进制
# 从GitHub releases页面下载适合你系统的版本
基本用法
1. 启动新会话
# 启动名为"myproject"的新会话
sesh myproject
2. 连接到现有会话
# 列出所有可用会话
sesh list
# 连接到特定会话
sesh connect myproject
3. 切换会话
# 快速在会话间切换
sesh switch
高级功能
1. 使用配置文件
sesh支持配置文件(~/.config/sesh/config.toml)来自定义会话布局:
[sessions.myproject]
name = "myproject"
startup_commands = [
"cd ~/projects/myproject",
"nvim",
]
[sessions.server]
name = "server"
windows = [
{ name = "main", commands = ["htop"] },
{ name = "logs", commands = ["tail -f /var/log/syslog"] },
]
2. 使用环境变量
# 指定不同的配置文件路径
SESH_CONFIG=~/custom_config.toml sesh myproject
Go代码示例
如果你想在自己的Go项目中集成类似功能,可以参考以下代码片段:
package main
import (
"fmt"
"os"
"os/exec"
)
func createTmuxSession(sessionName string) error {
// 检查会话是否已存在
checkCmd := exec.Command("tmux", "has-session", "-t", sessionName)
if err := checkCmd.Run(); err == nil {
return fmt.Errorf("session %s already exists", sessionName)
}
// 创建新会话
createCmd := exec.Command("tmux", "new-session", "-d", "-s", sessionName)
if err := createCmd.Run(); err != nil {
return fmt.Errorf("failed to create session: %v", err)
}
return nil
}
func attachToSession(sessionName string) error {
cmd := exec.Command("tmux", "attach-session", "-t", sessionName)
cmd.Stdin = os.Stdin
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
return cmd.Run()
}
func main() {
sessionName := "example"
if err := createTmuxSession(sessionName); err != nil {
fmt.Printf("Error: %v\n", err)
os.Exit(1)
}
if err := attachToSession(sessionName); err != nil {
fmt.Printf("Error: %v\n", err)
os.Exit(1)
}
}
自定义命令
你可以在shell配置文件中添加sesh的别名和快捷方式:
# ~/.bashrc 或 ~/.zshrc
alias s='sesh'
alias sl='sesh list'
alias sc='sesh connect'
sesh通过简化tmux的工作流程,大大提高了终端多任务处理的效率。它的轻量级设计和Go语言实现使其快速可靠,是终端重度用户的理想工具。