ฉันจะเปิดหลายแท็บพร้อมกันได้อย่างไร


14

ถ้าฉันใช้:

:tabedit file1 file2

ฉันเข้าใจ:

E172: Only one file name allowed

มีวิธีใช้:tabeditกับชื่อไฟล์หลายชื่อหรือไม่? หรือวิธีอื่นในการเปิดหลายแท็บพร้อมกัน



@kenorb ใช่ และมันก็มีคำตอบเดียวกันตรงนี้แล้วยกเว้นไม่มีคำอธิบายในสิ่งที่มันทำ ดังนั้นการเชื่อมโยงไปยังวิธีเพิ่มมูลค่าใด ๆ ?
Martin Tournoij

มีคำตอบอื่น ๆ และคำตอบใหม่สามารถมาที่นี่ได้ ประการที่สองมีลิงค์อื่น ๆ ที่เกี่ยวข้อง / คล้ายกันอยู่สองสามรายการเพื่อให้ผู้ใช้สามารถเรียนรู้เพิ่มเติมจากกองกำลังที่เกี่ยวข้องได้เช่นกัน
kenorb

:args *.c | tab allฉันได้เรียนรู้นี้หนึ่งซับ: คำถามอื่น ๆ เป็นที่นิยมมากกว่านี้ดังนั้นจึงเป็นเรื่องดีที่จะเชื่อมโยงกับมันเช่นกัน
kenorb

คำตอบ:


10

ด้วยปัญหาและความซับซ้อนในคำตอบอื่น ๆ ของฉันโดยใช้วิธี "ในตัว" โดยการแก้ไขรายการอาร์กิวเมนต์ฉันได้เพิ่มฟังก์ชั่นเล็ก ๆ ของตัวเองเพื่อทำสิ่งนี้:

" Open multiple tabs at once
fun! OpenMultipleTabs(pattern_list)
    for p in a:pattern_list
        for c in glob(l:p, 0, 1)
            execute 'tabedit ' . l:c
        endfor
    endfor
endfun

command! -bar -bang -nargs=+ -complete=file Tabedit call OpenMultipleTabs([<f-args>])

:Tabedit *.vimตอนนี้คุณสามารถใช้ ฟังก์ชั่นนี้จะขยายรูปแบบการวนรอบทั้งหมดและดำเนินการ:tabedit <f>สำหรับทุกไฟล์ คุณสามารถเพิ่มชื่อพา ธ ได้มากเท่าที่คุณต้องการตัวอย่างเช่นการทำงานทั้งหมด:

:Tabedit file.rb
:Tabedit *.c
:Tabedit file1.py file2.py _*.py
:Tabedit /etc/hosts file{1,2}.sh

ดีและอื่น ๆ ...

ฉันใส่นี้ในน้อยglobedit.vimปลั๊กอินซึ่งนอกจากนี้ยังมีคำสั่งสำหรับการ:Edit, :Splitฯลฯ


2
ฟังก์ชั่นและคำสั่งที่ยอดเยี่ยม! การปรับปรุงบางอย่าง: (1) ใช้[<f-args>]แทน"<args>"- วิธีนั้นpatternพารามิเตอร์จะเป็นรายการ (อาร์เรย์) และคุณไม่ต้องจัดการกับการแยกสตริงด้วยตนเอง (2) ส่งผ่านค่าที่ไม่ใช่ศูนย์เป็นอาร์กิวเมนต์ที่สามเพื่อglob()ให้ส่งคืนรายการ จากนั้นคุณสามารถหลีกเลี่ยงการแยกด้วยตนเองได้เช่นกัน คุณจะต้องผ่านการเป็นอาร์กิวเมนต์ที่สองที่จะข้ามไปได้โดยไม่ต้องมีผลกระทบต่อพฤติกรรม:0 glob(l:p, 0, 1)
tommcdo

7

เท่าที่ฉันรู้วิธีเดียวที่จะทำได้คือ:

:args *.vim
:tab all

ก่อน:argsจะเปลี่ยนรายการอาร์กิวเมนต์ รายการอาร์กิวเมนต์แสดงรายการไฟล์ที่คุณเปิดเป็นกลุ่มด้วย; ดังนั้นvim file1 file2หมายความว่ารายการอาร์กิวเมนต์มีและfile1 เราสามารถแก้ไขสิ่งนี้ได้ที่ runtime และ Vim จะเปิดบัฟเฟอร์สำหรับทุกรายการใหม่ในรายการอาร์กิวเมนต์ ดู file2

:help argument-listข้อมูลเพิ่มเติม

:allคำสั่งเปิดหน้าต่างสำหรับรายการในรายการอาร์กิวเมนต์ทุกครั้ง:tabคำสั่งรันคำสั่งและเปิดแท็บใหม่เมื่อคำสั่งที่กำหนดจะเปิดหน้าต่างใหม่

คำเตือน

มีข้อแม้บางประการสำหรับวิธีนี้

ก่อนอื่นไม่มีการตรวจสอบการทำซ้ำดังนั้นคุณสามารถจบด้วยแท็บ 2 แท็บหรือมากกว่าสำหรับบัฟเฟอร์เดียวกัน

แต่ปัญหาที่ใหญ่ที่สุดคือมันแทนที่แท็บทั้งหมดของคุณด้วยสิ่งที่อยู่ในรายการอาร์กิวเมนต์ ดังนั้นคุณจึงสูญเสียแท็บที่มีอยู่ทั้งหมด
คุณสามารถหลีกเลี่ยงสิ่งนี้เล็กน้อยโดยใช้:argadd *.vimเพื่อเพิ่มไปยังรายการอาร์กิวเมนต์แทนที่จะแทนที่ แต่คำสั่งดังกล่าวเป็น:editหรือ:tabeditทำไม่ได้ปรับเปลี่ยนรายการอาร์กิวเมนต์และคุณจะสูญเสียแท็บเหล่านั้นจนกว่าคุณจะเพิ่มลงในรายการอาร์กิวเมนต์ (คุณยังมีพวกเขาในรายการบัฟเฟอร์แม้ว่า) คุณอาจไม่ต้องการเปิดทุกสิ่งในรายการอาร์กิวเมนต์ในแท็บบางทีคุณอาจต้องการเปิด 2 ไฟล์เป็นแท็บเพิ่มเติม

คุณอาจจะทำให้ดีขึ้นได้เล็กน้อยโดยเพิ่มการเพิ่มแท็บที่เปิดอยู่ทั้งหมดลงในรายการอาร์กิวเมนต์ (ซึ่งฉันไม่สามารถทำงานได้) แต่นี่ก็ยังห่างไกลจากความสมบูรณ์แบบ หากแท็บมีหน้าต่าง 2 หน้าต่างขึ้นไปแท็บนั้นจะยังคงแก้ไข ...


ฉันอาจผิด แต่นี่ไม่เปิดแท็บพิเศษ (ตามที่เห็นในคำถามของฉันเกี่ยวกับการเปิดแท็บโดยค่าเริ่มต้น) ใช่ไหม
muru

1
หากคุณอ้างถึงคำตอบของฉันสำหรับคำถามนั้นความแตกต่างที่ฉันใช้:argdo tabedit %คือซึ่งจะเปิดแท็บใหม่สำหรับแต่ละอาร์กิวเมนต์ เริ่มต้นด้วยแท็บหนึ่งและการเปิดnใหม่ธรรมชาติจะทำให้คุณมี1 + nแท็บ :tab allเป็นทางออกที่ดีกว่ามาก
tommcdo

@tommcdo ผมได้พูดคุยของคำตอบ Josh เพทฯ คุณจะไม่เกิดขึ้นกับหนึ่งในนามแฝงของเขาคุณจะ? :)
muru

ฮ่าฮ่าไม่ ฉันต้องคิดถึงคำถามอื่น!
tommcdo

2

คุณสามารถใช้:nextคำสั่งแทนตัวอย่าง:

:n file1 file2

หรือ:

:n *.txt

ดูเหมือนว่านี่จะเหมือนกับการใช้:args *.vimหรือไม่ อย่างน้อยมันก็ทำงานเหมือนกันและ:help next_fบันทึกว่ามันเหมือนกัน ...
Martin Tournoij

มันสั้นและเรียบง่ายและคุณไม่ได้พูดถึงเรื่องนั้น พฤติกรรมนี้เหมือนกันตามที่คุณถามในคำถามว่า
kenorb

2

จากบรรทัดคำสั่งคุณสามารถใช้:

vim file1 ... filen -p

และถ้าคุณลืมที่จะใช้-pยังคุณสามารถใช้

:tab ball

แต่อย่าลืมว่าตัวแปรtabpagemax(ค่าเริ่มต้น 10) จำกัด จำนวนแท็บที่คุณสามารถเปิดด้วยวิธีนี้


0

คุณสามารถเปิดแท็บใหม่และรักษาแท็บปัจจุบันของคุณโดยไม่ต้องเขียนฟังก์ชั่นใหม่ (ดูคำตอบนี้ในStack Overflow ):

:args file1 file2 | argdo tabe

คุณอาจต้องการเปิดแท็บที่ว่างเปล่าใหม่ ( :tabe) ก่อนที่จะทำเช่นนั้นเพราะไฟล์แรกจะเปิดในแท็บปัจจุบัน นอกจากนี้แท็บเปล่าพิเศษจะเปิดค้างไว้ (ดู:help argdoเพื่อทำความเข้าใจว่าทำไม)


คุณต้องแก้ไขการเน้นไวยากรณ์ (ด้วยเหตุผลบางอย่าง) ตามที่อธิบายไว้ในลิงก์และปิดแท็บสุดท้ายดังนั้นคำสั่ง 'เต็ม' จะเป็น: :tabnew | args file1 file2 | argdo tabe | tabdo syntax onคุณต้องกด Enter เพื่อล้างพรอมต์และพิมพ์:closeเพื่อลบรายการสุดท้าย ( ว่างเปล่า) แท็บ ... มันเป็นการพิมพ์ที่น่ากลัวและคุ้มค่าถ้าคุณเปิดแท็บจำนวนมาก (สำหรับไฟล์ 2 หรือ 3 ไฟล์การใช้:tabeสองครั้งจะเร็วขึ้น)
Martin Tournoij
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.