Có thể mở một new-window
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 đề.
Có thể mở một new-window
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 đề.
Câu trả lời:
Bắt đầu từ năm tmux 1.9 các default-path
tùy chọn đã được gỡ bỏ, vì vậy bạn cần phải sử dụng các -c
tùy chọn với new-window
, và split-window
(ví dụ bằng cách rebinding sự c
, "
và %
bindings để 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 SVN vào đầu tháng 2 năm 2012. Trong các bản dựng tmux bao gồm mã này, các ràng buộc khóa tmux được gọi new-window
sẽ tạo ra một cửa sổ mới với cùng thư mục hoạt động hiện tại như các quy trình hoạt động của khung hiện tại (miễn là default-path
phiên tùy chọn trống, theo 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 phiên bản tiếp theo của tmux (1.7?).
Với tmux 1.4, tôi thường chỉ sử dụng
tmux neww
trong một 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 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ể khởi động chúng bằng c
liên kết phím <tiền tố> 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 một 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ì truyền 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
.
Câu hỏi thường gặp về tmux có một mục có tiêu đề là 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? nó là một chút phức tạp mặc dù.
/proc/PID/cwd
trên Linux)). Có một giải pháp một phần có thể có trong một mục của Câu hỏi thường gặp về tmux (nó có vỏ ghi lại cwd của nó khi nó in một dấu nhắc, sau đó liên kết một khóa bắt đầu một vỏ mới trong thư mục được ghi).
default-path
tùy chọn phiên (nếu điều đó được đặt). Câu hỏi thường gặp về tmux có một mục mô tả cách liên kết khóa bắt đầu một cửa sổ mới với cwd của shell đang chạy trong cửa sổ hiện tại (. 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? , nhưng phương pháp này khá phức tạp. Điều tương tự có thể được thực hiện cho split-window
và new-session
(thay vì neww
).
Trang man Tmux (1.9a) hiện tại liệt kê một -c start-directory
tham số tùy chọn cho một số lệnh, bao gồm new-window
và split-window
. Nó cũng chứa biến định dạng pane_current_path
, trong đó đề 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á 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, để phân chia theo chiều 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 các mục sau vào .tmux.conf
. 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 "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}"
prefix
- :
, sau đó nhậpsource ~/.tmux.conf
tmux source-file .tmux.conf
.
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ác default-path
thiết lập con đường đã được lấy ra từ mã thượng nguồn và tác giả tmux đề nghị trong đó cam kết thông báo bằng cách sử dụng -c "#{pane_current_path}"
hoặc -c "$PWD
trong new-window
và split-window
lệnh.
Tôi cũng đã trả lời trong câu hỏi trùng lặp này .
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"
tmux split-window -v -c "$PWD"
$PWD
không xuất hiện để làm việc cho tôi trong tmux 1.9a. Tôi đã phải sử dụng pane_current_path
như đề xuất ở trên.
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ể 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 ở đâ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.
tmux đã làm điều đó trong phiên bản 1.8 nhưng trong 1.9, tính năng này đã bị loại bỏ vì sử dụng -c
cờ.
Điều này có thể được giải quyết nhưng ràng buộc new-window
lại nhưng trong trường hợp bạn muốn chạy một cái gì đó thì 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
mà bạn có lẽ không muốn làm.
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/
<prefix>c
để đọc thư mục làm việc của thể hiện shell bên dưới (nếu có) và đặtdefault-path
trước khi thực thinew-window
. Hoặc là quá nhiều để hỏi về tmux :)