Как настроить терминал *NIX так, чтобы он работал аналогично IDE?

Как настроить терминал *NIX так, чтобы он работал аналогично IDE?

Я хотел бы настроить что-то в оболочке, чтобы получить опыт, подобный IDE, используя только оболочку (без X). Самое близкое, что я сделал, это использовал tmux, с vim в одной панели и командной строкой в ​​другой. Таким образом, из vim я могу .w !bashзапустить строку.

Но меня это не устраивает, поскольку среда не сохраняется между командами, выполняемыми по отдельности.

Если я запущу:

var1=FOO

а потом

echo $var1

каждое использование .w !bash, FOOне будет отображено.

Что я действительно хочу сделать, так это просмотреть текстовый файл в одной панели и использовать сочетание клавиш для отправки строки в терминал в другой панели в рамках этого сеанса терминала. Какова правильная комбинация инструментов для достижения этого? Я понимаю, что emacs можно настроить для выполнения чего-то подобного с помощью собственного эмулятора терминала, но мне бы хотелось решение, которое работает со стандартными инструментами (например, в установщике).

Редактировать: tmux select-copy-paste не так уж и плох, но все равно немного неудобен.

решение1

Прототипное решение с sh, vimи tmux, быстрое и грубое доказательство концепции.

Ваш .w !bashзапускается bashи отправляет текущую строку в свой stdin. Давайте заменим bashскриптом, который вставляет строку из своего stdin в другую панель в 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. Прочитать строку из stdin.
  3. Отправьте строку на панель, как если бы она была напечатана.
  4. Отправить Enterна панель.

Сохраните его как trun, сделайте его исполняемым и доступным через $PATH. Теперь, если у вас есть две панели tmuxи вы запустите trunодну из них, введете строку и нажмете Enter, то строка будет внедрена в другую панель.

Вместо viminvoke это должно работать. Привяжите это .w !bashк .w !trunклавише для легкого доступа.

Примечания:

  • Скрипт не проверяет, есть ли ровно две панели.
  • Скрипту все равно, что выполняется в целевой панели; он просто отправляет ключи.

Связанный контент