it-swarm.dev

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

작업 디렉토리를 현재있는 디렉토리로 설정하여 new-window를 열 수 있습니까? 중요한 경우 zsh를 사용하고 있습니다.

217
Shrikant Sharat

tmux 1.9부터 default-path 옵션이 제거되었으므로 -c 옵션을 new-windowsplit-window (예 : c, "% 바인딩을 리 바인드하여
-c '#{pane_current_path}'). 자세한 내용은이 질문에 대한 다른 답변을 참조하십시오.


관련 기능은 2012 년 2 월 초 tmux SVN 트렁크에 상주했습니다. In tmux이 코드가 포함 된 빌드 tmuxnew-window를 호출하는 키 바인딩은 default-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 FAQ 에는“현재 창과 같은 디렉토리에 새 창을 열려면 어떻게해야합니까?”라는 제목의 항목이 있습니다. 다른 접근 방식을 설명합니다. 그래도 조금 복잡합니다.

150
Chris Johnsen

현재 (1.9a) Tmux 매뉴얼 페이지에는 -c start-directorynew-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}"
293
Simon Kohlmeyer

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

tmux new-window -c "$PWD"
10
mislav

바인딩으로 넣을 때 다른 답변이 작동하지 않습니다 (특히 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에서 작동합니다. show-environment 명령이없는 이전 tmux에서 작동하는 버전은 주석 처리되지 않은 행 here 을 참조하십시오.

3
Erik Westrup

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/

0
Yuriy Ershov