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ยังคงเป็นเรื่องที่แตกต่าง - บางทีคุณอาจไม่ต้องการเขียนถึงบัฟเฟอร์ที่ไม่ได้อยู่ในรายการอาร์กิวเมนต์ของคุณ