【问题标题】:TMUX pane tabs, or 'locking/freezing' pane splits in placeTMUX 窗格选项卡或“锁定/冻结”窗格在适当位置拆分
【发布时间】:2022-04-26 13:51:46
【问题描述】:

使用 tmux 时,我通常会在顶部拆分打开一个编辑器,在底部打开一个 shell。现在,我正在编写一个 python 脚本,在拆分的下半部分,我找不到在 ipythonbash 之间来回切换的方法:我能做的最好的事情就是创建一个嵌套拆分在这两者之间,共享屏幕的下半部分。现在看起来像下面这样。

是否有类似标签 within 的窗格,所以我可以在 bash/ipython 之间来回切换,同时将编辑器锁定/冻结在顶部?现在必须在切换到一个 shell 提示的新选项卡或使用这些微小的拆分之间进行选择并不理想。 Tmux 非常灵活,似乎有一种方法可以实现这种简单的窗格锁定。谢谢

【问题讨论】:

    标签: tmux


    【解决方案1】:

    使用嵌套的 tmux 会话解决。我的解决方案基于nested-tmux 的精简版本。我启动一个嵌套会话,然后在该嵌套会话中使用选项卡。要启动嵌套会话,我使用以下脚本 tmux-nested.sh(改编自 nested-tmux 存储库):

    #!/bin/sh
    
    TMUX_PARENT=$(basename "$TMUX")
    TMUX_PARENT="${TMUX_PARENT%%,*}"
    export TMUX_PARENT
    _SOCK="r$RANDOM"
    tmux -L "$_SOCK" new-session -s "$_SOCK"
    

    这将使用给定随机文件名的套接字创建一个嵌套会话(硬编码值不允许多个嵌套会话,例如在父会话的不同选项卡中)。

    在我的.tmux.conf 文件中,我在启动时添加以下行来更改嵌套会话的 tmux 前缀:

    # nested session logic
    if-shell '! [ -z "$TMUX_PARENT" ]' 'set-option -g prefix C-b'
    

    (我的正常前缀是反引号)

    编辑: 我将此函数扩展为更强大的实现,如下所示:

    # Nest tmux sessions
    tmux_nested() {
        local usagestring='usage: tmux-nested [-n | -a nested-session-# | -l]'
        if [[ -z $TMUX ]]; then
            # ensure invoked within active session
            echo "'tmux_nested' should be invoked inside an active tmux session"
            return 1
        fi
    
        # read flags and check for number of existing nested sessions
        local nested session_name
        nested=$(tmux list-sessions -F '#{session_name}' | \
                 ggrep -P '^nested[\d]+' --color=never | sort -V)
        while getopts ':lna:' opt; do
            case $opt in
                l)
                    [[ -z $nested ]] && nested="No nested sessions running"
                    echo "$nested" && return 0;;
                n)
                    # if new session requested: create, set <C-b> tmux prefix, and attach
                    for (( i = 1;; i++ )); do
                        # get lowest available numeric value for new session name
                        if ! tmux has-session -t "nested$i" 2> /dev/null; then
                            session_name="nested$i" && break
                        fi
                    done
                    tmux new-session -ds "$session_name"
                    tmux send-keys -t "$session_name" \
                                      "tmux set prefix C-b" ENTER "clear" ENTER
                    env TMUX='' tmux attach -t "$session_name"
                    return $?;;
                a)
                    # attach to specified session if requested
                    session_name="nested${OPTARG}"
                    if ! env TMUX='' tmux attach -t "$session_name"; then
                        echo "Try 'tmux_nested -l'?" && return 1
                    fi;;
                *) echo "$usagestring" && return 1;;
            esac
        done
    
        # incorrect invocation, report incorrect invocation and exit
        echo "$usagestring" && return 1
    }
    

    【讨论】:

      猜你喜欢
      • 2012-04-18
      • 2020-06-25
      • 1970-01-01
      • 2014-11-16
      • 2022-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多