Tmux quên thư mục nơi phiên được tạo


8

Khi tôi tạo nhiều phiên trong tmux, thư mục hiện tại cho mọi cửa sổ mới trong các phiên tiếp theo được đặt làm thư mục hiện tại cho phiên đầu tiên.

Ví dụ:

-> 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"

Làm cách nào tôi có thể buộc tmux đặt thư mục hiện tại cho mọi cửa sổ mới trong các phiên tiếp theo làm thư mục nơi phiên được tạo?

tmux 1.6

zsh 4.3

Câu trả lời:


21

Kể từ tmux 1.9, tùy chọn đường dẫn mặc định đã bị xóa .

Bạn có thể sử dụng cách sau để mở trong thư mục mà phiên đã mở ('client' trong tên sẽ cho tôi biết rằng đó là tmux hiện tại trong vỏ của bạn, nhưng dường như nó chuyển đổi đường dẫn khi chuyển đổi giữa các phiên trong cùng khách hàng):

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

Mặt khác để sao chép đường dẫn của khung hiện tại:

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

Ngoài ra còn có pane_start_path có thể thu hút một số quy trình công việc.

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

Đối với các lệnh cửa sổ phân chia.

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

1
Đây là câu trả lời chính xác. Cụ thể là lựa chọn thứ 2 trong trường hợp của tôi.
Mike Rapadas

như một bên, đừng quên đóng tất cả các thiết bị đầu cuối tmux đang hoạt động hiện tại bao gồm cả nền trước khi tập tin cấu hình của bạn nếu không tmux sẽ không tải cấu hình mới.
ngẫu

@lightmanhk Bạn chỉ có thể: nguồn ~ / .tmux.conf
David C. Giám mục

1
Bất kỳ cách nào để khái quát hóa điều này cho các phân chia khung? split-window -h "#{pane_current_path}"sẽ không hoạt động ...
Bach

1
@Bach Hãy thử với một -c. split-window -h -c "#{pane_current_path}"
David C. Giám mục

3

Tôi nhận ra rằng câu hỏi này khá cũ, nhưng nó là một trong những câu hỏi duy nhất trên StackExchange khi tôi đang tìm kiếm câu trả lời cho chính mình, vì vậy đây là cách tôi giải quyết nó cho tmux 1.8.

Các new-windowlệnh có -ccờ mà sẽ cho phép bạn chỉ định thư mục hiện hành của cửa sổ mới. Theo mặc định, nó là một chuỗi rỗng, sẽ sử dụng thư mục làm việc panes hiện tại làm thư mục cho cửa sổ mới. Truyền vào -dưới dạng giá trị cho -ccờ sẽ đặt thư mục của cửa sổ mới vào phiên được mở.

Đây là một đoạn trích từ các tài liệu:

-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

Nếu bạn muốn thay đổi hành vi mặc định của liên kết <PREFIX> cphím để phản ánh điều này, đây là những gì tôi đã làm trong ~/.tmux.conf:

bind-key c   new-window -c -

0

có khá nhiều câu trả lời ở đây: /unix/12032/create-new-window-with-civerse-directory-in-tmux

Tóm tắt:

từ Câu hỏi thường gặp về tmux, một cách độc lập (nhưng rất chung chung và khá độc lập):

  • 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?

Một tùy chọn là chỉ chạy "TMUX = tmux" trong cửa sổ. Tuy nhiên, điều này chỉ hoạt động nếu không có lệnh nào đang chạy, để bạn có thể nhập lệnh.

Một cách giải quyết là để cho tmux biết về đường dẫn hiện tại thông qua một biến môi trường. Để làm như vậy, sử dụng lệnh sau:

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

Mà đặt TMUXPWD_i (trong đó i là số của cửa sổ hiện tại) vào đường dẫn của thư mục hiện tại. Lệnh này có thể được thêm vào PS1, ví dụ:

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

Khi một cửa sổ mới được tạo, shell sẽ được yêu cầu thay đổi thư mục. Bạn có thể xác định một ràng buộc mới (ví dụ: nếu sử dụng GNU bash):

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

Giải pháp này sẽ hoạt động ngay cả khi một lệnh hiện đang chạy trong thiết bị đầu cuối, nhưng nó sẽ không hoạt động từ một cửa sổ vừa được hoán đổi với một vì TMUXPWD_i sẽ không được cập nhật sau khi trao đổi. Tuy nhiên, một khi lời nhắc mới được hiển thị, TMUXPWD_i được cập nhật đúng cách.

chỉ cần thay thế các cuộc gọi đến shell là phù hợp với bạn.

Ngoài ra, rõ ràng các phiên bản mới hơn của tmux có địa chỉ này bằng một lệnh

cửa sổ mới tmux

phiên bản cũ hơn được tuyên bố là hoạt động như vậy:

gọi

tmux neww

từ shell của bạn sẽ mở tmux trong thư mục đó.

nếu bạn muốn có thể mở các cửa sổ hoặc cửa sổ mới từ thư mục làm việc hiện tại trong tmux thì bạn nên thay thế:

đường dẫn mặc định tùy chọn cài đặt tmux "$ PWD"


Cảm ơn đã cố gắng giúp đỡ, hải mã . Tôi thấy câu hỏi đó trên unix.stackexchange và đọc FAQ. Tuy nhiên, đây không phải là câu trả lời cho câu hỏi của tôi.
ShamÓA

1
Hãy nhìn xem, khi bạn tạo một phiên mới, thư mục hiện tại cho mỗi cửa sổ hoặc khung mới mà bạn mở trong phiên đó sẽ là thư mục mà bạn bắt đầu phiên . Điều này đúng nếu tôi tạo một phiên duy nhất. Tuy nhiên, khi tôi mở một cửa sổ terminal mới và bắt đầu một phiên khác trong đó, thư mục làm việc hiện tại cho mỗi cửa sổ mới sẽ là thư mục mà tôi bắt đầu phiên đầu tiên chứ không phải phiên hiện tại. Đây rõ ràng là một lỗi trong tmux 1.6 kể từ khi tôi hạ cấp nó xuống phiên bản 1.3, lỗi không xuất hiện.
ShamÓA
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.