저는 tmux
직장에서 IDE로 사용하고 있습니다. 또한 vim
다양한 tmux 창에서 실행하고 프로세스를 백그라운드에 두는 경우가 많습니다(또는 그냥 창을 닫습니다. 창이 닫힐 때 열려 있는 버퍼를 삭제하지 않도록 vim을 구성했습니다). 이제 편집하려는 파일이 다른 vim 세션 중 하나에 열려 있는데 어느 세션인지 모르기 때문에 문제가 발생했습니다.
모든 창과 창을 수동으로 확인하지 않고도 어느 창을 찾을 수 있습니까? 내 특별한 경우에는 아무것도 반환되지 않았기 vim ~/myfile.txt
때문에 편집하지 않았다는 것을 알고 있습니다 .ps aux | grep myfile.txt
답변1
그것은 나에게 말하지 않는다모든 것, 그러나 나는 fuser ~/.myfile.txt.swp
vim 세션의 PID를 제공하는 것을 사용했습니다. 이것을 실행한 후에 ps aux | grep <PID>
는 내가 어떤 vim 세션을 사용하고 있는지 알 수 있었고, 어떤 창에서 열려 있는지에 대한 힌트를 얻었습니다.
Giles의 영감과 약간의 끈기와 행운 덕분에 저는 다음 명령을 생각해냈습니다.
⚘ (FNAME="/tmp/.fnord.txt.swp"; tmux switch -t $(tmux list-panes -a -F '#{session_name}:#{window_index}.#{pane_index} #{pane_tty}' | grep $(ps -o tty= -p $(lsof -t $FNAME))$ | awk '{ print $1 }'))
그것이 무엇을 하는지 설명하세요:
(FNAME="/tmp/.fnord.txt.swp";
그러면 하위 쉘이 생성되어 FNAME
환경 변수로 설정됩니다. 엄밀히 말하면 이것은 필요하지 않습니다. $FNAME
파일 이름을 직접 대체할 수 있지만 편집이 더 쉬워집니다. 이제 내부에서부터 작업해 보세요.
lsof -t $FNAME
이것은 생산할 것입니다오직파일을 연 프로세스의 PID입니다.
ps -o tty= -p $(...)
이는 pts
우리가 를 사용하여 발견한 PID를 생성합니다 lsof
.
tmux list-panes -a -F '#{session_name}:#{window_index}.#{pane_index} #{pane_tty}'
그러면 입력 창 목록이 생성됩니다(예: ) session:0.1 /dev/pts/1
. 첫 번째 부분은 tmux가 좋아하는 대상 형식이고 두 번째 부분은pts
| grep $(...)$
이렇게 하면 창 목록이 필터링됩니다. 후행은 $
일치하는 항목만 표시됩니다.하나우리는 걱정합니다. 나는 우연히 발견했고 pts/2
, pts/22
그래서 거기에 있습니다둘일치, 이런!
| awk '{ print $1 }'
이렇게 하면 session:0.1
에 전달하기에 적합한 창 출력의 일부가 생성됩니다 tmux switch -t
.
이는 세션과 창 모두에서 작동하며 스왑 파일이 포함된 창에 포커스를 둡니다.
답변2
귀하의 질문에 대한 요약 답변은 다음과 같습니다.
for all the tmux sessions:
for all the windows in the session:
for all the panes in windows:
for all sub process pids (recursively):
find the open files
모든 세션: tmux list-sessions -F '#{session_id}:#{session_name}
모든 창: tmux list-windows -F '#{window_id}XX#{window_index}XX#{window_name}' -t "$session_id"
모든 창: tmux list-panes -F '#{pane_id}:#{pane_index}:#{pane_pid}' -t ""$session_id":"$window_index""
모든 하위 프로세스 pid: ps -o pid --no-headers --ppid $pid
파일 열기: lsof -p $pid
위의 구현은 트리를 보여줍니다.
sessions
windows
panes
process
open files
파일이 열려 있는 프로세스를 표시합니다(제 경우에는 vim이기도 함).
다음에서 찾을 수 있습니다.https://github.com/nkh/tmux-ls
5년 동안 github에 있었지만 삭제되거나 github이 충돌할 경우를 대비해 복제하는 것이 좋습니다.