2011-05-28 9 views
7

संभव डुप्लिकेट:
Commands executed from vim are not recognizing bash command aliasesविम के भीतर से बैश फ़ंक्शंस निष्पादित करना - मैं इसे कैसे कर सकता हूं?

मेरे पास मेरी ~/.bashrc फ़ाइल में निम्न समारोह (मेरी Ubunut बॉक्स पर)

# convert tex to pdf, no bib 
function t2p { 
    latex $1 && latex $1 && dvips $1 -o $1.ps && ps2pdf $1.ps && rm -f $1.dvi } 

# convert tex to pdf, with bib 
function tb2p { 
    latex $1 && bibtex $1 && latex $1 && latex $1 && dvips $1 -o $1.ps && ps2pdf $1.ps && rm -f $1.dvi } 

उदाहरण के लिए, एक पीडीएफ फ़ाइल में एक tex फ़ाइल f.tex को परिवर्तित करने और इसे bibtex में परिवर्तित करने के लिए सही आदेश, मैं tb2p f पर कॉल करता हूं। यदि मैं बैश टर्मिनल में हूं तो यह बहुत अच्छा काम करता है। हालांकि, विम के भीतर से बैश प्रॉम्प्ट पर जाने के लिए मुझे वास्तव में कमांड निष्पादित करना होगा: sh पहले। च t2p:

उपरोक्त प्रक्रिया मैं द्वारा कार्यों t2p और tb2p विम के अंदर निष्पादित करने के लिए करने की कोशिश की आसान बनाने के लिए!। विम तो मुझे बताता है कि यह फ़ंक्शन t2p नहीं ढूंढ सकता है। मैंने कुछ गूगलिंग किया और पढ़ा कि मुझे इन कार्यों को फ़ाइल /etc/bash.bashrc में विम को दृश्यमान बनाने के लिए रखना चाहिए। दुर्भाग्यवश, यह मेरे मामले में काम नहीं किया। विम अभी भी समारोह के बारे में नहीं जानता है।

दिन के अंत में मैं अपने कार्यों को कीबोर्ड शॉर्टकट का उपयोग करके विम के भीतर से कॉल करने में सक्षम होना चाहता हूं।

  1. मैं विम के बारे में ~/.bashrc कार्यों पता कैसे दे सकते हैं: इसलिए मेरे सवालों का इस प्रकार हैं?
  2. ~/.vimrc में ~/.bashrc में फ़ंक्शन के लिए मैं कीबोर्ड शॉर्टकट कैसे सेटअप करूं?

बहुत बहुत धन्यवाद।

+0

उस उत्तर ने मेरी समस्या हल की! मेरे दूसरे प्रश्न पर कुछ और गुगलिंग करेंगे। बहुत बहुत धन्यवाद! –

+0

'रबड़' स्थापित करने पर विचार किया जाता है जो एक स्वचालित संकलन प्रणाली है? 'रबड़-डी मुख्य' पीडीएफ 'main.tex' और सभी निर्भरताओं और ग्रंथसूची या अन्य संकलन चरणों के लिए स्वत: पता करने की जरूरतों को संकलित करेगा ... – Benoit

+0

देखें: http://stackoverflow.com/a/9014154/1040358 – kikuchiyo

उत्तर

4

विम में :!bash -c t2p का उपयोग करने का प्रयास करें। यदि आपका उपनाम इंटरैक्टिव शैल तक सीमित है तो -i ध्वज भी जोड़ें।

1

अपने .vimrc में set shell=bash\ --login जोड़ने का प्रयास करें।

वर्तमान फ़ाइल को कनवर्ट करने के लिए, :!tb2p % टाइप करें, % स्क्रिप्ट निष्पादित करते समय आपके लिए विम द्वारा विस्तारित किया जाएगा।

एक बार जब यह काम कर रहा है, तो आप पूरी प्रक्रिया भी तेजी से बनाने के लिए एक मानचित्रण जोड़ सकते हैं:

nnoremap <F12> :!tb2p %<CR> 
0

Vim रन -c तर्क है, जो खोल गैर-सहभागी और गैर लॉगिन बनाता है साथ bash आदेश, और जो स्टार्टअप फ़ाइलों को पढ़ने से गुजरता है।

आप इसे पर्यावरण चर के साथ ओवरराइड कर सकते हैं।

से आदमी पार्टी:

When bash is started non-interactively, to run a shell script, for example, it looks for the variable BASH_ENV 
    in the environment, expands its value if it appears there, and uses the expanded value as the name of a file to 
    read and execute. Bash behaves as if the following command were executed: 
      if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi 
    but the value of the PATH variable is not used to search for the file name. 

वैकल्पिक रूप से, vim ही लॉगिन के गोले के रूप में आदेश के गोले चलाने के लिए कहा जा सकता है। vim :help shell से हम निम्नलिखित हो:

    On Unix the command normally runs in a non-interactive 
        shell. If you want an interactive shell to be used 
        (to use aliases) set 'shellcmdflag' to "-ic". 
        For Win32 also see |:!start|. 
0

तुम हमेशा एक अलग फाइल में अपने कार्यों को परिभाषित करने और अपने पथ वातावरण चर में एक फ़ोल्डर में उस फ़ाइल डाल सकते हैं। मेरे मामले में मेरे निजी कार्यों कि मैं t2p के लिए ~/बिन

करने के लिए जाना आपके मामले में प्रयोग करेंगे: तो

#!/bin/bash 

# convert tex to pdf, no bib 
latex $1 && latex $1 && dvips $1 -o $1.ps && ps2pdf $1.ps && rm -f $1.dvi 

:

सामग्री के साथ ~/bin में एक फ़ाइल t2p बनाने ,

> chmod +x t2p 

सुनिश्चित करें कि ~/bin अपने रास्ते में है अपने ~/.bashrc में निम्नलिखित डालकर: फ़ाइल निष्पादन योग्य बनाने के

export PATH=${HOME}/bin:${PATH} 
संबंधित मुद्दे