StripWhitespace
สมมติว่าผมมีฟังก์ชั่นการตั้งชื่อ
:StripWhitespace
ฉันสามารถทำงานบนไฟล์เดียวโดยการเปิดไฟล์และทำงาน
ฉันจะเรียกใช้ฟังก์ชั่นนั้นกับโฟลเดอร์ของไฟล์โดยอัตโนมัติและบันทึกผลลัพธ์เมื่อฉันไปได้อย่างไร
StripWhitespace
สมมติว่าผมมีฟังก์ชั่นการตั้งชื่อ
:StripWhitespace
ฉันสามารถทำงานบนไฟล์เดียวโดยการเปิดไฟล์และทำงาน
ฉันจะเรียกใช้ฟังก์ชั่นนั้นกับโฟลเดอร์ของไฟล์โดยอัตโนมัติและบันทึกผลลัพธ์เมื่อฉันไปได้อย่างไร
คำตอบ:
คุณสามารถใช้-c
อาร์กิวเมนต์เพื่อเรียกใช้คำสั่งเมื่อเริ่มต้นจากvim(1)
:
-c {command}
{command} will be executed after the first file has been
read. {command} is interpreted as an Ex command. If the
{command} contains spaces it must be enclosed in double
quotes (this depends on the shell that is used). Example:
Vim "+set si" main.c
Note: You can use up to 10 "+" or "-c" commands.
ตัวอย่าง:
vim -c ':call StripWhitespace()' file1 file2
หากต้องการออกหลังจากนั้นให้เพิ่ม| :wqa
:
vim -c ':call StripWhitespace() | :wqa' file1 file2
หากคุณอยู่ใน Vim อยู่แล้วคุณสามารถใช้คำสั่ง:argdo
หรือ:bufdo
คำสั่งเพื่อรันคำสั่งในทุกรายการในรายการอาร์กิวเมนต์หรือรายการบัฟเฟอร์ตามลำดับ
เช่นเรียกใช้:
คำสั่งในทุกไฟล์ในรายการอาร์กิวเมนต์:
:argdo StripWhitespace
หรือเรียกใช้ฟังก์ชันจากทุกไฟล์ในรายการบัฟเฟอร์:
:bufdo call StripWhitespace()
หรือเรียกใช้แมโครq
ในทุกไฟล์ในรายการอาร์กิวเมนต์:
:argdo normal @q
แล้วบันทึกบัฟเฟอร์การเปลี่ยนแปลงทั้งหมดที่มีคุณสามารถหรือบันทึกทั้งหมดและเลิกเป็นกลุ่มที่มี:wall
:wqall
หากคุณต้องการเขียนไฟล์ตามที่คุณไปคุณสามารถเพิ่มในการโทรไป:update
เช่น:
:argdo s/foo/bar/ge | update
มีหลายวิธีที่คุณสามารถนำไฟล์เข้า Vim ได้ในครั้งแรก ได้แก่ :
vim *
(สิ่งนี้จะเพิ่มไฟล์ทั้งหมดลงในรายการอาร์กิวเมนต์):args
คำสั่ง (ซึ่งรองรับไวด์การ์ดและนิพจน์ backtick) เพื่อเติมรายการอาร์กิวเมนต์หรือ:argadd
คำสั่งเพื่อเพิ่มไฟล์ลงไป:e
, :Ex
หรือปลั๊กอินไฟล์เปิด'hidden'
มีการตั้งค่า; (2) : update
คำสั่งเป็นการปรับปรุงเล็กน้อย:w
เพราะจะเขียนเฉพาะเมื่อมีการเปลี่ยนแปลงดังนั้น:bufdo update
หรือ:argdo update
จะเขียนบัฟเฟอร์หรืออาร์กิวเมนต์ที่ปรับเปลี่ยนทั้งหมด
update
จุดที่ดีใน ฉันคิดว่าพูดถึงhidden
ตอนที่ฉันเขียนคำตอบ แต่ก็ตัดสินใจเพราะฉันไม่ต้องการที่จะพูดให้เข้าใจง่ายเกินไป ในการไตร่ตรองแม้ว่ามันควรจะอยู่ในนั้น ฉันจะอัปเดตคำตอบเพื่อรวมทั้งข้อเสนอแนะในปัจจุบัน
:wall
ซึ่งยังมีข้อได้เปรียบของการไม่ขี่ผ่านบัฟเฟอร์และย้ายคุณออกไปจากที่ที่คุณเริ่ม ฉันคิดว่า:argdo update
ยังคงเป็นเรื่องที่แตกต่าง - บางทีคุณอาจไม่ต้องการเขียนถึงบัฟเฟอร์ที่ไม่ได้อยู่ในรายการอาร์กิวเมนต์ของคุณ