รวบรวมรหัสจากเป็นกลุ่ม


18

ใหม่vimและฉันต้องการรวบรวมโค้ดจากภายในvimโดยไม่ต้องเรียกใช้เทอร์มินัลใหม่และเรียกคอมไพเลอร์

ฉันจะทำสิ่งนี้ได้อย่างไร โปรดทราบว่าข้อกำหนดนี้ไม่ได้ จำกัดgccเฉพาะบางครั้งฉันต้องโทรหาpythonสคริปต์ปัจจุบันที่ฉันใช้งานด้วยเพื่อที่คุณจะได้รับแนวคิด ...

คำตอบ:


25

เขียนMakefileแล้วคุณสามารถ:

:make

จากภายในเป็นกลุ่ม และหากการรวบรวมล้มเหลว:

:copen

จะแสดงคำเตือนและข้อผิดพลาด การเลือกพวกเขาจะนำคุณไปยังไฟล์และบรรทัดที่เหมาะสม



6

หากคุณไม่ชอบ makefiles ด้วยเหตุผลบางอย่างคุณสามารถโทรสั่งอะไรก็ได้ด้วย:!

ตัวอย่างเช่นคุณสามารถใช้ ":! javac * .java && java Foo" เพื่อคอมไพล์และรันโปรแกรม java อย่างง่าย คุณยังสามารถเรียกระบบสร้างอื่น ๆ (scons, cmake, ... ) ด้วยวิธีนี้


3

ลองใช้ปลั๊กอินquickrunสำหรับ Vim หน้านี้มีลิงค์ไปยัง GitHub ซึ่งเป็นเวอร์ชั่นล่าสุดและเป็นสิ่งที่ฉันใช้

ข้อได้เปรียบในการใช้ปลั๊กอินนี้ตรงข้ามกับการทำ:!เอาต์พุตจากคำสั่งจะถูกรวบรวมและแสดงในหน้าต่างแยก

นอกจากนี้ตามค่าเริ่มต้นปลั๊กอินจะแขวนอินสแตนซ์ vim ของคุณเมื่อคุณขอให้รันคำสั่ง แต่สามารถกำหนดค่าให้เรียกใช้คำสั่งแบบอะซิงโครนัสซึ่งเป็นสิ่งที่ฉันทำ อ่านเอกสารสำหรับรายละเอียดเพิ่มเติม


3

ฉันใช้กลุ่มที่มีตัวแปลภาษาไพ ธ อน

ฉันแหล่งไฟล์หลามที่มีฟังก์ชั่นนี้:

def pyterm(filename="", interactive=1):
    cmd = "%s %s %s " % (PYTHON, "-i" if interactive else "", filename)
    if "DISPLAY" in os.environ:
        return run_config(os.environ.get("XTERM"), cmd)
    else:
        return os.system(cmd)

และแมปไปยังแป้นพิมพ์ลัด:

nmap ;ru :update<CR>:python pyterm(vim.current.buffer.name, 0)<CR>
nmap ;ri :update<CR>:python pyterm(vim.current.buffer.name, 1)<CR>

ก่อนหน้านี้ฉันได้ตั้งค่าตัวแปรสภาพแวดล้อมบางอย่างเพื่อกำหนดเทอร์มินัลที่แน่นอนให้ทำงานหากใช้ gvim หรือในเทอร์มินัลเดียวกันหากไม่ได้อยู่ใน X

จากนั้นฉันก็มักจะพิมพ์ '; ri' ในบัฟเฟอร์ Python เพื่อเรียกใช้ (โดยปกติเพื่อทดสอบ)


2

Vim สามารถใช้เพื่อคอมไพล์โดยใช้ gnu make บนไฟล์ปัจจุบัน - แม้ว่าจะไม่มี Makefile สำหรับไฟล์ (สำหรับรายละเอียดเพิ่มเติมดูที่นี่ ):

:make %:r

เสียงเรียกวิธีนี้ช่วยให้คุณสามารถเข้าถึงQuickFIXข้อเสนอแนะข้อผิดพลาดจากคอมไพเลอร์ ( :help quickfix) รายการ - :cnข้อผิดพลาดต่อไป:cpข้อผิดพลาดก่อนหน้า:cwหน้าต่างรายการข้อผิดพลาดใหม่

หากคุณไม่ได้รับ gnu คุณสามารถตั้งค่าตัวแปรmakeprg (เปลี่ยนเป็น g ++ หากคุณรวบรวม C ++):

:se makeprg=gcc\ -o\ %<\ %

จากนั้นใช้คำสั่ง vim make เพื่อรวบรวมไฟล์ปัจจุบันและรับรายการข้อผิดพลาดด่วนใน vim:

:make

แก้ไข: หากคุณต้องการรันไฟล์ประมวลผลที่คอมไพล์จากภายในกลุ่มคุณสามารถทำได้ ('!' execute, '%: r' คือชื่อไฟล์โดยไม่มีคำต่อท้าย):

:!./%:r

1

ในกรณีของ gcc, python และอื่น ๆ คุณสามารถเรียกมันด้วยโคลอนบาง (:!)

เช่น. :!python something.py


0
!gcc file.c && ./a.out

นี้จะรวบรวมไฟล์ C ของคุณเช่นเดียวกับการเรียกใช้ปฏิบัติการถามการป้อนข้อมูลทั้งหมดที่อยู่ในหน้าต่างของคุณ


1
คำตอบที่สมบูรณ์ยิ่งขึ้นจะรวมถึง ':' และเพื่อให้มีความหลากหลายมากขึ้นคุณสามารถเปลี่ยน 'file.c' สำหรับผู้ให้บริการไฟล์ปัจจุบัน '%'::!gcc % && ./a.out
Pierz

ฉันทำสิ่งที่คล้ายกันในของ.vimrcฉันฉันแผนที่Command + Shift + Rเพื่อ:map <D-R> :exe '!gcc %:p' <bar> exe '!'.getcwd().'/a.out'<cr>
f1lt3r

0

เกี่ยวกับกรณีเฉพาะของการรวบรวมซอร์สโค้ด

  • คำตอบสั้น ๆ : ดูคำตอบของ Chris: /unix//a/7825/3240
  • คำตอบที่ยาวและแม่นยำยิ่งขึ้น: นี่คือของฉันใน SO: /programming//a/21477312/15934

และถ้าคุณมีบางอย่างที่สามารถรวบรวมไพ ธmakeprgอนได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.