कैसे tmux में वर्तमान निर्देशिका पर एक नई विंडो बनाने के लिए?


208

क्या new-windowमैं वर्तमान में हूं, इसके लिए काम करने वाली डायरेक्टरी सेट के साथ खोलना संभव है । अगर यह मायने रखता है तो मैं zsh का उपयोग कर रहा हूं ।

जवाबों:


139

Tmux 1.9 में शुरू करने से default-pathविकल्प हटा दिया गया था, इसलिए आपको -cविकल्प का उपयोग करने की आवश्यकता है new-window, और split-window(जैसे c, रिबंडिंग "और %शामिल करने के लिए बाइंडिंग द्वारा
-c '#{pane_current_path}')। विवरण के लिए इस प्रश्न के कुछ अन्य उत्तर देखें।


एक प्रासंगिक सुविधा फरवरी 2012 की शुरुआत में tmux SVN ट्रंक में उतरी । tmux में यह कोड शामिल है, tmux कुंजी बाइंडिंग जो आह्वान करती है new-window, वर्तमान फलक की सक्रिय प्रक्रियाओं ( default-pathसत्र के रूप में लंबे समय तक) एक ही वर्तमान कार्यशील निर्देशिका के साथ एक विंडो बनाएगी। विकल्प खाली है; यह डिफ़ॉल्ट रूप से है)। split-windowजब यह बाध्यकारी द्वारा लागू किया जाता है तो कमांड द्वारा बनाए गए फलक के लिए भी यही सही है ।

यह विशेष प्लेटफ़ॉर्म-विशिष्ट कोड का उपयोग करता है, इसलिए इस समय केवल कुछ OS समर्थित हैं: डार्विन (OS X), FreeBSD, Linux, OpenBSD और Solaris।

यह tmux (1.7?) की अगली रिलीज़ में उपलब्ध होना चाहिए ।


1.4 tmux के साथ , मैं आमतौर पर सिर्फ उपयोग करता हूं

tmux neww

एक शेल में जो पहले से ही वर्तमान कार्यशील निर्देशिका है।

यदि, हालांकि, मैं एक ही वर्तमान कार्यशील निर्देशिका के साथ कई विंडो बनाने की आवश्यकता का अनुमान लगाता हूं (या मैं उन्हें सामान्य <उपसर्ग> cकुंजी बंधन) के साथ शुरू करने में सक्षम होना चाहता हूं , तो मैं default-pathसत्र विकल्प के माध्यम से सेट करता हूं

tmux set-option default-path "$PWD"

एक ऐसे शेल में, जिसमें पहले से ही वांछित कार्यशील निर्देशिका है (हालांकि आप स्पष्ट रूप से इसे किसी भी निर्देशिका से कर सकते हैं और इसके बजाय केवल मूल्य निर्दिष्ट कर सकते हैं)।

यदि default-pathइसे एक गैर-खाली मान पर सेट किया जाता है, तो इसके मूल्य का उपयोग कमांड-लाइन चालान के वर्तमान कार्यशील निर्देशिका "विरासत" के बजाय किया जाएगा tmux neww

Tmux पूछे जाने वाले प्रश्न शीर्षक प्रविष्टि मौजूद होती है कि एक और दृष्टिकोण का वर्णन करता है "मैं वर्तमान विंडो उसी निर्देशिका में एक नई विंडो कैसे खोल सकता हूँ?"; हालांकि यह थोड़ा जटिल है।


6
क्या कोई तरीका है जो मैं <prefix>cअंतर्निहित शेल उदाहरण (यदि कोई हो) की कार्यशील निर्देशिका को पढ़ने के लिए मैप कर सकता हूं और default-pathनिष्पादन से पहले सेट कर सकता हूं new-window। या कि tmux के पूछने के लिए बहुत ज्यादा है :)
श्रीकांत शरत

एक अन्य नोट पर, क्या अंतर्निहित शेल की कार्यशील निर्देशिका को पढ़ना संभव है? मैं इसे अपने स्टेटस बार में प्रदर्शित करना चाहता हूँ।
श्रीकांत शरत

2
किसी अन्य प्रक्रिया के cwd को निकालने का कोई पोर्टेबल तरीका नहीं है (हालांकि यह कुछ प्लेटफार्मों (जैसे /proc/PID/cwdलिनक्स पर) संभव है)। वहाँ में एक संभव आंशिक समाधान है एक प्रवेश की tmux पूछे जाने वाले प्रश्न (यह, खोल रिकॉर्ड अपने CWD जब यह एक त्वरित प्रिंट है तो एक महत्वपूर्ण यह है कि दर्ज की गई निर्देशिका में एक नया खोल शुरू होता है बांधता है)।
क्रिस जॉन्सन

ठीक है, यह मेरे ज्ञान के दायरे से बाहर है और बहुत विश्वसनीय नहीं लगता है। कुछ मुझे बताता है कि मैं इस सब के बिना बेहतर हो सकता हूं .. वैसे भी धन्यवाद।
श्रीकांत शरत

1
@ अपरैड: एक बाइंडिंग विल (डिफ़ॉल्ट रूप से) के माध्यम से किया गया कुछ भी tmux सर्वर के cwd या default-pathसत्र विकल्प के मान (यदि वह सेट है) का उपयोग करता है। Tmux पूछे जाने वाले प्रश्न एक प्रविष्टि है कि एक महत्वपूर्ण यह है कि वर्तमान विंडो में खोल चलने के CWD साथ एक नई विंडो शुरू होता है बाध्य करने के लिए एक तरह से वर्णन करता है ( "मैं वर्तमान विंडो उसी निर्देशिका में एक नई विंडो खोल सकते हैं?") , लेकिन विधि काफी जटिल है। वही शायद ( split-windowऔर ) के new-sessionबजाय किया जा सकता है neww
क्रिस जॉन्सन

268

वर्तमान (1.9a) Tmux मैन पेज -c start-directoryकुछ कमांड्स सहित, new-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}"

1
क्या यह tmux 1.9 पर काम नहीं करता है? मैं इसे अपेक्षित काम करने के लिए नहीं कर सकता।
एरिक गैरिसन

1
bind-key -r Enter new-window -c "# {pane_current_path}", tmux के लिए काम करता है 2.1
Marslo

5
OSX पर tmux 2.3 में काम करता है। इन बाइंडिंग को लागू करने के लिए सभी मौजूदा सत्रों को रोकने / मारने की भूल न करें।
जगरनियर

1
@jmgarnier या फिर से स्रोत का स्रोत: prefix- :, फिर टाइप करेंsource ~/.tmux.conf
ijoseph

8
@jmgarnier या बस tmux source-file .tmux.conf
Blauhirn

37

हाँ, उपयोग करें new-window -c "#{pane_current_path}"। आप ~/.tmux.confइसे लगातार बनाने के लिए निम्नलिखित जोड़ सकते हैं (डिफ़ॉल्ट कीबाइंडिंग को मानते हुए):

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

default-pathपथ की स्थापना की गई थी हटाया या तो का उपयोग कर नदी के ऊपर कोड और tmux लेखक कि प्रतिबद्ध संदेश में सिफारिश से -c "#{pane_current_path}"या -c "$PWDमें new-windowऔर split-windowआदेशों।

मैंने भी इस दोहरे प्रश्न का उत्तर दिया


10

Tmux के हाल के संस्करणों के साथ (v1.8, लेकिन शायद v1.7 में भी):

tmux new-window -c "$PWD"

यह विभाजित विंडो के साथ-साथ काम करने के लिए प्रकट होता है, जैसेtmux split-window -v -c "$PWD"
user7089

3
$PWD1.9m में मेरे लिए काम करने के लिए प्रकट नहीं होता है। मुझे pane_current_pathऊपर बताए अनुसार उपयोग करना था ।
जॉर्डेल्वर

3

दूसरे जवाब मेरे लिए काम नहीं करते हैं जब मैं उन्हें बांधने की कोशिश करता हूं (विशेष रूप से tmux split-window -c)। लेकिन मैंने अपना स्वयं का समाधान बनाया है जिसे मैं एक वर्ष से अधिक समय से उपयोग कर रहा हूं जो नई-खिड़की और विभाजन दोनों के लिए काम करता है:

~/.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 के साथ। पुराने tmuxes के लिए काम कर रहे एक संस्करण के लिए यहां से बाहर की टिप्पणी वाली लाइनें देखें, जिनके पास शो-पर्यावरण कमांड नहीं है।


0

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/

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.