5

Примером является редактирование файла конфигурации в vim и непреднамеренное оставление его открытым. Затем вы занимаетесь своими делами, переключаетесь в разные сеансы Tmux, в конечном итоге редактируете тот же файл из другого сеанса, и vim сообщит вам, что файл .swp уже существует.

Теперь, как вы узнаете, в каком сеансе Tmux находится другой vim, содержащий открытый файл? Похоже, что Findw осуществляет поиск только через активные окна сеанса.

2 ответа2

10

lsof /path/to/.file.swp покажет идентификатор процесса нарушающего процесса vim. Если вы хотите написать скрипт, используйте pid=$(lsof -Fp "$swp_file"); pid=${pid#p} чтобы получить только идентификатор процесса.

Затем ps 12345 где 12345 - это идентификатор процесса, покажет некоторую информацию о процессе, в частности, о том, на каком tty он выполняется (ps -o tty= -p $pid в скрипте). Tty однозначно идентифицирует окно tmux (при условии, что процесс выполняется внутри tmux), но я не знаю, как перейти от имени tty к сеансу tmux.

Что бы дать вам сеанс tmux - это значение переменной окружения TMUX в процессе vim. Номер сеанса - это последний номер после последней запятой.

У большинства объединений есть способ узнать среду процесса, но этот способ отличается в разных вариантах Unix. В Linux вы можете использовать </proc/$pid/environ grep -z '^TMUX=' чтобы показать значение $TMUX в процессе $pid , поэтому вы можете извлечь номер сеанса как $(</proc/$pid/environ grep -z '^TMUX=' | sed 's/.*,//') .

5

Этот фрагмент оболочки хорошо работает для меня (вам также понадобится утилита pstree):

for s in `tmux list-sessions -F '#{session_name}'` ; do
  echo -e "\ntmux session name: $s\n--------------------"
  for p in `tmux list-panes -s -F '#{pane_pid}' -t "$s"` ; do
    pstree -p -a -A $p
  done
done

Для двух сеансов tmux с двумя vim в каждом я получаю следующий вывод:

tmux session name: 0
--------------------
zsh,3444
  `-vim,3467 file_1
zsh,3474
  `-vim,3495 file_2

tmux session name: 1
--------------------
zsh,3526
  `-vim,3547 file_3
zsh,3554
  `-vim,3576 file_4

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .