Tmux会话管理(自动补全)

之前在使用 Tmux 时,自己写一个脚步用于快速切换会话,但是苦于没有会话名补全功能,每次都需要先查看会话名,然后才能进行切换,用起来十分麻烦,于是想实现 Shell 的自动补全功能,这样就可以不用去记会话名了。

Programmable Completion

在网上查找一番,发现 Linux 下有个 Programmable Completion 这个功能可以实现,于是尝试了一下果然可以,实现起来也很简单。假设我有一个程序 auto_comp ,我想为它添加自动补全,他包含的选项为: -a -b -c --appen --backup --compare。其自动补全的实现如下:

  1. 新建 auto_comp.sh,内容如下:

    
    # file: auto_comp.sh
    
    
    # 为 auto_comp 程序实现自动补全功能
    
    _auto_comp()
    {
        local cur
        COMPREPLY=() # 用于存放可能的补全结果
        cur=${COMP_WORDS[COMP_CWORD]}
        COMPREPLY=( $(compgen -W '-a -b -c --appen --backup --compare' -- $cur) )
        return 0
    }
    complete -F _auto_comp ./auto_comp
  2. 在当前路径下新建 auto_comp 的可执行文件;

  3. 执行source auto_comp.sh命令;

完成上述步骤之后,auto_comp 程序便能在输入 Tab 后给出选项提示。

Tmux 会话补全

之前为了便于管理Tmux的会话,我写了个简单的脚本 stmux 用于创建或者连接到已有的会话,使用比较简单。

usage:
stmux [session_name]

1. 当 stmux 后没有指定会话名且当前没有 Tmux 会话时,stmux 将创建一个新的会话。
2. 当 stmux 后没有指定会话名但当前有 Tmux 会话时,stmux 将连接到第一 Tmux 会话。
3. 当 stmux 后指定会话名时,stmux 将连接到指定的会话。

由于 Tmux 会话名是不确定的且可以随时发生变化,因此我们需要动态获取 Tmux 的会话信息,好在 Tmux 提供了该功能。补全的脚本如下所示。

_stmux_autocomplete ()
{
    local cur
    COMPREPLY=()
    cur=${COMP_WORDS[COMP_CWORD]}
    opts=$(tmux ls -F "#{session_name}" 2>/dev/null)
    COMPREPLY=( $(compgen -W "$opts" -- $cur) )

    return 0
}
complete -F _stmux_autocomplete stmux

更多的配置可以参考我的 Tmux 配置。这种大众化的需求当然已经有人实现了,Github 上 Imomalievtmux-bash-completion 就是不错的选择。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值