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

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


person Emerson Xu    schedule 15.06.2015    source источник
comment
Итак, вы хотите ввести vim myFile.py в верхней левой панели, но на самом деле открыть vim в верхней правой панели, оставив оболочку запущенной в верхней левой панели?   -  person chepner    schedule 15.06.2015
comment
да, но это кажется невозможным...   -  person Emerson Xu    schedule 17.06.2015


Ответы (3)


Это можно сделать с помощью возможностей 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.

person dpk2442    schedule 16.06.2015
comment
Очень хорошо. Я просто добавлю, что любая команда, используемая для создания панели, на которой будет работать сервер vim, также может запускать vim в качестве начального процесса, а не оболочки по умолчанию. - person chepner; 17.06.2015

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

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

где vim:1.0 — селектор панели (vim — имя сеанса, 1 — индекс окна, 0 — индекс панели).

person LazyCat01    schedule 31.07.2020
comment
Как можно переключить фокус на панель с открытым файлом? - person mroavi; 22.02.2021
comment
@mroavi Вам нужно что-то вроде этого: tmux select-window -t vim:1.0 \; select-pane -t vim:1.0. Вы можете пропустить select-window, если у вас одно окно. - person LazyCat01; 22.02.2021

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 
person chepner    schedule 16.06.2015