私tmux
特定のコマンドで開いたウィンドウです。メインウィンドウの代わりに同じコマンドを実行する新しいウィンドウにウィンドウを分割できますか?
要点は、元のコマンドを覚えて再入力する必要がないことです。
答え1
#{pane_start_command}
現在のウィンドウの起動に使用されるコマンドにアクセスする方法です。この機能はv1.7(2012年10月)から利用可能です。
bind-key S run-shell "tmux split-window \"#{pane_start_command}\""
問題の解決策は#{pane_start_command}
.(tmux
バージョン> = 1.9(02/2014))を使用してください。
バージョン1.7> = X <1.9の場合、ファイルには次のものがあります~/tmux.conf
。
bind-key S run-shell "tmux split-window \"$(tmux display-message -p '#{pane_start_command}')\""
display-message
コマンド抽出を置き換えました#{pane_start_command}
。- コマンドは引数として提供されます
tmux split-window
。
pane_start_command
ウィンドウがコマンド文字列なしで起動され、何もない場合は空の文字列になります。ただし、空のコマンド文字列が与えられた場合は、通常のログインシェルが起動されるのでdefault-command
大丈夫です。split-window
答え2
探しているコマンドは次のとおりですsplit-window
。man tmux
ウィンドウ分割[-dhvP] [-cスタートディレクトリ] [-lサイズ| -pパーセント] [-tターゲットウィンドウ] [シェルコマンド] [-F形式](エイリアス:Splitw)ターゲットウィンドウを
分割して新しいウィンドウを作成します。 hは水平に分割され、-vaは垂直に分割されます。指定しない場合、-v とみなされます。 -lおよび-pオプションは、それぞれ行(縦分割の場合)、セル(横分割の場合)、またはパーセントで新しいウィンドウのサイズを指定します。他のすべてのオプションはnew-windowコマンドと同じ意味を持ちます。
Ctrlb:コマンドモードに入り、プロンプトで次のように入力して現在のウィンドウで使用できます。
splitw -v -p 50 'your command'
現在のウィンドウが分割されます。V縦に半分に減らす(50血ercent)そこからコマンドを実行してください。
このコマンドを頻繁に使用する場合は、いつでもキーシーケンスにバインドできます。
bind '~' split-window -v -p 50 'htop'
答え3
これがtmuxバージョン間で変わるかどうかはわかりませんが、私には(tmux 3.0a)起動コマンドなしでウィンドウで実行すると、許可された答えが完全に空のウィンドウを開くのに対して新しいシェルではないことがわかりました。これは私にとって効果的です。
bind C run-shell "CMD=\"#{pane_start_command}\" ; tmux split-window -v \${CMD:+ -c \"#{pane_current_path}\" \"\$CMD\"}"
これは以下を利用します。代替値置換引数が空の場合、引数は完全に削除されます(このアプローチに答えたJohn Kugelmanに感謝します。)。
添付-c \"#{pane_current_path}\"
コマンドは現在のウィンドウと同じディレクトリでコマンドを実行します。これは私のワークフローにとって重要です。コマンドを実行するウィンドウだけでなく、すべての新しいウィンドウにスニペットを表示するには、スニペットを囲みます\${...}
。