Tmux उस निर्देशिका को भूल जाता है जहाँ सत्र बनाया गया था


8

जब मैं tmux में कई सत्र बनाता हूं, तो बाद के सत्रों में प्रत्येक नई विंडो के लिए वर्तमान निर्देशिका को पहले के लिए वर्तमान निर्देशिका के रूप में सेट किया जाता है।

उदाहरण के लिए:

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

मैं tmux को बाद की सत्रों में प्रत्येक नई विंडो के लिए वर्तमान निर्देशिका को उस निर्देशिका के रूप में सेट करने के लिए बाध्य कर सकता हूं जहां सत्र बनाया गया था?

tmux 1.6

zsh 4.3

जवाबों:


21

Tmux 1.9 के रूप में डिफ़ॉल्ट-पथ विकल्प को हटा दिया गया है

आप निम्न का उपयोग उस निर्देशिका में खोलने के लिए कर सकते हैं जिसे सत्र में खोला गया था (नाम में 'क्लाइंट' मुझे इंगित करेगा कि यह आपके शेल में वर्तमान tmux runnin है, लेकिन यह सत्रों के बीच स्विच करते समय पथों को स्विच करता है। एक ही ग्राहक):

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

अन्यथा वर्तमान फलक के पथ को कॉपी करने के लिए:

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

इसमें pane_start_path भी है जो कुछ वर्कफ़्लोज़ को अपील कर सकता है।

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

स्प्लिट विंडो कमांड के लिए।

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

1
यह सही जवाब है। विशेष रूप से मेरे मामले में दूसरा विकल्प।
माइक रापादास

एक तरफ के रूप में, अपने कॉन्फ़िगरेशन फ़ाइल का जप करने से पहले पृष्ठभूमि सहित सभी मौजूदा कार्यशील tmux टर्मिनलों को बंद करने के लिए मत भूलना अन्यथा tmux नए कॉन्फ़िगरेशन को लोड नहीं करेगा।
randomness2077

@lightmanhk आपको बस: स्रोत ~ / .tmux.conf में सक्षम होना चाहिए
डेविड सी। बिशप

1
फलक विभाजन के लिए इसे सामान्य करने का कोई तरीका? split-window -h "#{pane_current_path}"काम नहीं करेगा ...
Bach

1
@ बैच -c के साथ प्रयास करें। split-window -h -c "#{pane_current_path}"
डेविड सी। बिशप

3

मुझे पता है कि यह प्रश्न बहुत पुराना है, लेकिन यह StackExchange पर एकमात्र प्रश्नों में से एक के रूप में सामने आया जब मैं स्वयं उत्तर की तलाश में था, इसलिए यहां बताया गया है कि मैंने इसे tmux 1.8 के लिए कैसे हल किया।

new-windowआदेश लेता है -cझंडा है कि आप नई विंडो के वर्तमान निर्देशिका निर्दिष्ट करने के लिए अनुमति देगा। डिफ़ॉल्ट रूप से, यह एक खाली स्ट्रिंग है, जो नई विंडो के लिए निर्देशिका के रूप में वर्तमान पैन कार्य निर्देशिका का उपयोग करने जा रहा है। ध्वज -के मान के रूप में पास -cकरना नई विंडो की निर्देशिका को सेट करेगा जो सत्र को खोला गया था।

यहाँ डॉक्स का एक अंश दिया गया है:

-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

यदि आप <PREFIX> cइसे प्रतिबिंबित करने के लिए कीबाइंडिंग के डिफ़ॉल्ट व्यवहार को बदलना चाहते हैं , तो यहां मैंने अपने में किया है ~/.tmux.conf:

bind-key c   new-window -c -

0

यहाँ कुछ उत्तर दिए गए हैं: /unix/12032/create-new-window-with-current-directory-in-tmux

संक्षेप में:

tmux अकसर किये गए सवाल से, एक ऑब्ज़ट (लेकिन बहुत सामान्य और काफी स्वतंत्र रूप से शेल) तरीका:

  • मैं वर्तमान विंडो के समान निर्देशिका में एक नई विंडो कैसे खोल सकता हूं?

एक विकल्प सिर्फ खिड़की में "TMUX = tmux" चलाने का है। हालाँकि, यह केवल तभी काम करता है जब कोई कमांड नहीं चल रहा हो, ताकि आप कमांड को इनपुट कर सकें।

एक वर्कअराउंड एक पर्यावरण चर के माध्यम से tmux को वर्तमान पथ के बारे में बताना है। ऐसा करने के लिए, निम्नलिखित कमांड का उपयोग करें:

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

जो वर्तमान निर्देशिका के पथ पर TMUXPWD_i (जहां मैं वर्तमान विंडो की संख्या है) सेट करता है। यह आदेश PS1 में जोड़ा जा सकता है, उदाहरण के लिए:

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

जब एक नई विंडो बनाई जाती है, तो शेल को निर्देशिका बदलने के लिए कहा जाना चाहिए। आप एक नई बाइंडिंग को परिभाषित कर सकते हैं (उदाहरण के लिए, अगर GNU बैश का उपयोग कर रहे हैं):

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

यह समाधान तब भी काम करेगा, जब कोई कमांड वर्तमान में टर्मिनल में चल रही हो, लेकिन यह उस विंडो से काम नहीं करेगा, जिसे सिर्फ दूसरे के साथ स्वैप किया गया हो, क्योंकि एक स्वैप के बाद TMUXPWD_i को अपडेट नहीं किया जाएगा। हालाँकि, नया प्रॉम्प्ट प्रदर्शित होने के बाद, TMUXPWD_i को ठीक से अपडेट किया जाता है।

बस कॉल को आपके लिए उपयुक्त शेल में बदल दें।

इसके अलावा, स्पष्ट रूप से tmux के नए संस्करणों ने इसे एक कमांड के साथ संबोधित किया है

tmux new-window

पुराने संस्करणों को इस प्रकार काम करने का दावा किया जाता है:

बुला

tmux neww

आपके खोल से उस dir में tmux खुल जाएगा।

यदि आप tmux में वर्तमान कार्य निर्देशिका से नई विंडो या पैन खोलने में सक्षम होना चाहते हैं, तो आपको इसके बजाय:

tmux सेट-ऑप्शन डिफ़ॉल्ट-पथ "$ PWD"


मदद करने के लिए धन्यवाद, वालरस । मैंने उस सवाल को unix.stackexchange पर देखा और FAQ पढ़ा। हालाँकि, ये मेरे सवाल का जवाब नहीं हैं।
शामोके

1
देखिए, जब आप एक नया सत्र बनाते हैं, तो उस सत्र में आपके द्वारा खोली जाने वाली प्रत्येक नई विंडो या फलक के लिए वर्तमान निर्देशिका वह निर्देशिका होगी जहां आप सत्र प्रारंभ करते हैं । यह सच है अगर मैं एक सत्र बनाऊं। हालाँकि, जब मैं एक नई टर्मिनल विंडो खोलता हूं और इसमें एक और सत्र शुरू करता हूं, तो हर नई विंडो के लिए वर्तमान कार्यशील निर्देशिका वह निर्देशिका होगी जहां मैं पहला सत्र शुरू करता हूं, लेकिन वर्तमान सत्र नहीं। जाहिरा तौर पर यह tmux 1.6 में एक बग है, जब से मैंने इसे 1.3 संस्करण में डाउनग्रेड किया बग बग दिखाई नहीं दिया।
शामक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.