tmux의 현재 디렉토리에서 새 창을 만드는 방법은 무엇입니까?


208

new-window작업 디렉토리가 현재있는 디렉토리로 설정된 상태에서 파일을 열 수 있습니까? 중요한 경우 zsh를 사용 하고 있습니다.

답변:


139

부터 TMUX 1.9 default-path당신이 사용할 필요가 있으므로, 옵션은 제거 -c와 옵션 new-window, 그리고 split-window합니다 (리 바인딩에 의해 예를 c, "그리고 %바인딩을 포함합니다
-c '#{pane_current_path}'). 자세한 내용은이 질문에 대한 다른 답변을 참조하십시오.


관련 기능은 2012 년 2 월 초에 tmux SVN 트렁크에 상주 했습니다 . 이 코드를 포함하는 tmux 빌드에서, 호출하는 tmux 키 바인딩 new-windowdefault-path세션 의 한 현재 세션 의 활성 프로세스와 동일한 현재 작업 디렉토리가있는 새 창을 만듭니다. 옵션은 비어 있으며 기본적으로 사용됩니다. split-window바인딩을 통해 호출 될 때 명령으로 작성된 분할 창에 대해서도 마찬가지입니다 .

이것은 특수한 플랫폼 특정 코드를 사용하므로 현재 Darwin (OS X), FreeBSD, Linux, OpenBSD 및 Solaris와 같은 특정 OS 만 지원됩니다.

이것은 tmux (1.7?) 의 다음 릴리스에서 사용 가능해야합니다 .


TMUX 1.4, 나는 대개 사용

tmux neww

원하는 현재 작업 디렉토리가 이미있는 쉘에서.

그러나 동일한 현재 작업 디렉토리로 많은 창을 만들어야 할 것으로 예상되는 경우 (또는 일반적인 <prefix> c키 바인딩으로 창을 시작할 수 있기를 원합니다 ) default-path세션 옵션을 통해 설정하십시오

tmux set-option default-path "$PWD"

원하는 현재 작업 디렉토리가 이미있는 쉘에서 (명확하게 모든 디렉토리에서 수행하고 대신 값을 지정할 수 있음).

경우 default-path비어 있지 않은 값으로 설정되어, 그 값은 대신 명령 줄 호출에서 "상속"현재 작업 디렉토리로 사용됩니다 tmux neww.

TMUX의 질문은 제목의 항목이 다른 접근 방식을 설명합니다 "나는 현재 창 같은 디렉토리에 새 창을 열 수 있습니까?"; 그래도 조금 복잡합니다.


6
내가지도 할 수있는 방법이 <prefix>c기본 쉘 인스턴스의 작업 디렉토리를 읽을 수 (있는 경우) 및 설정 default-path을 실행하기 전에이 new-window. 또는 너무 많은 tmux 를 물어 보십시오 :)
Shrikant Sharat

또 다른 참고로, 기본 쉘의 작업 디렉토리를 읽을 수 있습니까? 상태 표시 줄에 표시되도록 죽일 것입니다.
Shrikant Sharat

2
다른 프로세스의 암호를 추출 할 수있는 이식 가능한 방법은 없습니다 (일부 플랫폼 (예 : /proc/PID/cwdLinux)에서는 가능). tmux FAQ 항목 에 부분 해결책이 있을 수 있습니다 (프롬프트가 인쇄 될 때 쉘에 cwd 레코드를 기록한 다음 기록 된 디렉토리에서 새 쉘을 시작하는 키를 바인딩 함).
Chris Johnsen

좋아, 이것은 내 지식의 범위를 벗어 났으며 매우 신뢰할 수 있다고 생각하지 않습니다. 이 모든 것없이 더 나아질지도 모른다는 말이 있습니다. 어쨌든 고마워요.
Shrikant Sharat

1
@paradroid : 바인딩을 통해 수행되는 모든 작업은 기본적으로 tmux 서버 의 cwd 또는 default-path세션 옵션 값 (설정된 경우)을 사용합니다. TMUX 자주 묻는 질문은 현재 윈도우의 쉘 실행의 CWD에 새 창을 시작하는 키 바인딩 할 수있는 방법에 대해 설명하는 항목이있다 ( "나는 현재 창 같은 디렉토리에 새 창을 열 수 있습니다 어떻게?") 그러나 방법은 상당히 복잡합니다. split-windownew-session대신에 동일하게 수행 할 수 있습니다 neww.
Chris Johnsen

268

현재 (1.9a) Tmux 매뉴얼 페이지에는 및를 -c start-directory포함한 일부 명령에 대한 선택적 매개 변수가 나열 new-window되어 split-window있습니다. 또한 형식 변수를 포함 pane_current_path합니다 Current path if available.

이들을 결합하여 현재 작업 디렉토리에 새 창을 열 수
new-window -c "#{pane_current_path}"
있습니다. 현재 경로에 공백이있는 경우 인용이 필요합니다.

현재 창을 세로로 나누려면
split-window -c "#{pane_current_path}"
또는 가로 나누기를 사용하십시오.
split-window -h -c "#{pane_current_path}"

키 바인딩이 기본적으로 현재 작업 디렉토리를 사용하여 새 분할 및 창을 열도록하려면 다음을에 추가하십시오 .tmux.conf. "주변 따옴표는 문자열을 시작하는 것이 아니라 바인딩 안 TMUX을 알려주는 것입니다 "키를 누릅니다.

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

1
이것은 tmux 1.9에서 작동하지 않습니까? 예상 한 일을 할 수 없습니다.
에릭 개리슨

1
bind-key -r new-window -c "# {pane_current_path}"입력, tmux 2.1에서 작동
Marslo

5
OSX의 tmux 2.3에서 작동합니다. 이러한 바인딩이 적용되는 것을 확인하려면 기존 세션을 모두 중지 / 종료하는 것을 잊지 마십시오.
jmgarnier

1
@jmgarnier 또는 프로필을 다시 제공 : prefix- :, 그리고 다음을 입력합니다source ~/.tmux.conf
ijoseph

8
@jmgarnier 또는 그냥 tmux source-file .tmux.conf.
Blauhirn

37

그렇습니다 new-window -c "#{pane_current_path}". 다음을 추가하여 ~/.tmux.conf영구적으로 만들 수 있습니다 (기본 키 바인딩 가정).

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

default-path경로 설정되었다 제거 중 하나를 사용하여 해당 커밋 메시지에서 권장하는 업스트림 코드와 TMUX 저자에서 -c "#{pane_current_path}"또는 -c "$PWDnew-windowsplit-window명령.

나는 또한이 중복 질문 에 대답 했다 .


10

최신 버전의 tmux (v1.8, v1.7에서도) :

tmux new-window -c "$PWD"

이것은 split-window에서도 작동하는 것으로 보입니다. 예 :tmux split-window -v -c "$PWD"
user7089

3
$PWDtmux 1.9a에서 작동하지 않는 것 같습니다. pane_current_path위에서 제안한대로 사용해야 했습니다.
jordelver

3

다른 답변은 바인딩 (특히 tmux split-window -c) 으로 넣으려고하면 작동하지 않습니다 . 그러나 나는 새로운 창과 분할 모두에서 작동하는 1 년 이상 동안 사용해 온 자체 솔루션을 구성했습니다.

~/.bashrc:

PS1="$PS1"'$([ -n "$TMUX" ] && tmux setenv TMUXPWD_$(tmux display -p "#D" | tr -d %) "$PWD")'

~/.tmux.conf:

unbind-key c
bind-key c run-shell 'tmux new-window "cd \"$(tmux show-environment $(echo "TMUXPWD_#D" | tr -d %) | sed -e "s/^.*=//")\"; exec $SHELL"'
bind-key C new-window

bind-key - run-shell 'tmux split-window -v "cd \"$(tmux show-environment $(echo "TMUXPWD_#D" | tr -d %) | sed -e "s/^.*=//")\"; exec $SHELL"'
bind-key | run-shell 'tmux split-window -h "cd \"$(tmux show-environment $(echo "TMUXPWD_#D" | tr -d %) | sed -e "s/^.*=//")\"; exec $SHELL"

적어도 $ (tmux -V) 1.8에서 작동합니다. 아웃 주석 라인을 참조하십시오 여기 쇼 - 환경 명령을하지 않는 이전 tmuxes 일하는 버전.


0

tmux는 버전 1.8에서이를 수행했지만 1.9에서는이 기능이 -c플래그 사용을 위해 제거되었습니다 .

이것은 해결 될 수 있지만 다시 바인딩 할 수 있지만 new-window다른 것을 실행하려는 경우 너무 장황 해집니다. 입력하는 대신 입력 하고 싶지 않은 neww man tmux입력 neww -c "#{pane_current_path}" man tmux해야합니다.

tmux에 적절한 스크립트 언어를 추가하여 별칭을 사용하고 '모드', 변수, 루프 등에서 여러 명령을 바인딩 할 수 있도록 tmux (저는 저자입니다)의 모드가 있습니다. : 현재 창에서 새 창과 창이 열립니다.

여기 소스에서 빌드 할 수 있습니다 : http://ershov.github.io/tmux/

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.