tmux:在其他窗格中發送和執行突出顯示的程式碼
我想要兩個 tmux 窗格——第一個可以有幾個程序中的一個(通常,但不總是,vim),第二個將在 R、python 或 bc 中進行互動式會話。
兩個窗格並不總是顯示同一個系統 - 通常我會在系統 A 上執行 tmux,在那裡的一個窗格中做某事,然後讓第二個窗格 ssh’d 到系統 B 並執行互動式會話那裡的 R/Python/bc。
我的目標是能夠在第一個窗格中突出顯示某些內容,並在另一個窗格中發送和執行。
我知道 tmux 可以在窗格之間複製/粘貼。而且我知道 tmux 可以將特定命令發送到另一個窗格並以 enter 結束它以便執行。但是我可以將“我在第一個窗格中突出顯示的任何內容”發送到第二個窗格,然後以輸入字元結束以執行嗎?
(換句話說,我正在嘗試模擬 IDE 的行為,您可以在其中突出顯示程式碼塊並點擊“執行”。我希望專門使用 tmux 來執行此操作,而不是特殊的 vim 外掛,因為有時我’ 將在第一個窗格中使用 vim 以外的其他內容。)
我相信您可以通過以下方式實現您的目標:
1)進入複製模式(前綴[)
2)選擇一些文本(很可能是 v(isual select)/y(ank))
3)通過將其發送到另一個窗格
tmux paste-buffer -t [left/right]
這是我剛剛勾勒出的概念證明:
給定目前目錄中名為 foo.rb 的 Ruby 腳本:
# foo.rb x = "hello there" puts x
…和兩個窗格,垂直拆分(左側的 bash/右側的 irb 會話),如果您執行
cat foo.rb
,進入複製模式,拉出文件的內容,然後tmux paste-buffer -t right
從左側窗格執行,您應該在右側看到以下輸出窗格:λ irb 2.5.1 :001 > x = "hello there" => "hello there" 2.5.1 :002 > puts x hello there => nil
從那裡,您可以編寫一個 shell 腳本和/或連接一個鍵綁定,以防止您必須鍵入 out/recall
tmux paste-buffer -t [left/right]
。
paste-buffer
還應該為您處理“以輸入結尾”。從 tmux 手冊頁的paste-buffer
條目中:輸出時,粘貼緩衝區中的任何換行 (LF) 字元都將替換為分隔符,預設情況下是輸入 (CR)。
如果預設分隔符由於某種原因不起作用,您也可以使用
paste-buffer -s ...
.