ฉันจะแก้ไขหลายไฟล์ใน VIM ได้อย่างไร


167

ฉันรู้ว่าฉันสามารถเปิดหลายไฟล์ด้วยvimการทำสิ่งที่ชอบvim 2011-12*.logแต่ฉันจะสลับระหว่างไฟล์และปิดไฟล์ทีละไฟล์ได้อย่างไร นอกจากนี้ฉันจะบอกชื่อไฟล์ของไฟล์ปัจจุบันที่ฉันแก้ไขได้อย่างไร


คำตอบ:


170

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

จุดเริ่มต้นที่ดีสำหรับคุณคือหัวข้อ

|usr_07.txt|  Editing more than one file

ตกลงไปที่คำตอบของคุณ

หลังจากเริ่มเป็นกลุ่มด้วยรายการไฟล์คุณสามารถย้ายไปยังไฟล์ถัดไปได้โดยการป้อน:nextหรือ:nสั้น ๆ :wnextสั้นสำหรับเขียนการเปลี่ยนแปลงปัจจุบันแล้วย้ายไปที่ไฟล์ถัดไป

นอกจากนี้ยังมีความคล้ายคลึง:previous, และ:wprevious :Next(โปรดสังเกตว่า:pเป็นชวเลข:print. ชวเลขสำหรับ:previousเป็น:prevหรือ:N.)

หากต้องการดูว่าคุณอยู่ที่ไหนในรายการไฟล์ให้ป้อน:argsและไฟล์ที่กำลังแก้ไขจะปรากฏใน[](เครื่องหมายวงเล็บ)

ตัวอย่าง:

vim foo.txt bar.txt
:args

ผลลัพธ์:

[foo.txt] bar.txt

24
: wn คือรูปแบบย่อของ: wnext
Kowh

นอกจากนี้คุณยังสามารถ: rew เพื่อกลับไปที่ไฟล์แรก : e # swaps ระหว่าง 2 ไฟล์ : n! ไปที่ไฟล์ถัดไปโดยไม่ต้องเขียน ดูเพิ่มเติมที่: ตั้งค่า autowrite
Sasquiha

4
ด้วยความเคารพต่อหลายบัฟเฟอร์ / windows / แท็บยังเห็น StackOverflow ของวิธีการทำงานอย่างมีประสิทธิภาพกับไฟล์หลายไฟล์ใน Vim? และการใช้แท็บเป็นกลุ่มเช่นบัฟเฟอร์
mmoya

1
ฉันพบบทที่ 22 "การค้นหาไฟล์เพื่อแก้ไข" มีประโยชน์มากเช่นกัน มันไปกว่าการใช้ไดเรกทอรีสำรวจเพื่อแก้ไขไฟล์ที่คุณต้องการ
Harry Moreno

: หนึ่งอันยอดเยี่ยม
rammayur

54

คุณสามารถเปิดไฟล์อื่นในขณะที่เสียงเรียกเข้าเปิดด้วย:tabe filenameและเพื่อสลับไปยังไฟล์อื่นที่คุณพิมพ์:tabnหรือ:tabpสำหรับไฟล์ถัดไปและก่อนหน้า

แป้นพิมพ์ลัดgTและgtยังสามารถใช้เพื่อสลับแท็บเมื่อคุณไม่ได้อยู่ในโหมดแก้ไข (เช่นไม่ได้อยู่ในการแทรกเปลี่ยนโหมด ฯลฯ ) ในบางระบบCtrl+ Alt+ Page UpและCtrl+ Alt+ Page Downยังอนุญาตให้สลับแท็บได้ด้วย แต่วิธีนี้ไม่ได้ผลเสมอไป (ตัวอย่างเช่นมันจะไม่ทำงานในเทอร์มินัล OS X 'ออกนอกกรอบ')

และคุณสามารถดูชื่อไฟล์ที่ด้านบนของแอพเสียงเรียกเข้า


16
นี้. เปิดไฟล์ในแท็บด้วย:vim -p file1 file2
ไม่ใช่ตอนนี้

ตะลึงพรึงเพริด! ฉันไม่เคยเจอเรื่องนี้มาก่อนแม้จะเคยใช้เสียงเรียกเข้ามานานหลายปี นี้จะเปลี่ยนทุกอย่าง
me_and

โปรดทราบว่าแท็บไม่ได้มีวัตถุประสงค์เพื่อทำงานกับหลายไฟล์ พวกเขามีความตั้งใจที่จะทำงานร่วมกับหลายรูปแบบ ดูบทความ
patryk.beza

5
นอกเหนือ: หากคุณอยู่ในกลุ่มแล้วและต้องการเพิ่มไฟล์อื่นคุณสามารถใช้: :argadd filenameแล้ว:nextไปที่ไฟล์นั้น ในทำนองเดียวกันคุณสามารถใช้:argdel filenameเพื่อลบไฟล์ใดไฟล์หนึ่งในการแก้ไข
Luv2code

36

คำสั่งเพื่อสลับระหว่างบัฟเฟอร์:

:bf            # Go to first file.
:bl            # Go to last file
:bn            # Go to next file.
:bp            # Go to previous file.
:bw            # Close file.

:help buffer เพื่อค้นหาข้อมูลเพิ่มเติม

หากต้องการทราบว่าการใช้ชื่อไฟล์Ctrl+ G, :fileหรือ:f


1
:bwปิดไฟล์ฮ่าฮ่า อย่าลืมอ่านความช่วยเหลือใน:bwที่ที่บอกว่าคุณควรใช้เฉพาะเมื่อคุณรู้ว่าคุณกำลังทำอะไรอยู่ มันไม่ได้เป็นเรื่องใหญ่ แต่ถ้าคุณต้องการที่จะเช็ดออกทั้งหมดของเครื่องหมายและข้อมูลเกี่ยวกับแฟ้มใช้ดีกว่า:bdหรือ:qเหมือนคนปกติ
ดีแลน

1
ข้อมูลเพิ่มเติมเกี่ยวกับ:bwกรณีที่คุณอยากรู้: vi.stackexchange.com/questions/2212/…
wisbucky

25

ตัวเลือกอื่นนอกเหนือจากคำตอบที่ได้รับคือการแบ่งหน้าต่างด้วย:

:sp
:vsp

:vspสำหรับการแบ่งแนวตั้ง จากนั้นใช้Ctrl+W <ARROW_KEYS>เพื่อย้ายในบานหน้าต่าง


4
คุณสามารถใช้:vsแทน:vsp
Khaja Minhajuddin

2
หรือแม้กระทั่งCtrl+W, vสำหรับการแยกในแนวตั้งและCtrl+W, sสำหรับการแยกในแนวนอน
Ruslan

1
ฉันใช้CTRL+Wมาหลายปีแล้วและเมื่อไม่นานมานี้ฉันได้ทำการแก้ไข VI จำนวนมากภายในหน้าเว็บ ทุกครั้งที่ฉันพิมพ์คำสั่งโดยไม่ได้คิดและแท็บเบราว์เซอร์ ... มันหายไปแล้ว! ฉันลืมไปเรื่อย ๆ ฉันต้องเรียนรู้ทางลัดใหม่จริงๆ
Jeach


10

ฉันถามคำถามที่คล้ายกันที่ superuser

"วิธีคัดลอกและวางระหว่าง bash windows และไฟล์ต่าง ๆ ที่เปิดด้วย VI"

คำตอบสำหรับคำถามของฉันคือคุณไม่สามารถทำได้ แต่คุณสามารถเปิดสองไฟล์ในหนึ่งหน้าต่างทุบตีโดยใช้:splitคำสั่งของ VIM :

  1. เปิดไฟล์ด้วย$ vim file1เปิดไฟล์ที่สองภายใน VIM โดยใช้:split file2คำสั่ง
  2. หรือใช้$ vim -o file1 file2จากการทุบตี
  3. สลับไปมาระหว่างไฟล์ - สลับไฟล์ที่ใช้งาน - ใน VIM ด้วยctrl- -w ctrlw
  4. ตัวอย่างการดำเนินการคือ copy (หรือ yank) ใน file1 yy, switch (3) แล้ววาง (หรือใส่) pเนื้อหาลงใน file2
  5. ทุกสิ่งทุกอย่างเป็นเรื่องปกติเมื่อหน้าต่างใดหน้าต่างหนึ่งทำงานดังนั้นจึง:qออกและ:q!บังคับให้ออก

ทุบตีของฉันเป็นสีดำและสีขาวดังนั้นชื่อไฟล์ของแต่ละหน้าจอมีการจัดรูปแบบเป็นบรรทัด 'เลือก' ย้อนกลับกับชื่อไฟล์ที่อ้างถึงที่นั่น

Woot!


6

ฉันพบวิธีที่สะดวกที่สุดในการแก้ไขไฟล์หลายไฟล์โดยใช้แท็บ คุณสามารถเปิดหลายไฟล์ในแท็บแยกผ่านบรรทัดคำสั่งดังนี้:

vim -p file1.txt file2.txt

หรือถ้าคุณเปิดเป็นกลุ่มอยู่แล้วคุณสามารถเปิดไฟล์ใหม่ในแท็บใหม่ดังนี้:

:tabe file2.txt

เมื่อคุณเปิดแท็บแล้วให้ใช้gtเพื่อดูแท็บถัดไปและgTเพื่อดูแท็บก่อนหน้า

คุณสามารถข้ามไปยังแท็บแรกด้วยแท็บ1gtที่สองด้วย2gtเป็นต้น

คุณสามารถปิดแท็บโดยใช้ :tabc

ในที่สุดคุณสามารถย้ายแท็บปัจจุบันไปยังnสถานที่ที่มีวัน:ntabmที่เป็นจำนวนใดมากกว่าหรือเท่ากับn0


6
argadd a/b c/d e/f

argadd ...จะเพิ่มไฟล์ทั้งหมดลงใน args และไปยัง:ls/ :buffersและอนุญาตให้คุณแก้ไขได้


ดู:h arglsit& :h argedit&:h argsd


นอกจากนี้คุณยังสามารถดำเนินการบางอย่างเฉพาะใน args ด้วย:argdo ...และคุณสามารถเริ่มต้นอีกครั้งกับ args :argsd*ของคุณโดยทำ


0

มีหลายวิธีที่จะทำเช่นนั้น คนแรกอาจจะสะดวกน้อยกว่าคือการโทรvimด้วยไฟล์ที่คุณต้องการแก้ไข - สร้าง:

vim first_file second_file ...

มันเรียกสองไฟล์ในสองบัฟเฟอร์ ที่จะเปลี่ยนจากไฟล์ไปยังอีกโปรดใช้และ:n :Nหากต้องการแสดงรายการไฟล์ที่คุณกำลังแก้ไข:argsจะทำงาน :help bufferจะช่วยคุณมากขึ้นในเรื่องนี้


สิ่งนี้ควรตอบคำถามของคุณ แต่นี่คือข้อมูลเพิ่มเติม:

ไม่มีทางที่จะแก้ไขไฟล์ของคุณในวิธีที่สะดวกมากขึ้นโดยการแยกคอนโซลหน้าจอของคุณโดยใช้เป็นเสียงเรียกเข้า การทำเช่นนี้เปิดสองเฟรมกับ:split( :sp) หรือ:vsplit( :vs) ในขณะที่ใช้เป็นกลุ่ม จากนั้นไปในกรอบเหล่านี้โดยใช้การรวมกันCtrl+ W> +Ctrl Wนอกจากนี้คุณยังสามารถใช้Ctrl+ W+ ลูกศรหรือคีย์ ( H, J, KหรือL) ที่สอดคล้องกับเฟรมถัดไป :e file_nameเมื่อเป็นเช่นนี้จะทำแก้ไขไฟล์ที่คุณต้องการด้วย :help opening-windowจะช่วยคุณมากขึ้นในเรื่องนี้

ตอนนี้หากคุณต้องการเห็นความแตกต่างระหว่างไฟล์ให้ใช้-dอาร์กิวเมนต์หรือเรียกโปรแกรมvimdiff (เหมือนกัน) กับไฟล์ที่เกี่ยวข้อง :help diffจะช่วยคุณมากขึ้นในเรื่องนี้

vim -d first_file second_file ...

โปรดแจ้งให้เราทราบหากคุณมีปัญหา


0

ฉันชอบใช้ split windows ทั้งแนวนอนและแนวตั้งเพื่อแก้ไขหลาย ๆ ไฟล์

ฉันใช้ tmux เพื่อจัดการหน้าต่างเหล่านั้นได้ง่ายขึ้น

https://tmux.github.io/ "เทอร์มินัลมัลติเพล็กเซอร์คืออะไรช่วยให้คุณสลับระหว่างโปรแกรมต่าง ๆ ในเทอร์มินัลหนึ่งได้อย่างง่ายดายแยกออกจากพวกเขา (พวกเขายังคงทำงานในพื้นหลัง) มากขึ้นดูคู่มือ "

ตัวอย่าง: ดูไฟล์หรือรันการทดสอบทางด้านขวาแก้ไขไฟล์ทดสอบและไฟล์ต้นฉบับทางซ้าย: ป้อนคำอธิบายรูปภาพที่นี่


0

:e #(filename) เพื่อสลับระหว่างไฟล์ที่เปิดสองไฟล์

:p สำหรับไฟล์ก่อนหน้า

:n สำหรับไฟล์ถัดไป


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