golang快速创建和管理tmux会话的CLI插件sesh的使用

Golang快速创建和管理tmux会话的CLI插件sesh使用指南

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

1 回复

更多关于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语言实现使其快速可靠,是终端重度用户的理想工具。

回到顶部