โหมด EX สำหรับการประมวลผลแบบแบตช์คืออะไร


20

กวดวิชากล่าวว่าอดีตโหมดสำหรับการประมวลผลชุด เนื่องจากเป็นสิ่งที่น่ารำคาญมากกว่าเป็นเครื่องมือสำหรับฉันฉันต้องการดูตัวอย่างที่ใช้งานได้จริงบางอย่าง ใครใช้บ้าง ทำไม?

โหมด EX สำหรับการประมวลผลแบบแบตช์คืออะไร


@Masi: เชื่อมโยงบัญชีของคุณดังนั้นโพสต์ที่ย้ายข้อมูลจะเชื่อมโยงกับบัญชี SU ของคุณหลังจากย้ายข้อมูล
Greg Hewgill

คำตอบ:


4

เสียงเรียกเข้าในโหมด Ex (หรือเรียกอีกอย่างว่าex) จะมีประโยชน์เมื่อ:

  • คุณต้องการแก้ไขไฟล์หลายไฟล์แบบไม่โต้ตอบ (เป็นส่วนหนึ่งของสคริปต์)
  • การเชื่อมต่อของคุณช้ามากหรือหน้าจอไม่ได้รับการอัพเดตหลังจากการกระทำของคุณ
  • การแมปและตัวย่อถูกปิดใช้งาน
  • ปุ่มทั่วไปเช่นEscapeหรือControlทำงานไม่ถูกต้อง

การแก้ไขไฟล์แบบไม่โต้ตอบเป็นการใช้งานที่พบบ่อยที่สุดและผู้ใช้งานในลักษณะที่คล้ายกัน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)


ตัวอย่างที่ 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

ตัวอย่างที่ 2

คุณยังสามารถใช้ 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 (พร้อมการเน้นไวยากรณ์) จากโค้ดของคุณ (เขียนเป็นภาษาที่รองรับ) ซึ่งพร้อมสำหรับการพิมพ์หรือเผยแพร่บนเว็บไซต์ของคุณ


ตัวอย่างที่ 3

หรือตัวอย่างสดจริงจากข้อกำหนด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

ตัวอย่างที่ 4

สคริปต์ต่อไปนี้จะสร้างไฟล์ 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เพื่อดูสคริปต์ที่ใช้งานอยู่

ตัวอย่างเพิ่มเติม:


ดูสิ่งนี้ด้วย:


22

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

7
การดำเนินเต็มรูปแบบและอื่น terse- for file in *.html; do vim -es -c '%s/home\.html/index.html/g' -c wq "$file"; doneมากขึ้นจะ
intuited

6

ในฐานะที่เป็น 7.3 ล่าสุดซึ่งเป็นการสนับสนุนการเลิกทำแบบถาวรโหมด ex และรูปแบบอื่น ๆ ของการประมวลผลชุด vim นั้นเหนือกว่าวิธีการที่ไม่ใช่ vim อื่น ๆ เนื่องจากจะไม่ขัดขวางการยกเลิกประวัติ

การเพิ่ม: 'ถาวรเลิกทำ' หากเปิดใช้งานจะเก็บการเปลี่ยนแปลงทั้งหมดของไฟล์ (สูงสุดถึงขีด จำกัด ) ในประวัติการเลิกทำในช่วงการแก้ไขเป็นกลุ่ม หากไฟล์ถูกแก้ไขโดยโปรแกรมภายนอก vim จะรีเซ็ตประวัติเลิกทำเมื่อตรวจพบโดยการตรวจสอบว่ามีการเปลี่ยนแปลง vim -E จะอนุญาตให้คุณแบตช์แก้ไขไฟล์และการแก้ไขจะอยู่ในประวัติการเลิกทำ


2
มันดูค่อนข้างไกล แต่ก็สมเหตุสมผลและฉลาด! +1
Tarrasch

1

นี่ไม่ได้ตอบคำถามของคุณเกี่ยวกับการประมวลผลแบทช์ แต่เป็นอีกวิธีหนึ่งที่จะอธิบายว่าโหมด 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 ปลั๊กอิน)


จะเป็นการดีถ้าคุณได้รับตัวอย่างจากวิดีโอเพื่อแสดงให้เห็นถึงประโยชน์ของโหมดอดีต ฉันไม่เคยรู้ว่ามันเพราะผมสามารถใช้จัดการหน้าต่าง Linux และเสียงเรียกเข้าโหมดภาพกับ:!pythonฯลฯ
LéoLéopoldเฮิรตซ์ 준 영
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.