Вопрос или проблема
У меня есть следующая привязка, которая позволяет мне сделать вертикальное разделение в tmux
bind v split-window -h -c "#{pane_current_path}"
Это позволяет мне открыть новое разделение, и оно по умолчанию находится в той же папке, где и последний активный панель, что я считаю удобным.
Проблема в том, что когда я нахожусь в символической ссылке или на Mac, где она разрешается на корне с помощью synthetic.conf, я обнаруживаю, что она разворачивает отображаемый путь обратно к его оригиналу, который длинный, и мне это не нравится 😀
Есть ли способ изменить приведенную выше команду так, чтобы она принимала именно тот путь, в котором я нахожусь, и использовала его?
Например, если мой путь был
# maps to ~/Dropbox
/db
Он останется в /db
в новом окне
Ответ или решение
Использование tmux
для управления терминальными сессиями является популярным выбором среди специалистов в области информационных технологий благодаря его гибкости и возможностям мультиплексирования. Однако при работе с символическими ссылками (symlinks
), особенно в случаях, специфичных для операционных систем, таких как macOS, могут возникать особые вопросы, как в вашем случае, когда при разделении окна изменяется символический путь на оригинальный.
Теория
Проблема с символическими ссылками в tmux: Главная проблема заключается в том, что tmux
автоматически разворачивает символические пути до их исходного местоположения. Это связано с тем, как tmux
воспринимает текущий путь #{pane_current_path}
. Когда вы выполняете привязку, которая открывает новое окно или сплит в текущем каталоге, tmux
может игнорировать символические ссылки и использовать фактический путь.
Символические ссылки, по своей природе, просто являются указателями на другое местоположение в файловой системе. Инструменты, которые обращаются к файловой системе, как tmux
, нередко разворачивают эти ссылки до фактического пути для внутренней обработки, что в большинстве случаев может быть желательным поведением, но не в этом специфическом случае.
macOS и synthetic.conf
: В MacOS существует особенность для управления виртуальными файловыми системами с использованием файла synthetic.conf
, который позволяет создавать символические ссылки и точки монтирования на уровне системы. Этот метод также может влиять на разрешение путей, вызывая аналогичные проблемы с развертыванием путей.
Пример
Рассмотрим ваш сценарий: у вас есть путь, например, /db
, который является символической ссылкой на ~/Dropbox
. При выполнении команды split-window -h -c "#{pane_current_path}"
, tmux
разворачивает /db
в ~/Dropbox
, что приводит к открытию новой панели в каталоге ~/Dropbox
.
Применение
Для решения данной проблемы можно использовать несколько подходов:
-
Скриптирование с использованием оболочки sh/bash:
Использование оболочечного скрипта для хранения и восстановления символического пути может быть эффективным решением. Пример скрипта может выглядеть следующим образом:bind v split-window -h -c "$(readlink -f "#{pane_current_path}" || echo "#{pane_current_path}")"
Здесь
readlink -f
пытается определить ссылочный путь к каталогу, но при этом возвращает исходный путь, если что-то пойдет не так. Вместоreadlink -f
на macOS может потребоваться использоватьgreadlink
, установить который можно через Homebrew с использованиемcoreutils
. -
Использование
chdir
иJSON API
:
Вы можете использовать командуchdir
вместе с более продвинутыми методами использования APItmux
, чтобы убедиться, что путь сохраняется в неизменной форме. Вызов методов API может быть полезным в процессе автоматизации, например, хранение исходного пути в временном файле или переменной среды и возврат к нему по необходимости. -
Обходные пути с использованием
tmux
-плагинов:
Существуют плагины дляtmux
, которые предоставляют расширенные возможности для управления сессиями. Такие плагины могут быть настроены таким образом, чтобы обрабатывать символические ссылки без их разворачивания. -
Использование других утилит для управления путями:
Также можно использовать другие утилиты командной строки, которые позволяют управлять символическими ссылками и путями, например,realpath
илиdircolors
, в комплексных сценариях автоматизации вашего рабочего процесса.
Каждое из предложенных решений требует определенных манипуляций и понимания терминальных команд, но позволяет сохранить работу в символическом пространстве файловой системы без разрыва ссылки на исходный путь. Выбор нужного решения зависит от ваших предпочтений и уровня комфорта с изменением конфигураций. Это важно помнить, поскольку тестирование изменений должно проводиться в безопасной среде, чтобы предотвратить возникновение дополнительных проблем.
В итоге, примите во внимание, что tmux
и использование символических ссылок обладают высокими уровнями кастомизации и могут быть адаптированы ко всем вашим требованиям при наличии должного понимания рабочих процессов и системных особенностей.