กวดวิชากล่าวว่าอดีตโหมดสำหรับการประมวลผลชุด เนื่องจากเป็นสิ่งที่น่ารำคาญมากกว่าเป็นเครื่องมือสำหรับฉันฉันต้องการดูตัวอย่างที่ใช้งานได้จริงบางอย่าง ใครใช้บ้าง ทำไม?
โหมด EX สำหรับการประมวลผลแบบแบตช์คืออะไร
กวดวิชากล่าวว่าอดีตโหมดสำหรับการประมวลผลชุด เนื่องจากเป็นสิ่งที่น่ารำคาญมากกว่าเป็นเครื่องมือสำหรับฉันฉันต้องการดูตัวอย่างที่ใช้งานได้จริงบางอย่าง ใครใช้บ้าง ทำไม?
โหมด EX สำหรับการประมวลผลแบบแบตช์คืออะไร
คำตอบ:
เสียงเรียกเข้าในโหมด Ex (หรือเรียกอีกอย่างว่าex
) จะมีประโยชน์เมื่อ:
การแก้ไขไฟล์แบบไม่โต้ตอบเป็นการใช้งานที่พบบ่อยที่สุดและผู้ใช้งานในลักษณะที่คล้ายกันsed
และawk
อย่างไรก็ตามพวกเขาเป็นแบบ stream มากขึ้น - พวกเขาอ่านไฟล์ไปข้างหน้าตั้งแต่ต้นจนจบในขณะที่vim
เป็น buffer-oriented ในไฟล์ตามที่คุณต้องการ การแสดงผลปกติของ vim ที่สองนั้นมีประสิทธิภาพมากกว่าการแสดงออกของ awk และ sed (ไม่ใช่การออกแบบให้ทำงานกับหลายบรรทัด) ตัวอย่างเช่น vim สามารถจับคู่ผ่านหลายบรรทัดและสนับสนุนการจับคู่ที่เป็นศูนย์
Ex เป็นตัวแก้ไข (ผู้กำกับโดยตรงของ vi) และในโหมด Vim - Ex emulate ex
(พวกเขายังคงใช้รหัสเดียวกัน) ดังนั้นจึงเป็นไปได้ที่จะได้รับโหมดคำสั่งex
จากภายใน vi และในทางกลับกัน มีโหมด Ex ( vim -e
) และโหมด Ex ที่ได้รับการปรับปรุงซึ่งอนุญาตให้ใช้คำสั่งขั้นสูงมากกว่าโหมด Ex ( vim -E
) ที่รองรับ ดู: ความแตกต่างระหว่างโหมด Ex และโหมด Ex ที่ปรับปรุงแล้วคืออะไร
Ex คือรากของตระกูลบรรณาธิการ: edit, ex and vi Ex เป็นชุดพิเศษที่มีส่วนขยายที่โดดเด่นที่สุดคือเป็นเครื่องมือแก้ไขการแสดงผล อดีต (1)
นี่คือตัวอย่างง่ายๆของการเปลี่ยน127
เป็นไฟล์128
ของคุณhosts
และพิมพ์ผลลัพธ์:
ex -s +%s/127/128/g +%p +q! /etc/hosts
เทียบเท่ากับ:
sed s/127/128/g /etc/hosts
สำหรับการแก้ปัญหาขั้นสูงเพิ่มเติมคุณอาจมีไฟล์ที่มีคำสั่ง vim และใช้มันโดยใช้วิธีแบบดั้งเดิมเพื่อเปลี่ยนเส้นทาง I / O:
echo :%s/127/128/g > cmds.vim
echo :%print >> cmds.vim
echo :%quit! >> cmds.vim
ex -s /etc/hosts < cmds.vim # The same as: vim -s cmds.vim /etc/hosts
คุณยังสามารถใช้ vim plugin เพื่อทำงานบางอย่าง
ตัวอย่างหนึ่งซับต่อไปนี้จะแปลงไฟล์ซอร์สโค้ดของคุณเป็น html โดยใช้หนึ่งในปลั๊กอินมาตรฐาน:
ex -s '+let g:html_no_progress=1' '+syntax on' '+set ft=c' '+runtime syntax/2html.vim' -cwqa my_code.c
มันจะสร้างไฟล์ html (พร้อมการเน้นไวยากรณ์) จากโค้ดของคุณ (เขียนเป็นภาษาที่รองรับ) ซึ่งพร้อมสำหรับการพิมพ์หรือเผยแพร่บนเว็บไซต์ของคุณ
หรือตัวอย่างสดจริงจากข้อกำหนดRPM :
vim -E -s Makefile <<-EOF
:%substitute/CFLAGS = -g$/CFLAGS =-fPIC -DPIC -g/
:%substitute/CFLAGS =$/CFLAGS =-fPIC -DPIC/
:%substitute/ADAFLAGS =$/ADAFLAGS =-fPIC -DPIC/
:update
:quit
EOF
สคริปต์ต่อไปนี้จะสร้างไฟล์ html ใหม่โดยการดาวน์โหลด html ของเว็บไซต์ตัวอย่างและแทนที่เนื้อหาด้วยตาราง 20x20 ที่สร้างขึ้นอัตโนมัติโดยมีตัวเลขสุ่มอยู่:
" table.vim
%!curl -s example.com
let @t='<table>'.repeat('<tr>'.repeat('<td>_</td>',20).'</tr>',20).'</table>'
/<body
norm!vitd"tP
%s/_/\=system('echo $RANDOM')/g
wq
การใช้งาน:
ex -s table.html < table.vim
สิ่งนี้จะทำงานบน * เหมือนระบบที่ติดตั้ง curl เพิ่ม
-V
เพื่อดูสคริปต์ที่ใช้งานอยู่
ตัวอย่างเพิ่มเติม:
ดูสิ่งนี้ด้วย:
Ex-Mode นั้นส่วนใหญ่ใช้สำหรับการทำงานแบบเดียวกันกับไฟล์จำนวนหนึ่ง
สมมติว่าคุณมี 25 ไฟล์. html ทั้งหมดที่มี:
<a href="/superuser//home.html"> ...
แทนที่จะเปิดแต่ละรายการคุณสามารถใช้โหมด Ex เพื่อเปลี่ยนทั้งหมดเป็นindex.html
:
vim -E -s bob.html <<-EOF
:%substitute/home.html/index.html/
:update
:quit
EOF
for file in *.html; do vim -es -c '%s/home\.html/index.html/g' -c wq "$file"; done
มากขึ้นจะ
ในฐานะที่เป็น 7.3 ล่าสุดซึ่งเป็นการสนับสนุนการเลิกทำแบบถาวรโหมด ex และรูปแบบอื่น ๆ ของการประมวลผลชุด vim นั้นเหนือกว่าวิธีการที่ไม่ใช่ vim อื่น ๆ เนื่องจากจะไม่ขัดขวางการยกเลิกประวัติ
การเพิ่ม: 'ถาวรเลิกทำ' หากเปิดใช้งานจะเก็บการเปลี่ยนแปลงทั้งหมดของไฟล์ (สูงสุดถึงขีด จำกัด ) ในประวัติการเลิกทำในช่วงการแก้ไขเป็นกลุ่ม หากไฟล์ถูกแก้ไขโดยโปรแกรมภายนอก vim จะรีเซ็ตประวัติเลิกทำเมื่อตรวจพบโดยการตรวจสอบว่ามีการเปลี่ยนแปลง vim -E จะอนุญาตให้คุณแบตช์แก้ไขไฟล์และการแก้ไขจะอยู่ในประวัติการเลิกทำ
นี่ไม่ได้ตอบคำถามของคุณเกี่ยวกับการประมวลผลแบทช์ แต่เป็นอีกวิธีหนึ่งที่จะอธิบายว่าโหมด Ex คืออะไร คุณรู้ว่าคุณกด:
เข้าสู่โหมดบรรทัดคำสั่งและป้อนคำสั่งได้อย่างไร โหมด Ex ยังช่วยให้คุณป้อนคำสั่งเดียวกันยกเว้น Vim ไม่ออกจากโหมด Ex หลังจากคุณป้อนคำสั่งมันยังคงอยู่ในโหมด Ex และคุณสามารถป้อนคำสั่งอื่นได้ ดังนั้นมันจึงคล้ายกับ REPL (อ่าน, ประเมิน, พิมพ์, วนรอบ) แต่ไม่มีการพิมพ์ (ดังนั้นแค่ REL ... ) ฉันจะกลับไปหาสาเหตุที่คุณอาจต้องการ REL แบบนั้นในภายหลัง นั่นคือเหตุผลที่เรียกว่าโหมด Ex ซึ่งช่วยให้คุณป้อนคำสั่ง Ex ซึ่งเป็นโหมดบรรทัดคำสั่งเดียวกันกับที่ทำคุณสามารถป้อนคำสั่ง Ex ได้ อีกวิธีในการอธิบายคือให้คุณป้อนและเรียกใช้งานโค้ด Vimscript / VimL ทันที Vimscript / VimL เป็นภาษาที่คุณสามารถใช้เพื่อเขียนปลั๊กอิน Vim นอกจากนี้ยังเป็นภาษาที่คุณใช้เพื่อเขียนไฟล์ config ของคุณ (น่าจะเป็น. vimrc) ใน เป็นภาษาที่คุณใช้เมื่อคุณป้อนคำสั่ง Ex จากโหมดบรรทัดคำสั่งหรือโหมด Ex ดังนั้นจากมุมมองดังกล่าว Ex-mode จึงถูกมองว่าเป็น VimL REL ทำไมคุณต้องการ VimL REL ด้วยเหตุผลเดียวกันที่ผู้คนชอบ REPLs สำหรับภาษาอื่น ๆ พวกเขาจะมีประโยชน์จริง ๆ สำหรับการดีบักรหัสหรือทดสอบภาษาเพื่อดูว่าสิ่งต่าง ๆ ทำงานอย่างไรโดยเฉพาะอย่างยิ่งถ้าคุณเขียนปลั๊กอินใน VimL หรือปรับแต่งไฟล์ปรับแต่งของคุณอย่างสูง (ซึ่งอาจหมายถึงว่าคุณละเมิดหลักการ SRP ปลั๊กอิน)
:!python
ฯลฯ