it-swarm-vi.com

Làm cách nào để tạo một cửa sổ mới trên thư mục hiện tại trong tmux?

Có thể mở một new-window với thư mục làm việc của nó được đặt thành thư mục tôi hiện đang sử dụng. Tôi đang sử dụng zsh, nếu có vấn đề.

217
Shrikant Sharat

Bắt đầu bằng tmux 1.9 the default-path tùy chọn đã bị xóa, vì vậy bạn cần sử dụng -c tùy chọn với new-windowsplit-window (ví dụ: bằng cách đóng lại c, "% ràng buộc để bao gồm
[.__.] -c '#{pane_current_path}'). Xem một số câu trả lời khác cho câu hỏi này để biết chi tiết.


Một tính năng có liên quan đã hạ cánh trong thân cây tmux vào đầu tháng 2 năm 2012. Trong tmux các bản dựng bao gồm mã này, tmux các ràng buộc khóa gọi new-window sẽ tạo một cửa sổ mới với cùng thư mục làm việc hiện tại với khung hiện tại của quy trình hoạt động của vùng đất (miễn là default-path tùy chọn phiên trống; nó là mặc định). Điều này cũng đúng với khung được tạo bởi split-window lệnh khi nó được gọi thông qua một ràng buộc.

Điều này sử dụng mã dành riêng cho nền tảng đặc biệt, vì vậy chỉ có một số HĐH nhất định được hỗ trợ tại thời điểm này: Darwin (OS X), FreeBSD, Linux, OpenBSD và Solaris.

Điều này sẽ có sẵn trong bản phát hành tiếp theo của tmux (1.7?).


Với tmux 1.4, tôi thường chỉ sử dụng

tmux neww

trong Shell đã có thư mục làm việc hiện tại mong muốn.

Tuy nhiên, nếu tôi dự đoán cần phải tạo nhiều cửa sổ với cùng thư mục làm việc hiện tại (hoặc tôi muốn có thể bắt đầu chúng với ràng buộc <tiền tố> c thông thường), thì tôi đặt default-path tùy chọn phiên thông qua

tmux set-option default-path "$PWD"

trong Shell đã có thư mục làm việc hiện tại mong muốn (mặc dù bạn rõ ràng có thể làm điều đó từ bất kỳ thư mục nào và chỉ cần chỉ định giá trị thay thế).

Nếu default-path được đặt thành một giá trị không trống, giá trị của nó sẽ được sử dụng thay vì sử dụng thừa kế của thư mục làm việc hiện tại từ các lệnh gọi dòng lệnh của tmux neww.

tmux FAQ có một mục có tiêu đề Làm thế nào tôi có thể mở một cửa sổ mới trong cùng thư mục với cửa sổ hiện tại? điều đó mô tả một cách tiếp cận khác; đó là một chút phức tạp mặc dù.

150
Chris Johnsen

Trang man Tmux (1.9a) hiện tại liệt kê một tham số -c start-directory Tùy chọn cho một số lệnh, bao gồm new-windowsplit-window. Nó cũng chứa biến định dạng pane_current_path, Đề cập đến Current path if available.

Bằng cách kết hợp những thứ này, chúng ta có thể mở một cửa sổ mới với thư mục làm việc hiện tại bằng cách sử dụng
[.__.] new-window -c "#{pane_current_path}"
[.___.] Báo giá là cần thiết trong trường hợp đường dẫn hiện tại chứa khoảng trắng.

Nếu bạn muốn chia ngăn hiện tại theo chiều dọc, hãy sử dụng
[.__.] split-window -c "#{pane_current_path}"
[.__.] hoặc, cho một phân chia ngang
[.__.] split-window -h -c "#{pane_current_path}"

Để làm cho các ràng buộc chính mở các phân chia và cửa sổ mới với thư mục làm việc hiện tại theo mặc định, hãy thêm phần sau vào .tmux.conf. " Với các trích dẫn xung quanh là để nói với Tmux rằng nó không nên bắt đầu một chuỗi mà chỉ ràng buộc " Chìa khóa.

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

Có, sử dụng new-window -c "#{pane_current_path}". Bạn có thể thêm các mục sau vào ~/.tmux.conf Để làm cho nó bền bỉ (giả định các phím bấm mặc định):

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

Cài đặt đường dẫn default-pathđã xóa từ mã ngược dòng và tác giả tmux được đề xuất trong thông báo cam kết đó bằng cách sử dụng -c "#{pane_current_path}" Hoặc -c "$PWD Trong new-windowsplit-window.

Tôi cũng đã trả lời trong này câu hỏi trùng lặp .

43
mmoya

Với các phiên bản gần đây của tmux (v1.8, nhưng có thể trong v1.7 cũng vậy):

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

Các câu trả lời khác không hiệu quả với tôi khi tôi thử đặt chúng làm ràng buộc (cụ thể là tmux split-window -c). Nhưng tôi đã tạo ra giải pháp của riêng mình mà tôi đã sử dụng trong hơn một năm hoạt động cho cả cửa sổ mới và chia nhỏ:

~/.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"

Hoạt động, ít nhất, với $ (tmux -V) 1.8. Xem các dòng nhận xét tại đây để biết phiên bản hoạt động cho các tmux cũ không có lệnh hiển thị môi trường.

3
Erik Westrup

tmux đã làm điều đó trong phiên bản 1.8 nhưng trong 1.9, tính năng này đã bị xóa vì sử dụng -c cờ.

Điều này có thể được giải quyết nhưng ràng buộc lại new-window nhưng trong trường hợp bạn muốn chạy một cái gì đó, nó trở nên quá dài dòng: thay vì gõ neww man tmux bạn sẽ phải gõ neww -c "#{pane_current_path}" man tmux điều mà bạn có lẽ không muốn làm nhất.

Có một mod của tmux (Tôi là tác giả) để thêm ngôn ngữ kịch bản phù hợp vào tmux để cho phép sử dụng bí danh, liên kết nhiều lệnh trong 'mode', biến, vòng lặp, v.v ... Và cũng, nó mang lại hành vi đó : cửa sổ mới và panes được mở trong thư mục hiện tại.

Nó có thể được xây dựng từ các nguồn ở đây: http://ershov.github.io/tmux/

0
Yuriy Ershov