ยับยั้งเอาต์พุตจาก vim autocomand


13

ฉันมีคำสั่งอัตโนมัติและกำหนดไว้ใน vimrc ของฉัน:

au BufWritePost * !./make.sh

สคริปต์make.shรวบรวม.texไฟล์ 3 ครั้งและฉันไม่ต้องการให้แสดงผลลัพธ์

มีวิธีระงับเอาต์พุตหรือไม่?

ฉันพยายามเพิ่มsilentหนึ่งบรรทัดก่อนauคำสั่ง แต่มันไม่ทำงาน ฉันก็ลองแบบนี้โดยไม่ประสบความสำเร็จ

คำตอบ:


20

เงียบควรจะไปก่อนไม่ก่อน!./make.sh auวางไว้silentก่อนauก็หมายความว่ามันจะลงทะเบียนอัตโนมัติและเงียบ ๆ ควรมีลักษณะเช่นนี้แทน:

au BufWritePost * silent! !./make.sh

ปัญหาหนึ่งในการเรียกใช้คำสั่งภายนอกเช่นนี้พร้อมกับ:silentคำสั่งคือหน้าจอไม่ได้วาดใหม่ทำให้คุณมีหน้าจอว่างเปล่า อย่างไรก็ตาม, vim มีคำสั่งที่วาดหน้าจอใหม่, ซึ่งสามารถใช้ได้ดังนี้:

au BufWritePost * silent! execute "!./make.sh >/dev/null 2>&1" | redraw!

เหตุผลที่ฉันต้องใช้ดำเนินการคำสั่งเป็นเพราะ:!คำสั่งที่ใช้ตัวอักษรใด ๆ ที่พบหลังจากที่มันซึ่งหมายความว่าฉันไม่สามารถเพียงแค่ทำเพราะทุบตีจะพยายามที่จะตีความตัวละครทุกหลังsilent! !./make.sh | redraw!!

หมายเหตุ

โปรดทราบว่า:silent!ละเว้นข้อความแสดงข้อผิดพลาด แต่:silentไม่ทำเช่นนั้น นอกจากนี้>/dev/null 2>&1ส่วนหนึ่งเปลี่ยนเส้นทางการส่งออกทั้งหมดของการ!./make.sh /dev/nullคุณสามารถอ่านเพิ่มเติมเกี่ยวกับ I / O เปลี่ยนเส้นทางในทุบตีที่นี่

หัวข้อความช่วยเหลือที่เกี่ยวข้อง

  • :help :execute
  • :help :silent
  • :help :!
  • :help :bar

คำสั่งที่สองทำงานแม้ว่ามันจะยังพิมพ์ออกมาบนหน้าจอ นอกจากนี้ฉันไม่จำเป็นต้องกด Enter เมื่อสคริปต์สิ้นสุดลงอีกต่อไปซึ่งถือว่าดี แต่ฉันสงสัยว่ามีวิธีใดที่จะระงับผลลัพธ์โดยสิ้นเชิงหรือไม่
Andre Herman Bezerra

1
แทนที่execute "!./make.sh"ด้วยexecute "!./make.sh >/dev/null 2>&1"ความช่วยเหลือหรือไม่ /dev/nullนี้จะเปลี่ยนเส้นทางการส่งออกทั้งหมดของคำสั่งที่จะ อ่านtldp.org/LDP/abs/html/io-redirection.htmlสำหรับข้อมูลเพิ่มเติมเกี่ยวกับการเปลี่ยนเส้นทางใน bash
EvergreenTree

ฉันควรจะคิดอย่างนั้น! มันได้ผล. ขอบคุณ!
Andre Herman Bezerra

7

คำตอบสำหรับคำถามโดยตรงของคุณคือ @EvergreenTree ที่โพสต์ อย่างไรก็ตามฉันรู้สึกว่าคุณขาดเครื่องมือ Vim builtin สำหรับการสร้าง / คอมไพล์ / รวบรวมโครงการ ส่วนใหญ่ที่สะดุดตา:makeและรายการแก้ไขด่วน

การใช้อะไร:makeทำให้เราได้?

การใช้:makeช่วยให้คุณสามารถรวบรวมข้อผิดพลาดของคุณในรายการที่เรียกว่ารายการ quickfix การใช้คำสั่งลัดคุณสามารถนำทางระหว่างข้อผิดพลาดในไฟล์ของคุณได้ดังนั้นคุณจะกระโดดไปทางที่คอมไพเลอร์บอกว่าข้อผิดพลาดนั้นคืออะไร (มีประโยชน์ใช่ไหม)

: แต่งหน้า

วิ่งจะทำให้รันโปรแกรมที่:make 'makeprg'จากนั้นแยกวิเคราะห์ผลลัพธ์ด้วย'errorformat'แล้วใส่แต่ละรายการลงในรายการโปรแกรมแก้ไขด่วน

โดยปกติ'makeprg'ค่าเริ่มต้นกับคำสั่งที่ทำงานmake Makefileอย่างไรก็ตามคุณสามารถเปลี่ยน'makeprg'ผ่าน:compilerคำสั่งหรือตั้งค่าโดยตรง

:makeนอกจากนี้คุณยังสามารถส่งผ่านข้อโต้แย้งพิเศษเพื่อ เช่น:make clean

หมายเหตุ: การเรียกใช้:makeมักจะแสดงผลลัพธ์ของคำสั่งที่ด้านล่างของหน้าจอพร้อมรับคำให้กด Enter เพียงกด Enter เนื่องจากเอาต์พุตทั้งหมดจะพร้อมใช้งานในรายการ quickfix คุณสามารถปราบปรามนี้ผ่านทางเช่น:silent:silent make

คำสั่งที่กำหนดเองทั่วไปสำหรับการทำแบบเงียบคือ:

command -nargs=* -bar Smake silent make <args> <bar> cwindow

รายการด่วน

หลังจากที่คุณเรียกใช้:makeรายการ quickfix จะเก็บผลลัพธ์ของคอมไพเลอร์

ใช้คำสั่งต่อไปนี้เพื่อนำทางรายการ quickfix

  • :copen เพื่อเปิดหน้าต่าง quickfix
  • :cclose เพื่อปิดหน้าต่างคำสั่งด่วน
  • :cnext/ :cprevเพื่อเลื่อนไปยังรายการถัดไป / ก่อนหน้า
  • :ccเพื่อพิมพ์ข้อผิดพลาดปัจจุบันที่ด้านล่างหรือ:cc 3แสดงข้อผิดพลาดเฉพาะในตัวอย่างนี้ 3

ส่วนตัวผมใช้ทิมสมเด็จพระสันตะปาปาไม่บอบช้ำปลั๊กอินที่จะนำทางรายการ QuickFIX

สิ่งที่เกี่ยวกับการทำงาน:makeโดยอัตโนมัติและเงียบ ๆ ?

คุณสามารถทำได้:autocmdเช่นเดียวกับที่คุณอยู่ที่ไหน

augroup auto_make
    autocmd!
    autocmd BufWritePost * silent make
    autocmd QuickFixCmdPost *make* cwindow
augroup END

เป็นโบนัสที่ฉันเพิ่มเข้ามาในการเปิดหน้าต่างคำสั่งด่วนผ่าน:cwindowหากมีข้อผิดพลาดเกิดขึ้น

หมายเหตุ: ควรมีความเฉพาะเจาะจงมากขึ้นกับรูปแบบไฟล์นั้นในBufWritePostautocmd เพื่อให้ไฟล์ที่ไม่เกี่ยวข้องไม่สร้างขึ้น

มีอีกมาก!

นี่ใช้เพียงบางส่วนของคำสั่ง builtin ของ Vim รวมถึง autocmd เพียงไม่กี่ตัวเพื่อโน้มน้าวใจ แน่นอนมีปลั๊กอินและเครื่องมือที่อาจช่วยคุณได้

  • Dispatch.vimสามารถใช้เพื่อรัน:makeงานแบบอะซิงโครนัส
  • ไวยากรณ์ของปลั๊กอินSyntasticจะตรวจสอบไฟล์หลังจาก:writeนั้น
  • Ale.vim (Asynchronous Lint Engine) เป็นปลั๊กอินสำหรับจัดทำ linting ใน NeoVim และ Vim 8 ในขณะที่คุณแก้ไขไฟล์ข้อความ
  • Unimpaired.vimทำให้การจัดการรายการ quickfix ทำได้ง่าย
  • Makefiles เก่าธรรมดา นอกจากคุณ./script.shจะมีความซับซ้อนมากคุณอาจต้องการตรวจสอบการใช้ สามารถขยายงานได้มากขึ้นในภายหลังและเป็นเครื่องมือสร้างทั่วไป
  • คุณสามารถใช้Vim Awesomeเพื่อค้นหาปลั๊กอินเพิ่มเติมที่อาจช่วยได้

ข้อสรุป

ส่วนตัวฉันรวม:makeและ Quickfix ในเวิร์กโฟลว์ของฉันเอง ฉันเชื่อว่าการบันทึกผลลัพธ์ของกระบวนการสร้างของคุณและการจับข้อผิดพลาดเพื่อให้คุ้มค่ากับการลงทุน เป็นโบนัสเพิ่มคุณอาจจะกลายเป็นความสะดวกสบายมากขึ้นกับรายการ QuickFIX และสามารถใช้รายการสำหรับการใช้งานอื่น ๆ :grepเช่น

สำหรับความช่วยเหลือเพิ่มเติมดู:

:h :make
:h quickfix
:h 'makeprg'
:h 'errorformat'
:h :compiler
:h :copen
:h :cwindow
:h :cnext
:h :cc

ฉันคิดถึง:makeตอนที่ฉันตอบคำถามนี้ แต่ฉันไม่ได้รวมไว้ มันเป็นความคิดที่ดีกว่าที่จะใช้ทำการรวบรวมก่อน
EvergreenTree

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