ฉันจะเปิดไฟล์หลายไฟล์พร้อมกันใน Vim ได้อย่างไร


87

มีวิธีเปิดไฟล์ทั้งหมดในไดเร็กทอรีจากภายใน Vim หรือไม่? ดังนั้น:commandการที่จะบอกว่ามีผลในการ "เปิดไฟล์ทั้งหมดที่อยู่ภายใต้การ/some/pathเข้าบัฟเฟอร์"

เป็นการดีที่จะเปิดไฟล์ทั้งหมดภายใต้ dir แบบวนซ้ำ

คำตอบ:


105

คำสั่งที่คุณกำลังมองหาคือ args:

ตัวอย่างเช่น:

:args /path_to_dir/*

จะเปิดไฟล์ทั้งหมดในไดเร็กทอรี


32
ใช้**เพื่อจับคู่ไฟล์แบบวนซ้ำ เช่น:args /path_to_dir/**
daf

1
หากต้องการเปิดไฟล์ที่ไม่มีนามสกุลให้ระบุไดเร็กทอรีหลักเช่น args ** /. hg / hgrc ทำงานได้ แต่ ** / hgrc ไม่ทำงาน
79E09796

11
เมื่อเปิดไฟล์แล้วให้ใช้:tab allเพื่อวางไว้ในแต่ละแท็บ
Backlin

"ไฟล์ทั้งหมด" จะมีไดเร็กทอรีย่อยซึ่งอาจไม่ต้องการ (ข้อผิดพลาดเป็นกลุ่มของฉัน"/path_to_dir/subdir/" Illegal file name) วิธีแก้ปัญหาอย่างรวดเร็วคือเรียกใช้คำสั่งที่สองargd */เพื่อลบสิ่งเหล่านั้นออกจากรายการอีกครั้ง
lessthanideal

จะเป็นการดีมากที่จะตอบคำตอบพร้อมคำแนะนำต่อไปนี้ตามแนวทางปฏิบัติที่ดีและเพื่อแสดงวิธีใช้ชุดคำสั่งเดียวกันกับไฟล์ทั้งหมดที่เปิดไว้คุณสามารถดำเนินการคำสั่งต่อไปนี้เพื่อใช้คำสั่งทั้งหมด อยู่ในไฟล์ my_commands_batch.vim:argdo source my_commands_batch.vim
aturegano

21

เหตุใดจึงใช้งานไม่ได้หากฉันต้องการเปิดไฟล์ทั้งหมดที่ลงท้ายด้วยนามสกุลที่แน่นอน ฉันเหนื่อย

:n ./**.cs

และเปิดเฉพาะไฟล์ในไดเร็กทอรีปัจจุบัน

ฉันพบคำตอบรหัสที่ถูกต้องคือ :n **/*.cs

สำหรับข้อมูลเพิ่มเติม :h find


9

คุณลอง

:n /some/path/*

มันจะเปิดไฟล์ทั้งหมดใน / some / path

ฉันไม่คิดว่ามันจะเปิดไฟล์ซ้ำ ๆ

แก้ไข

บางทีการใช้ ** จะเปิดซ้ำตามที่กล่าวถึง daf


n หมายถึงอะไร? การมองเป็นกลุ่มช่วยชี้ให้ฉัน "ทำซ้ำรูปแบบสุดท้าย" เท่านั้น .. ซึ่งฉันเข้าใจว่าเป็นการกดแป้นพิมพ์ มีวิธีรับความช่วยเหลือสำหรับโหมดคำสั่งเท่านั้นหรือไม่?
U0001

1
ง่ายเกินไป: h: n .. ขอความช่วยเหลือสำหรับ ": n" ฉันไม่ชอบตอบคำถามของตัวเอง;)
U0001

4

วิธีการที่ไม่ต้องวุ่นวายargsคือใส่รายชื่อไฟล์ในไฟล์ข้อความจากนั้นใช้:soคำสั่งเพื่อเรียกใช้คำสั่งในไฟล์นั้น

ตัวอย่างเช่นหากคุณต้องการเปิดไฟล์ทั้งหมดที่ลงท้าย.phpด้วยไดเร็กทอรีที่กำหนดก่อนอื่นให้สร้างfiles.txtรายการไฟล์ที่มีคำสั่งที่คุณต้องการใช้เปิด

sp alpha.php
sp bravo.php
sp charlie.php

จากนั้นภายในกลุ่ม:

:so files.txt

หากรายการไฟล์มีขนาดใหญ่การสร้างfiles.txtไฟล์อย่างรวดเร็วก็เป็นเรื่องเล็กน้อยโดยเปลี่ยนเส้นทางเอาต์พุตlsไปยังไฟล์จากนั้นใช้มาโครเป็นกลุ่มเพื่อนำspหน้าชื่อไฟล์แต่ละชื่อ

เห็นได้ชัดว่าสิ่งนี้ไม่สวยงามเหมือนกับการใช้ไฟล์ argsargdoคำสั่งand แต่คำสั่งเหล่านั้นก็ซับซ้อนกว่ามากเช่นกัน

นอกจากนี้ยังอาจมีวิธีดำเนินการด้วยคำสั่งเดียวในบรรทัดคำสั่ง แต่หลังจากผ่านไป 16 ปีฉันก็ยังพบว่าการเขียนโปรแกรมเป็นกลุ่มนั้นแปลกและเป็นความลับ


น่าสนใจ! ดูเหมือนจะเป็นวิธีที่ดีในการควบคุมว่าจะต้องเปิดไฟล์ใดแทนที่จะเปิดไฟล์ทั้งหมดของไดเร็กทอรีที่กำหนดแบบสุ่มสี่สุ่มห้าหากไฟล์เหล่านี้ไม่จำเป็นต้องใช้ทั้งหมด
อัด 2208

1

อีกวิธีในการเปิดไฟล์แบบวนซ้ำ

find . -type f -exec vi {} \;

4
ไม่เป็นไปตามข้อ จำกัด “ from within Vim”
ZyX

และยังทำในสิ่งที่จำเป็น :)
โกง -

3
มันไม่ใช่. สิ่งที่ต้องการคือไฟล์จากไดเรกทอรีที่กำหนดซ้ำจากภายในกลุ่ม หากคุณทิ้งเงื่อนไขไปคุณอาจพูดได้เช่นกันว่าkate **/*(^/)(โดยใช้ zsh globbing syntax) ทำสิ่งที่จำเป็น: เปิดไฟล์จากไดเร็กทอรีที่กำหนดแบบวนซ้ำ ไม่ใช่ "จากภายใน" และไม่ได้ใช้กลุ่มเลย แต่ "ยังทำในสิ่งที่จำเป็น" หรือแม้แต่kate ~/.vimrc ~/.bashrc. การละเว้น "from withing", "จากไดเร็กทอรีที่กำหนด" และ "เรียกซ้ำ" ทั้งหมด แต่ "ยังทำในสิ่งที่จำเป็น": เปิดไฟล์
ZyX

ซึ่งจะเปิดทีละไฟล์
พอล

1

หากคุณต้องการเพิ่มในรายการอาร์กิวเมนต์

:arga what_you-d_like_to_add

ดู

:he arga

จาก / ในกลุ่มสำหรับข้อมูลเพิ่มเติม

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.