Я новичок в tmux и разделил окно на 3 панели: левую половину (основную панель), верхнюю правую четверть и нижнюю правую четверть. Возможно ли, что я использую команду для открытия редактируемого файла в левой главной панели, скажем, vim myFile.py
, а myFile.py откроется в другой панели, скажем, в верхней правой панели, чтобы я всегда мог редактировать файл в верхней правой панели и сохранить команды ввода в левой главной панели?
как открыть файл в другой панели в Tmux
Ответы (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.
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
— индекс панели).
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
vim myFile.py
в верхней левой панели, но на самом деле открытьvim
в верхней правой панели, оставив оболочку запущенной в верхней левой панели? - person chepner   schedule 15.06.2015