tmux - Fügt ein Fenster an einer bestimmten Position ein


13

tmux hat den Befehl "move-window", mit dem Sie ein Fenster wie folgt in einen angegebenen leeren Index verschieben können:

move-window -t 3

Wenn jedoch Index 3 bereits vergeben ist, können Sie Ihr aktuelles Fenster nicht auf Position 3 verschieben.

Ich suche nach einer Option, mit der ich mein Fenster an Position 3 verschieben (einfügen) kann, auch wenn es bereits vergeben ist, und dann die Fensternummern für die anderen nachfolgenden Fenster erhöhen kann (zum Beispiel das Fenster, das ursprünglich bei 3 war) sei 4, das Folgende ist 5 usw.)

tmux 

Antworten:


2

Mit dem folgenden Skript können Sie tun, was Sie wollen. Sie können es über eine Shell-Eingabeaufforderung ausführen oder Folgendes tun:

:run "ins-move 2 5"

In diesem Beispiel wird Fenster zwei an die Position vor Fenster fünf verschoben.

#!/bin/bash
for ((i=$1; i<$2-1; i++))
do
    tmux swap-window -s :$i -t :$((i+1))
done

Vielen Dank! Funktioniert hervorragend - obwohl ich es anpassen muss, um auch in Fällen wie "5 2" zu funktionieren. Zumindest weiß ich jetzt, wie es gemacht wird.

@Andrei: Ich bin froh, dass ich dich zum Laufen bringen konnte. Bitte vergessen Sie nicht, akzeptierte Antworten zu markieren und zu bewerten, wenn Sie dies für angemessen halten.
Bis auf weiteres angehalten.

Ich habe Ihre Antwort gerade positiv bewertet. Konnte es vorher nicht tun, weil ich gerade genug Reputationspunkte bekommen habe.

25

Versuchen: new-window -a

Wenn Sie beim Erstellen eines neuen Fensters die Option -a verwenden, wird das neue Fenster direkt beim nächsten Index eingefügt, während der Index aller anderen nachfolgenden Fenster automatisch erhöht wird.


Sieht nach einer besseren Lösung aus als @DennisWilliamson, sorry Dennis :-) Ich laufe, tmux 1.9avielleicht war diese Funktion in früheren Versionen nicht verfügbar.
Sonia Hamilton

Genial. Ich bin mir nicht sicher, wie ich das verpasst habe. Du hast mich vor 4 Jahren in der Vergangenheit gerettet, Zeitreisender! Vielen Dank!
rld.

Funktioniert nicht, wenn Sie ein neues Fenster bei Index 0
möchten

1

Ich habe eine Lösung ohne externe Skripte. Fügen Sie Folgendes in Ihre .tmux.conf ein:

bind i command-prompt -p 'Insert window at:' 'run-shell "if tmux select-window -t %1; then tmux new-window -a; tmux swap-window -s %1 -t \$((%1+1)); else tmux new-window; tmux move-window -t %1; fi; tmux select-window -t #I; tmux select-window -t %1;"'

Drücken Sie [PREFIX] -i und geben Sie die gewünschte Einfügeposition an. Die letzten beiden Auswahlfensterbefehle stellen sicher, dass das 'vorherige' Fenster wie erwartet eingestellt ist und Sie zum eingefügten Fenster gehen.

EDIT: ok, ich habe zu früh gesprochen. Ich musste zu wechseln #I, #{window_id}da sich der Fensterindex für einige Fenster beim Einfügen ändert. Die neue Funktion (mit zusätzlichen Zeilenumbrüchen zur besseren Lesbarkeit):

bind i command-prompt -p 'Insert window at:' '      \
    run-shell "                                     \
        if tmux select-window -t %1; then           \
            tmux new-window -a;                     \
            tmux swap-window -s %1 -t \$((%1+1));   \
        else                                        \
            tmux new-window;                        \
            tmux move-window -t %1;                 \
        fi;                                         \
        tmux select-window -t #{window_id};         \
        tmux select-window -t %1;                   \
    "'                                               

Ich habe mit der Verwendung einer vereinfachten Version über die folgenden 2 Befehle in .tmux.conf begonnen:

 bind i command-prompt -p 'Insert window at:' 'new-window -a -t %1; swap-window -t -1'
 bind I command-prompt -p 'New window at:'    'new-window -t %1'

Präfix-i fügt ein neues Fenster an Position x ein, wenn Fenster x vorhanden ist, und verschiebt Fenster darüber. Präfix I erstellt ein neues Fenster an Position x, wenn Fenster x nicht vorhanden ist.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.