ฉันจะเปิดแท็บใหม่เป็นค่าเริ่มต้นได้อย่างไร


10

เมื่อเปิดvimกับหลายไฟล์ ( vim f1 f2 ...) วิธีการที่ฉันสามารถทำให้มันเปิดในแท็บได้โดยตรงโดยไม่ต้องใช้-p?

ฉันกำลังมองหาการแยกพฤติกรรมของเชลล์ออกจากพฤติกรรมที่เป็นกลุ่ม, ลบvimชื่อแทนที่ใช้ ฯลฯ นั่นคือเหตุผลที่ฉันไม่ต้องการใช้ชื่อแทน ฯลฯ (ดังนั้นไม่มี-p)

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

สำหรับโพสต์ SO ที่เฉพาะเจาะจงที่เชื่อมโยง:

  • tabpagemax=9999คำตอบที่ได้รับการยอมรับไม่ เรียกว่าอคติส่วนตัว แต่ฉันเห็นว่ามีการ จำกัด จำนวนมากและฉันคิดว่ามีบางอย่างผิดปกติ (อย่างที่ฉันรู้สึกถ้าเห็นchmod 777)

    :au VimEnter * set tabpagemax=9999|sil tab ball|set tabpagemax&vim
    
  • คำตอบอื่น ๆ นำไปสู่การเปิดแท็บที่ว่างเปล่าเป็นพิเศษในขณะที่มีความกระชับมากขึ้น

    :autocmd VimEnter * argdo tabedit
    

ฉันหวังว่าจะได้คำตอบที่ไม่มีแท็บพิเศษเปิดขึ้นมาและไม่ได้กำหนดขีด จำกัด ไว้ที่ค่ามาก (หรืออธิบายว่าทำไมมันจึงไม่ใช่สิ่งเลวร้าย)



@OrangeTux ฉันโพสต์ในจิตวิญญาณของคำตอบของ Gilles แต่ด้วย downvote ฉันสงสัยว่า Gilles จะพูดอะไรกับโพสต์ที่ลิงก์ไปยังโพสต์ที่มีอยู่
muru

@Carpetsmoker ฉันไม่เห็นความคิดเห็นอัปเดตของคุณ หน้าแท็บที่ว่างเปล่าไม่ใช่ปัญหาใหญ่เมื่อเซสชันของคุณมักจะจบลงด้วย:qaแรงนิสัย ถ้านั่นเป็นข้อได้เปรียบอย่างเดียวที่ฉันจะไปกับคนอื่นเพราะมันดูง่ายกว่า
muru

3
@muru WWGS? คุณมีเหตุผลที่คิดว่าคำตอบของStack Overflowไม่เป็นที่น่าพอใจใช่ไหม ถ้าเป็นเช่นนั้นอธิบายได้ว่าในคำถามของคุณ ในกรณีใด ๆ สรุปคำตอบ SO ในคำถามของคุณ หากนั่นนำไปสู่คำถามที่มีคำตอบของตัวเองอย่าโพสต์
Gilles 'หยุดความชั่วร้าย' ใน

@Gilles อัพเดทแล้ว ฉันไม่ได้โพสต์คำสั่งจริงคุณคิดว่าฉันควร?
muru

คำตอบ:


4

หลังจากการทดลองฉันพบว่านี่เป็นวิธีที่ดีที่สุด มันควรทำตัวเหมือนกับvim -p:

au VimEnter * if !&diff | tab all | tabfirst | endif

ขั้นแรกให้tab allเปิดรายการทั้งหมดในรายการอาร์กิวเมนต์ ( :args) ในแท็บ รายการอาร์กิวเมนต์เป็นรายการไฟล์ที่คุณส่งไปยัง Vim เมื่อเริ่มต้น และtabfirstทำให้แน่ใจว่าแท็บแรกถูกโฟกัสแทนที่จะเป็นแท็บสุดท้าย (เป็นตัวเลือก)

เราจะไม่ทำสิ่งนี้หาก&diffตั้งไว้ ถ้าเป็นเช่นนั้นเรากำลังใช้vimdiffหรือvim -dที่เราต้องการมี 2 ​​windows และไม่ 2 แท็บ

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


หมายเหตุบางประการเกี่ยวกับโซลูชันอื่น ๆ :

  • tab ballเปิดแท็บสำหรับทุกรายการในรายการบัฟเฟอร์ไม่ใช่รายการอาร์กิวเมนต์ "ปัญหา" เป็นว่ารายการบัฟเฟอร์อาจถูกบันทึกไว้ในแฟ้ม viminfo บนเลิกและบูรณะในการเริ่มต้น (ถ้า%อยู่ใน'viminfo'ที่ไม่ได้เปิดใช้งานโดยค่าเริ่มต้น) ดังนั้นหากคุณพิมพ์vimมันจะเปิดไฟล์เหล่านั้น ฉันคิดว่านี่เป็นสิ่งที่ไม่พึงประสงค์ แต่ฉันสามารถจินตนาการได้ว่าบางคนพบว่ามีประโยชน์ ดังนั้นใช้สิ่งที่คุณต้องการ

  • set tabpagemax=9999ไม่จำเป็นต้องใช้; ค่าเริ่มต้นคือ10และสิ่งนี้ควรจะดี คุณสามารถเพิ่มสิ่งนี้ใน vimrc ของคุณหากคุณต้องการมากขึ้น แต่9999เป็นจำนวนที่โง่ หากคุณใช้-pคุณจะได้รับtabpagemaxแท็บด้วย ดังนั้นนี่ควรเคารพ จำไว้ว่าสิ่งนี้จะเปิด (อ่าน) บัฟเฟอร์เมื่อเริ่มต้นดังนั้นจึงค่อนข้างช้า

  • autocmd VimEnter * argdo tabedittab allเป็นเพียงวิธีเดียวกับการพูด อย่างไรก็ตามบัฟเฟอร์เริ่มต้นจะไม่ถูกล้างดังนั้นคุณจะเหลือแท็บพิเศษนั้น ( tab allแทนที่แท็บทั้งหมด) ในการแก้ไขปัญหานี้คุณต้องมีวิธีแก้ปัญหาในคำตอบของ Josh Petrie


2

ฉันคิดว่าการเพิ่มสิ่งนี้ในของคุณ.vimrcอาจช่วยแก้ปัญหาของคุณได้ (หมายเหตุอย่างไรก็ตามฉันไม่ได้ใช้สิ่งนี้และทำการทดสอบเพียงเล็กน้อยเท่านั้นมันอาจทำสิ่งแปลก ๆ ในบางกรณี):

function! OpenArgumentsInTabs()
  ardo tabedit
  if tabpagenr("$") > 1
    tabclose
  endif
endfunction

autocmd VimEnter * call OpenArgumentsInTabs()

ดังที่คุณจดบันทึกไว้argdo tabeditจะทำให้แท็บเพิ่มเติมว่างเปล่า ดังนั้นคุณสามารถปิดแท็บนั้นได้โดยอัตโนมัติ อย่างไรก็ตามคุณไม่สามารถเรียกใช้งานtabcloseได้โดยไม่ถูกเลือกมิฉะนั้นจะมีข้อผิดพลาดเกิดขึ้นเมื่อคุณเรียกใช้งานโดยไม่มีอาร์กิวเมนต์หรือไฟล์เดียว (คุณ "ไม่สามารถปิดแท็บสุดท้าย") ให้ตรวจสอบดูว่าจำนวนแท็บทั้งหมดมากกว่าหนึ่งแท็บหรือไม่นั่นเป็น$สาเหตุtabpagenrที่ส่งคืนหรือไม่และคุณจำเป็นต้องปิดแท็บสุดท้ายหรือไม่


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

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