Tmux는 세션이 작성된 디렉토리를 잊습니다.


8

tmux에서 여러 세션을 만들면 후속 세션의 모든 새 창에 대한 현재 디렉토리가 첫 번째 세션의 현재 디렉토리로 설정됩니다.

예를 들면 다음과 같습니다.

-> cd /home/one && tmux new-session -n one\; new-window -n two
   # /home/one is the current directory for each window

-> cd /home/two && tmux new-session -n three\; new-window -n four #\; etc.
   # "/home/two" is the current directory for the window "three"
   # but for the window "four" and other created windows it is "/home/one"

tmux가 후속 세션의 모든 새 창에 대한 현재 디렉토리를 세션이 작성된 디렉토리로 설정하도록하려면 어떻게해야합니까?

tmux 1.6

zsh 4.3

답변:


21

tmux 1.9부터 기본 경로 옵션이 제거되었습니다 .

세션을 연 디렉토리에서 다음을 사용하여 열 수 있습니다 (이름의 'client'는 쉘에서 현재 tmux runnin임을 나타내지 만 세션에서 세션을 전환 할 때 경로를 전환하는 것으로 보입니다 동일한 고객) :

bind-key c  new-window -c "#{client_cwd}"

그렇지 않으면 현재 창의 경로를 복사합니다.

bind-key c  new-window -c "#{pane_current_path}"

또한 일부 워크 플로에 어필 할 수있는 pane_start_path가 있습니다.

bind-key c  new-window -c "#{pane_start_path}"

분할 창 명령.

bind-key % split-window -h -c "#{pane_current_path}"
bind-key '"' split-window -c "#{pane_current_path}"

1
이것이 정답입니다. 내 경우에는 특히 두 번째 옵션입니다.
Mike Rapadas

따로, 구성 파일을 변경하기 전에 백그라운드를 포함하여 현재 작동중인 모든 tmux 터미널을 닫는 것을 잊지 마십시오. 그렇지 않으면 tmux가 새 구성을로드하지 않습니다.
randomness

@lightmanhk 다음을 수행 할 수 있어야합니다. : source ~ / .tmux.conf
David C. Bishop

1
창 분할에 대해 이것을 일반화하는 방법이 있습니까? split-window -h "#{pane_current_path}"작동하지 않습니다 ...
Bach

1
@Bach -c로 시도하십시오. split-window -h -c "#{pane_current_path}"
David C. Bishop

3

나는이 질문이 꽤 오래되었다는 것을 알고 있지만, 직접 답을 찾고 있었을 때 StackExchange에서 유일하게 제기 된 질문 중 하나가되었으므로 여기 tmux 1.8에서이를 해결하는 방법이 있습니다.

new-window명령은 -c새 창의 현재 디렉토리를 지정할 수있는 플래그를 사용합니다. 기본적으로 빈 문자열이며 현재 창 작업 디렉토리를 새 창의 디렉토리로 사용합니다. 플래그 -값 으로 a 를 전달 -c하면 새 창의 디렉토리가 세션이 열린 것으로 설정됩니다.

다음은 문서에서 발췌 한 것입니다.

-c specifies the working directory in which the new window is created.  It may 
have an absolute path or one of the following values (or a subdirectory):

       Empty string    Current pane's directory
       ~               User's home directory
       -               Where session was started
       .               Where server was started

<PREFIX> c이것을 반영하기 위해 키 바인딩 의 기본 동작을 변경하려면 다음을 수행하십시오 ~/.tmux.conf.

bind-key c   new-window -c -

0

여기에 몇 가지 답변이 있습니다 : https://unix.stackexchange.com/questions/12032/create-new-window-with-current-directory-in-tmux

요약하자면:

tmux FAQ에서 하나의 둔감 한 (그러나 매우 일반적이며 상당히 쉘 독립적) 방법 :

  • 현재 창과 같은 디렉토리에서 새 창을 열려면 어떻게해야합니까?

하나의 옵션은 창에서 "TMUX = tmux"를 실행하는 것입니다. 그러나 명령이 실행되고 있지 않은 경우에만 작동하므로 명령을 입력 할 수 있습니다.

해결 방법은 tmux에 환경 변수를 통한 현재 경로를 알리는 것입니다. 이렇게하려면 다음 명령을 사용하십시오.

[ -n "$TMUX" ] && tmux setenv TMUXPWD_$(tmux display -p "#I") $PWD

TMUXPWD_i (여기서 i는 현재 창의 번호 임)를 현재 디렉토리의 경로로 설정합니다. 이 명령은 다음과 같이 PS1에 추가 될 수 있습니다.

PS1='$([ -n "$TMUX" ] && tmux setenv TMUXPWD_$(tmux display -p "#I") $PWD)\h$ '

새 창이 작성되면 쉘에 디렉토리를 변경하도록 요청해야합니다. 새로운 바인딩을 정의 할 수 있습니다 (예 : GNU bash를 사용하는 경우).

bind-key C-c run-shell 'tmux neww "cd $(tmux display -p "\$TMUXPWD_#I"); exec bash"'

이 솔루션은 현재 명령이 터미널에서 실행중인 경우에도 작동하지만 TMUXPWD_i가 스왑 후에 업데이트되지 않기 때문에 다른 스위치와 스왑 된 창에서는 작동하지 않습니다. 그러나 새 프롬프트가 표시되면 TMUXPWD_i가 올바르게 업데이트됩니다.

쉘 호출을 자신에게 적합한 것으로 바꾸십시오.

또한 분명히 최신 버전의 tmux는 명령으로 해결되었습니다.

tmux 새 창

이전 버전은 다음과 같이 작동한다고 주장합니다.

부름

tmux neww

귀하의 쉘에서 해당 디렉토리에 tmux가 열립니다.

tmux의 현재 작업 디렉토리에서 새 창 또는 창을 열려면 대신 다음을 수행해야합니다.

tmux 설정 옵션 기본 경로 "$ PWD"


, 도우려고 주셔서 감사합니다 해마 . 나는 unix.stackexchange에서 그 질문을 보았고 FAQ를 읽었습니다. 그러나 이것들은 내 질문에 대한 답변이 아닙니다.
Shamaoke

1
새 세션을 만들 때 해당 세션에서 여는 모든 새 창 또는 창에 대한 현재 디렉토리 는 세션을 시작하는 디렉토리 입니다. 단일 세션을 만드는 경우에도 마찬가지입니다. 그러나 새 터미널 창을 열고 다른 세션을 시작하면 모든 새 창에 대한 현재 작업 디렉토리가 현재 세션이 아닌 첫 번째 세션을 시작하는 디렉토리가 됩니다. 이것은 tmux 1.6의 버그입니다. 버전 1.3으로 다운 그레이드했을 때 버그가 나타나지 않았기 때문입니다.
Shamaoke
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.