เสียงเรียกเข้าในโหมด Ex มีประโยชน์เมื่อ:
- คุณต้องการแก้ไขไฟล์หลายไฟล์แบบไม่โต้ตอบ (เป็นส่วนหนึ่งของสคริปต์)
- การเชื่อมต่อของคุณช้ามากหรือหน้าจอไม่ได้รับการอัพเดตหลังจากการกระทำของคุณ
- การแมปและตัวย่อถูกปิดใช้งาน
- ปุ่มทั่วไปเช่นEscapeหรือControlทำงานไม่ถูกต้อง
โดยทั่วไปvi
คือโหมดภาพสำหรับโหมดex
Vim Ex จึงเป็นเพียงการเลียนแบบex
(พวกเขายังคงใช้รหัสเดียวกัน) ดังนั้นจึงเป็นไปได้ที่จะเข้าสู่โหมดคำสั่งex
จากภายใน vi และในทางกลับกัน จริงๆแล้วมีสองโหมด: โหมด Ex ( vim -e
) และโหมด Ex ที่ได้รับการปรับปรุงซึ่งอนุญาตให้ใช้คำสั่งขั้นสูงมากกว่าโหมด Ex ( vim -E
) ที่รองรับ ดู: ความแตกต่างระหว่างโหมด Ex และโหมด Ex ที่ปรับปรุงแล้วคืออะไร
อดีตเป็นรากของครอบครัวของบรรณาธิการที่: edit
, และex
vi
Ex เป็นชุดed
พิเศษที่มีส่วนขยายที่โดดเด่นที่สุดคือเป็นเครื่องมือแก้ไขการแสดงผล อดีต (1)
การแก้ไขไฟล์แบบไม่โต้ตอบเป็นการใช้งานที่พบบ่อยที่สุดและผู้คนใช้งานในลักษณะที่คล้ายกันsed
และawk
อย่างไรก็ตามพวกเขาเป็นแบบสตรีมมากกว่า - พวกเขาอ่านไฟล์ไปข้างหน้าตั้งแต่ต้นจนจบ (ไม่ได้ออกแบบมาเพื่อทำงานกับหลายบรรทัด ) ในขณะที่vim
เป็นบัฟเฟอร์ - คุณสามารถเลื่อนไปข้างหน้าและข้างหลังในไฟล์ได้ตามที่คุณต้องการซึ่งทำให้มีประสิทธิภาพ
โดยทั่วไป:
sed
เป็นS tream ED itor ไม่ใช่ตัวแก้ไขไฟล์
อย่างไรก็ตามผู้คนดูเหมือนจะใช้มันในการแก้ไขไฟล์และความจริงก็คือว่ามันไม่ได้แก้ไขไฟล์ ตัวเลือกที่สองเช่น in-place ( -i
) เป็นส่วนเสริม FreeBSD ที่ไม่ได้มาตรฐานและอาจไม่มีในระบบปฏิบัติการอื่น ดังนั้นหากคุณต้องการที่จะหลีกเลี่ยงรหัส unportable, I / O ค่าใช้จ่ายและผลข้างเคียงที่ไม่ดี (เช่นทำลาย symlinks) คุณควรใช้ex
ซึ่งเป็นมาตรฐาน UNIX แก้ไขคำสั่งตาม (พร้อมด้วยed
) BashFAQ
สิ่งอื่น ๆ ที่ฉันพบว่ามีประโยชน์ในโหมด Ex คือใช้เป็นสนามเด็กเล่น (คล้ายกับpython
คอนโซล) ที่คุณสามารถรันคำสั่งมากมายในหนึ่งแถวทำงาน / แก้ไขจุดบกพร่องของนิพจน์ปกติตรวจสอบการกำหนดค่า vim เรียกใช้คำสั่งภายนอกหรือทำงานกับ .
ตัวอย่างเช่น:
let @d = '<td></td>'
let @r = '<tr>' . repeat(@d, 5) . '</tr>'
echo @r
let @t = '<table>' . repeat(@r, 5) . '</table>'
reg
ซึ่งจะง่ายกว่าในโหมด Ex กว่าในโหมดปกติ (ซึ่งคุณสามารถเห็นได้เฉพาะคำสั่งสุดท้ายของคุณ)
ประเพณีปฏิบัติ
ฉันเป็นชื่อแทนต่อไปนี้ในของฉัน.bash_aliases
:
alias trim="ex +'bufdo!%s/\s\+$//e' -scxa"
alias retab="ex +'set ts=2' +'bufdo retab' -scxa"
หมายเหตุ: การใช้bufdo
ไม่ใช่ex
วิธีที่สอดคล้องกับ POSIX (ตามคู่มือ ) ดังนั้นคุณสามารถลองใช้กับfind
แทนได้ !
จะใช้ในการบังคับให้เปลี่ยนบัฟเฟอร์โดยไม่บันทึก (มิฉะนั้นเตือนจะถูกสร้างขึ้น)
คนแรกที่ฉันใช้เพื่อตัดช่องว่างต่อท้ายในไฟล์ต้นฉบับทั้งหมดของฉันเช่น:
trim **/*.php
แท็บที่สองจะแปลงแท็บทั้งหมดเป็นช่องว่าง (เรียกซ้ำ) เช่น:
retab **/*.php
สำหรับผมใช้retab
เป็นพอ แต่มีข้อเสียบางอย่างที่อธิบายไว้ในที่นี่ เพิ่มพิเศษ-V
สำหรับเอาต์พุต verbosity ที่เพิ่มขึ้น
โปรดทราบว่าตัวอย่างข้างต้นโดยใช้ zsh / bash4 globbing ( **
) ดังนั้นตรวจสอบให้แน่ใจว่าเชลล์ของคุณรองรับและเปิดใช้งานแล้ว
สำหรับตัวอย่างที่ใช้งานได้จริง (เช่นการแยกไฟล์ html) ให้ตรวจสอบ:
เรียนรู้เพิ่มเติมเกี่ยวกับโหมด Ex ได้ที่:
Q
และq:
ค่อนข้างแตกต่าง คุณหมายถึงเท่านั้นQ
ใช่มั้ย