如何設定 *NIX 終端使其功能類似 IDE?

如何設定 *NIX 終端使其功能類似 IDE?

我想在 shell 中設定一些東西,以便只使用 shell(無 X)即可獲得類似 IDE 的體驗。我最接近的是使用 tmux,其中一個窗格中使用 vim,另一個窗格中使用命令列。這樣我就可以從 vim.w !bash運行一行。

但這對我來說並不令人滿意,因為環境在單獨運行的命令之間並不持久。

如果我運行:

var1=FOO

進而

echo $var1

每次使用.w !bash,FOO都不會被回顯。

我真正想做的是瀏覽一個窗格中的文字文件,並使用快捷方式將一行傳送到另一個窗格中的終端,作為該終端會話的一部分。實現這目標的正確工具組合是什麼?我知道 emacs 可以配置為使用自己的終端模擬器執行類似的操作,但我想要一個與庫存工具(例如安裝程式)一起使用的解決方案。

編輯: tmux select-copy-paste 還不錯,但還是有點尷尬。

答案1

一個原型解決方案,具有shvimtmux,快速而骯髒的概念證明。

.w !bash運行bash並將當前行發送到其標準輸入。讓我們替換bash為一個腳本,該腳本將其標準輸入中的一行注入到tmux.

這是基本腳本:

#!/bin/sh
pane="$(tmux list-panes -F '#{pane_active} #D' | awk '$1==0 {print $2;exit}')"
IFS= read -r line
tmux send-keys -l -t "$pane" "$line"
tmux send-keys -t "$pane" 'C-j'

程序,簡短說明:

  1. 識別不活動的窗格。
  2. 從標準輸入讀取一行。
  3. 將該行傳送到窗格,就像鍵入該行一樣。
  4. 傳送Enter到窗格。

將其另存為trun,使其可執行並可透過 存取$PATH。現在,如果您有兩個窗格tmux並在其中一個窗格中運行trun,然後鍵入一行並點擊Enter,那麼該行將被注入到另一個窗格中。

它應該可以工作,而vim不是.w !bash呼叫。.w !trun將其綁定到一個鍵以方便存取。

筆記:

  • 該腳本不會檢查是否剛好有兩個窗格。
  • 該腳本不關心目標窗格中運行的內容;它只是發送密鑰。

相關內容