Как открыть файл в другой панели в Tmux

Я новичок в tmux и разделил окно на 3 панели, левую половину (основную панель), верхнюю правую четверть и нижнюю правую четверть. Возможно ли, что я использую команду, чтобы открыть редактируемый файл в левой главной панели, скажем, vim myFile.py, и myFile.py откроется в другой панели, скажем, в верхней правой панели, так что я всегда смогу отредактировать файл в верхней правой панели и сохранить входные команды в левой главной панели?

2 ответа

Решение

Это возможно сделать с помощью функций vim, но это не имеет ничего общего с tmux. Если используемая вами версия vim была скомпилирована с +clientserver вариант, то есть способ сделать это. Чтобы проверить, запустите :version в VIM, и искать +clientserver, Возможности клиентского сервера vim зависят от X11, поэтому, если вы его не видите, установка gvim может помочь. См. https://unix.stackexchange.com/a/23601 для получения дополнительной информации о зависимости X11.

Теперь о том, как его использовать. Во-первых, настройте свои панели tmux так, как вы хотите. На панели, которой вы хотели бы быть в качестве выделенного редактора, следующая команда создаст vim "сервер".

vim --servername tmuxEditor

Теперь из другой панели вы можете запустить

vim --servername tmuxEditor --remote files...

и редактор откроет указанные файлы. Другие полезные команды

vim --servername tmuxEditor --remote-tab files...
vim --servername tmuxEditor --remote-send keys

Первый открывает указанные файлы в отдельных вкладках, а второй отправляет указанную последовательность ключей на сервер.

См. http://vimdoc.sourceforge.net/htmldoc/remote.html или запустите :help remote в vim для получения дополнительной информации о возможностях клиент-сервера vim.

Вот как открыть файл в существующем экземпляре Vim (если он запущен внутри сеанса tmux):

tmux send-keys -t vim:1.0 Escape ":tabnew path/to/your_file.txt" C-m

где vim:1.0 это селектор панели (vim - название сессии, 1 - индекс окна, 0 - индекс панели).

TL;DR: вы можете использовать tmux открывать команды в панелях, отличных от текущей, но решение dpk2442, использующее vimКлиент / серверные функции, вероятно, чище.


Один из вариантов - установить remain-on-exit в правом верхнем углу, затем используйте respawn-pane команда начать vim в панели.

Скажем, идентификатор панели в верхней правой панели 0:0.1 (сеанс 0, окно 0, панель 1; вам необходимо настроить это для вашей настройки). Вы можете установить remain-on-exit вариант использования

tmux set-option -t 0:0 remain-on-exit on

(Это устанавливает параметр для любой панели в окне, а не только для одной конкретной панели.)

Затем используйте

tmux respawn-command -k -t 0:0.1 vim myFile.py

открыть vim в панели, указанной аргументом -t вариант. -k` гарантирует, что любая команда, уже запущенная в панели, будет убита; Вы можете опустить его, если знаете, что в данный момент на этой панели ничего не выполняется.

Дайте длину команды, вы, вероятно, захотите определить функцию оболочки для запуска vim в нужной панели:

start_vim () {
    tmux respawn-command -k -t 0:0.1 vim "$1"
}

так что вы можете просто бежать

start_vim myFile.py 
Другие вопросы по тегам