जब मैं विम से गोलाबारी कर रहा हूं, तो मैं शैल उपनाम कैसे उपलब्ध कर सकता हूं?


11

अपने में .zshrc, मैं कुछ उपनामों की घोषणा करता हूं। जैसे, which dbstartउस उपनाम की सामग्री को दिखाता है।

यदि मैं उस खोल से विम खोलता हूं, तो यह एक बच्चे की प्रक्रिया है। विम में, मैं शेल कमांड चला सकता हूं :! some_command। अगर मैं यह :! echo $0देखने के लिए कि शेल किस विम का उपयोग कर रहा है, तो यह '/ bin / zsh' आउटपुट करता है। हालाँकि, मेरे उपनाम वहां उपलब्ध नहीं हैं।

जब मैं विम से शैल बाहर निकालता हूं, तो मैं अपना सामान्य खोल कैसे उपलब्ध कर सकता हूं?

दो विचार:

  • किसी तरह EXPORTमूल शेल से एलियास, अपने बच्चे की प्रक्रिया के लिए vim, और फिर से अपने शेल बच्चे की प्रक्रिया के लिए
  • .zshrcइसकी उपधाराओं को बनाते समय मेरे पढ़ने के लिए विम को कॉन्फ़िगर करें

इसमें अपना .zshrc.profile (जो कि उपयोग में लगता हैvim
किवी

जवाबों:


13

पुराना सवाल है, लेकिन zsh में vim के लिए सबसे साफ समाधान उपनाम को जोड़ने के लिए था ~/.zshenv, वह फ़ाइल जो सभी गोले, लॉगिन, इंटरैक्टिव, या अन्यथा के लिए zsh लोड करता है। यह झंडे या zsh को झंडे और उस के साथ किसी भी संभावित समस्याओं से शुरू करने से बचा जाता है।

यहाँ ~/.zshenvबनाम का एक अच्छा विवरण ~/.zshrcहै: http://tanguy.ortolo.eu/blog/article25/shrc

मूल रूप से, zsh हमेशा स्रोत ~/.zshenv। इंटरैक्टिव गोले स्रोत ~/.zshrc, और लॉगिन गोले स्रोत ~/.zprofileऔर ~/.zlogin। इस प्रकार, एक इंटरेक्टिव लॉगिन शेल स्रोत ~/.zshenv ~/.zprofile ~/.zlogin ~/.zlogin, और एक नॉनएक्टिव, नॉनग्लिन शेल जैसे एक विम केवल स्रोतों को चलाने के लिए उपयोग करता है ~/.zshenv


यह केवल लिंक-उत्तर नहीं है, लेकिन यह सबसे अच्छा होगा यदि आप लिंक से अंतर की व्याख्या को रेखांकित करते हैं; इस तरह हर कोई यहाँ स्पष्टीकरण से लाभ उठा सकता है और हम लिंकरोट से सुरक्षित हैं।
HalosGhost

1
लिंक से मुख्य बिंदुओं के साथ मेरे उत्तर को अपडेट किया।
केविन ली

इसने अन्य उत्तरों की तुलना में मेरे लिए तेजी से बेहतर काम किया। जब मैंने एक इंटरैक्टिव शेल शुरू करने के लिए विम के लिए जोड़ा, तो यह तुरंत निलंबित हो गया। जब मैं .zshenv फ़ाइल का उपयोग करता हूं (जो मुझे पहले से पता नहीं था), तो मुझे अपने उपनाम वापस मिल गए!
कालेब

5

इस तरह दिखता है zsh के लिए काम करता है:

  • सुनिश्चित करें कि $ZDOTDIR=निर्देशिका कहाँ .zshrcस्थित है। उदाहरण के लिए,export ZDOTDIR=$HOME
  • में .vimrc, set shell=zsh\ -iया set shellcmdflag+=iसमान प्रभाव के लिए।

-iक्योंकि, जब इंटरैक्टिव मोड में शुरू किया था, भार zshell है $ZDOTDIR/.zshrc। विवरण के man zshलिए देखें और खोजें $ZDOTDIR


1
हम्म्, यह मेरे लिए एक अजीब मुद्दा बनाता है: सिस्टम क्लिपबोर्ड पर कॉपी करना जैसे "+yअब विम को निलंबित करता है! superuser.com/questions/712245/…
नाथन लॉन्ग

5
जैसे ही मैं इसे खोलता हूं मेरा विंब निलंबित हो जाता है।
कालेब

0

मेरा मानना ​​है कि जब आप अंदर होते हैं vimऔर आप इसका उपयोग करते हैं :!some_commandतो पर्यावरण चर द्वारा जो भी शेल परिभाषित किया गया है उसका उपयोग किया जाता है $SHELL

यह विन्यास योग्य है, इसलिए आप इसके बजाय उपयोग करने के लिए $SHELLअपनी $HOME/.vimrcफ़ाइल में व्यवहार को ओवरराइड करके बदल सकते हैं zsh

:set shell
shell=/bin/bash
:set shell=zsh\ -i

या आपके .vimrcइन 2 लाइनों में से 1 का उपयोग करते हुए

 set shell=/bin/bash\ -i
 set shell=/bin/zsh\ -i

विम मदद

अधिक जानकारी के लिए :help shellभीतर से देखें vim

:!{cmd}                 Execute {cmd} with the shell.  See also the 'shell'
                        and 'shelltype' option.
                        Any '!' in {cmd} is replaced with the previous
                        external command (see also 'cpoptions').  But not when
                        there is a backslash before the '!', then that
                        backslash is removed.  Example: ":!ls" followed by
                        ":!echo ! \! \\!" executes "echo ls ! \!".
                        After the command has been executed, the timestamp of
                        the current file is checked timestamp.

नहीं, जैसा कि मैंने कहा: "अगर मैं करता हूं: इको $ 0 को देखने के लिए कि शेल किसका उपयोग कर रहा है, यह '/ बिन / zsh' आउटपुट करता है"
नाथन लॉन्ग

@NathanLong - नहीं, मुझे लगता है कि यह आपको भ्रमित कर रहा है, मेरे अपडेट देखें।
स्लम

@ एसएलएम विम से मान खींचता है $SHELL। तो अपने खोल है /bin/bash। अगर मेरा खोल है /bin/zsh, तो इसका उपयोग क्या होगा।
पैट्रिक

0

मेरी समस्या shell=/usr/bin/zsh\ -lको .vimrcहल करने में स्थापित करके

ध्यान दें:

मैं उपयोग कर रहा हूँ: linux टकसाल 17.1


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