2015-07-29 9 views
19

के साथ एकाधिक आदेश/कार्य मेरे पास एक स्थानीय फ़ोल्डर है जिसे मैं एकाधिक छोटे नमूने और कोड के खिलौने के टुकड़ों के लिए स्क्रैच पैड के रूप में उपयोग करता हूं। मैं इस निर्देशिका में एक पाइथन, सी ++, खोल स्क्रिप्ट इत्यादि स्टोर करता हूं।विजुअल स्टूडियो कोड

मैं विजुअल स्टूडियो कोड (ओएस एक्स पर) का उपयोग कर रहा हूं और टर्मिनल पर स्विच किए बिना कोड स्निपेट को चलाने/संकलित करने के लिए its tasks देख रहा हूं।

उदाहरण के लिए, मुझे this following task वर्तमान में खुली फ़ाइल पर पायथन चलाएगा।

// A task runner that runs a python program 
{ 
    "version": "0.1.0", 
    "command": "/usr/bin/python", 
    "args": ["${file}"] 
} 

यह कार्य उस फ़ाइल के प्रकार के बावजूद पायथन को टास्क रनर के रूप में उपयोग करेगा जो मैं वर्तमान में संपादित कर रहा हूं।

फ़ाइल प्रकार (या एकाधिक आदेशों के बीच चयन) के आधार पर कमांड चलाने के लिए मैं कार्य को कैसे कार्यान्वित करूं? अर्थात। अगर मैं एक सी ++ फ़ाइल संपादित कर रहा हूं, तो यह क्लैंग ++ चलाएगा।

  • यदि मैं फ़ाइल प्रकार के आधार पर ऐसा नहीं कर सकता; क्या इसके लिए कोई विकल्प हैं?
  • एक विकल्प होगा; एकाधिक आदेश समर्थित हैं?

उत्तर

28

आप हमेशा अपने काम के धावक के रूप में पार्टी का उपयोग करें और फिर अपने कार्य के रूप में मनमाने ढंग से टर्मिनल आदेशों असाइन कर सकते हैं।

{ 
    "version": "0.1.0", 
    "command": "bash", 
    "isShellCommand": true, 
    "showOutput": "always", 
    "args": [ 
     "-c" 
    ], 
    "tasks": [ 
     { 
      "taskName": "My First Command", 
      "suppressTaskName": true, 
      "isBuildCommand": true, 
      "args": ["echo cmd1"] 
     }, 
     { 
      "taskName": "My Command Requiring .bash_profile", 
      "suppressTaskName": true, 
      "args": ["source ~/.bash_profile && echo cmd2"] 
     }, 
     { 
      "taskName": "My Python task", 
      "suppressTaskName": true, 
      "args": ["/usr/bin/python ${file}"] 
     } 
    ] 
} 

यहाँ क्या हो रहा है पर कुछ नोट:

  • कमान की args सूची में डाल कर सभी कार्यों के लिए बैश -c का उपयोग करना है, ताकि हम मनमाने ढंग से कमांड चलाने कर सकते हैं। echo कथन केवल उदाहरण हैं लेकिन आपके बैश टर्मिनल से कुछ भी निष्पादन योग्य हो सकता है।
  • args सरणी में bash -c पर पारित होने वाली एक स्ट्रिंग होगी (अलग-अलग आइटम को बैश कमांड के लिए कई तर्क के रूप में माना जाएगा और -c तर्क से जुड़े कमांड नहीं)।
  • suppressTaskNametaskName मिश्रण से बाहर रखने के लिए इस्तेमाल किया जा रहा है
  • दूसरा आदेश से पता चलता है कि आप अपने ~/.bash_profile लोड कर सकते हैं आप कुछ भी है कि यह इस तरह के उपनाम, env चर के रूप में प्रदान करता है की जरूरत है, जो कुछ भी
  • तीसरा आदेश कैसे पता चलता है, तो आप अपने अजगर आदेश आप

यह उल्लेख आप फाइल एक्सटेंशन का पता लगाने के किसी भी प्रकार नहीं देंगे इस्तेमाल कर सकते हैं, लेकिन आप कम से कम उपयोग कर सकते हैं cmd + पी तो पाने के लिए टाइप करें "कार्य" आपके कार्यों की एक सूची। तुम हमेशा उन्हें + टी क्रमशः के माध्यम से cmd + पारी + या cmd + पारी को चलाने के लिए isBuildCommand और isTestCommand के साथ अपने 2 सबसे आम आदेशों चिह्नित कर सकते हैं।

This answer में कुछ उपयोगी जानकारी है जो आपके लिए उपयोगी भी हो सकती है।

+0

मैं इस पर वापस आ गया हूं और मुझे वास्तव में कमांड धावक के रूप में 'bash -c' का उपयोग करने का विचार पसंद है। यह मुझे काफी अच्छी तरह से उपयुक्त बनाता है। – Niall

+0

मैंने एक सरल सी ++ प्रोग्राम संकलित करने के लिए उपर्युक्त उल्लेख का एक संस्करण बनाया है। दुर्भाग्य से मैं इसे एक टिप्पणी में पेस्ट नहीं कर सकता।हालांकि मुझे पता है कि कार्य का आउटपुट आउटपुट फलक में नहीं दिखाया गया है। उदाहरण के लिए यदि मेरा कार्य "bash -c helloworld" निष्पादित करता है तो आउटपुट फलक में कोई "हैलो वर्ल्ड" दिखाई नहीं दे रहा है। यह पता लगाने की कोशिश कर रहा है कि अभी यह कैसे करें। – andrea

+0

और यही वह है जिसे मैंने समझाया: https://github.com/ataiya/hellovsc किसी कारण से नोटिस मैं कंप्यूटर/रन आउटपुट _only_ देख सकता हूं जब मैं "echoCommand" करता हूं: झूठी, जो विशेष रूप से काउंटर- सहज ज्ञान युक्त! यह भी बहुत भयानक है कि आपको कोई जानकारी नहीं है जब कार्य निष्पादित हो गया है। – andrea

-1

आप python के बजाय स्वयं लिखित स्क्रिप्ट फ़ाइल चला सकते हैं। स्क्रिप्ट फ़ाइल में आप python, clang या whatever पर कॉल करने के लिए फ़ाइल एक्सटेंशन निकालते हैं।

तो अपने कार्य फ़ाइल इस

// A task runner that runs a program 
{ 
    "version": "0.1.0", 
    "command": "${workspaceRoot}\\runProgram.sh" 
    "args": ["${file}"] 
} 
6

इस उत्तर मूल रूप से एक अधिक जटिल समाधान करने के उद्देश्य से किया गया था की तरह लग रहे हैं, लेकिन उसे स्वीकार जवाब में प्रस्तुत के रूप में सरल खोल धावक कार्य प्रारूप अधिक उपयोगी साबित कर दिया। जो दिखता है उसके लिए नीचे देखें।


यहाँ सीमा यह है कि वी.एस. कोड दिए गए कार्यक्षेत्र के लिए एक उच्च स्तर का निर्माण कार्य/आदेश तक ही सीमित रहा है। एकाधिक उप-कार्यों की अनुमति है, लेकिन वे शीर्ष स्तर "कमांड" का उपयोग करने के लिए सीमित हैं लेकिन विभिन्न "तर्क" प्रदान कर सकते हैं। यह ऐसे वातावरण के लिए उपयुक्त होगा जो बनाने, एंटी या एमएसबिल्ड जैसी बिल्ड सिस्टम का उपयोग करता है। उदा .;

{ 
    "version": "0.1.0", 
    "command": "make", // command must appear here 
    "tasks" : [ 
     { 
      "taskName": "clean", 
      "suppressTaskName": false, // false by default 
      //"command": "somethingelse", // not valid here 
      "args": ["${file}"] // if required 
     }, 
     { 
      "taskName": "install" 
      // ... 
     } 
    ] 
} 

दो विकल्प उपलब्ध हैं;

  • संकलन/निष्पादन को पूरी तरह से task.json में दिए गए तर्कों को चलाने के लिए एक कस्टम स्क्रिप्ट प्रयास है।

    -- the shell file would be a simple 
    "[email protected]" # run what I get 
    -- the tasks.json 
    "args": ["clang++", "-std=c++14", "-O2", "${file}"] 
    

    चलाने के लिए exectuable हो रही है (./a.out) अधिक प्रयास था। बस इसे एक तर्क के रूप में जोड़ना काम नहीं करता था, अगर वहां था तो शेल स्क्रिप्ट को इसे निष्पादित करने की आवश्यकता थी।

  • फाइल एक्सटेंशन और फ़ाइल नाम के बाद स्विचिंग को आउटपुट के आउटपुट को निष्पादित करना और कस्टम स्क्रिप्ट में निष्पादन करना। यह लागू करने के लिए आसान साबित हुआ और खोल स्क्रिप्ट में अधिक नियंत्रण की पेशकश की।

    { 
        "version": "0.1.0", 
        "isShellCommand": true, 
        "taskName": "generic build", 
        "showOutput": "always", 
        "args": ["${fileExtname}", "${file}"] 
        "command": "./.vscode/compileme.sh", // expected in the "local settings" folder 
        //"command": "~/compileme.sh", // if in HOME folder 
    } 
    

    और खोल स्क्रिप्ट, संकलन।श;

    #!/bin/sh 
    # basic error checking not shown... 
    echo "compilation being executed with the arguments;" 
    echo "[email protected]" 
    filetype=$1 
    file=$2 
    if [ $filetype = ".cpp" -o $filetype = ".cxx" ] ; then 
        clang++ -std=c++14 -Wall -Wextra -pedantic -pthread $file && ./a.out 
    elif [ $filetype = ".c" ] 
        then 
        clang -std=c11 -Wall -Wextra -pedantic -pthread $file && ./a.out 
    elif [ $filetype = ".sh" ] 
        then 
        $file 
    elif [ $filetype = ".py" ] 
        then 
        python $file 
    else 
        echo "file type not supported..." 
        exit 1 
    fi 
    

विकल्प ऊपर सूचीबद्ध को देखते हुए, दूसरा विकल्प बेहतर है। यह कार्यान्वयन ओएस एक्स पर काम करता है, लेकिन इसे आसानी से लिनक्स और विंडोज़ में आसानी से पोर्ट किया जा सकता है। मैं इस पर नजर रखूंगा और वीएस कोड बिल्ड कार्यों में परिवर्तनों को ट्रैक करने का प्रयास करूंगा, फाइल आधारित बिल्ड या एकाधिक कमांड के लिए समर्थन एक स्वागत अतिरिक्त हो सकता है।


मेरा tasks.json कुछ धावकों का समर्थन करता है, और निर्माण के लिए एक डिफ़ॉल्ट जो एक अनुस्मारक के रूप में संदेश प्रिंट करता है। यह धावक के रूप में खोल का उपयोग करता है और अब की तरह दिखता है ...

{ 
    "version": "0.1.0", 
    "isShellCommand": true, 
    "taskName": "GenericBuild", 
    "showOutput": "always", 
    "command": "sh", 
    "suppressTaskName": false, 
    "args": ["-c"], 
    "tasks": [ 
     { 
      "taskName": "no build", 
      "suppressTaskName": true, 
      "isBuildCommand": true, 
      "args": [ 
       "echo There is no default build task, run a task by name..." 
      ] 
     }, 
     { 
      "taskName": "cpp", 
      "suppressTaskName": true, 
      "args": [ 
       "clang++ -std=c++14 -Wall -Wextra -pedantic -pthread \"${file}\" && ./a.out" 
      ] 
     }, 
     { 
      "taskName": "shell", 
      "suppressTaskName": true, 
      "args": [ 
       "\"${file}\"" 
      ] 
     }, 
     { 
      "taskName": "python", 
      "suppressTaskName": true, 
      "args": [ 
       "python \"${file}\"" 
      ] 
     }, 
     { 
      "taskName": "c", 
      "suppressTaskName": true, 
      "args": [ 
       "clang -std=c11 -Wall -Wextra -pedantic -pthread \"${file}\" && ./a.out" 
      ] 
     } 
    ] 
} 
-1

मैंने यह स्क्रिप्ट बनाई है। अपने पर्यावरण में पायथन आईडीएल स्थापित करने की आवश्यकता है। यह आईडीएल खोल देगा और जब भी आप अपना कार्य चलाते हैं तो अपनी पायथन फ़ाइल चलाएं (CTRL + Shift + B)।

{ 
    "version": "0.1.0", 

    "command": "/usr/bin/idle", 

    "isShellCommand": false, 

    "showOutput": "never", 

    "args": ["-r","${file}"] 

} 
+0

आप IDLE को बंद करने के लिए CTRL + D का उपयोग कर सकते हैं – MrAlex6204

संबंधित मुद्दे