如何设置 *NIX 终端以实现类似于 IDE 的功能?

如何设置 *NIX 终端以实现类似于 IDE 的功能?

我想在 shell 中设置一些东西,以便仅使用 shell(没有 X)即可获得类似 IDE 的体验。我最接近的方法是使用 tmux,一个窗格中使用 vim,另一个窗格中使用命令行。这样我就可以从 vim.w !bash运行一行。

但这对我来说并不令人满意,因为环境在单独运行的命令之间不会持续存在。

如果我运行:

var1=FOO

进而

echo $var1

每次使用.w !bashFOO都不会被回显。

我真正想要做的是浏览一个窗格中的文本文件,并使用快捷方式将一行发送到另一个窗格中的终端,作为该终端会话的一部分。实现此目的的正确工具组合是什么?我知道可以配置 emacs 来使用其自己的终端仿真器执行类似操作,但我想要一个与常规工具(例如安装程序)配合使用的解决方案。

编辑:tmux select-copy-paste 不是那么糟糕,但仍然有点尴尬。

答案1

sh带有、vimtmux、快速且粗略的概念验证的原型解决方案。

您的.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,则该行将被注入到另一个窗格中。

代替viminvoke .w !bash.w !trun它应该可以工作。将其绑定到一个键以方便访问。

笔记:

  • 该脚本不会检查是否恰好有两个窗格。
  • 该脚本并不关心目标窗格中运行什么;它只发送密钥。

相关内容