ทำไมกลุ่มผู้เชี่ยวชาญถึงชอบบัฟเฟอร์มากกว่าแท็บ


243

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

ดังนั้นฉันจึงถามคุณว่าผู้เชี่ยวชาญ Vim: ข้อดีของการใช้บัฟเฟอร์บนแท็บคืออะไร ฉันไม่เห็นว่าความแตกต่างอาจแตกต่างกันอย่างมาก แต่ฉันจะพิจารณาตัวเองในระดับเริ่มต้น - ระดับกลางที่ใช้งาน Vim เท่านั้น คือ:ls :b#จริงๆที่เร็วกว่าgtไอเอ็นจีรอบ? ฉันรู้สึกว่ามันต้องลงลึกไปกว่านี้


6
สำหรับผู้ที่เรียน Vim หรือได้รับอิทธิพลอย่างมากจากบรรณาธิการ GUI อื่น ๆ ฉันขอแนะนำให้อ่าน@Jonathan Brinkก่อนแล้วจึงกลับมาที่คำตอบอันดับต้น ๆ ที่นี่
icc97

1
ไม่ต้องกังวลเกี่ยวกับมันมากเกินไป ฉันใช้แท็บเป็นวิธีหลักในการนำทางของไฟล์ต่าง ๆ อย่างที่คุณบอกว่า <#> gt นั้นง่ายต่อการพิมพ์ เพื่อให้ใช้งานง่ายยิ่งขึ้นฉันปรับแต่งข้อมูล tabline ของฉันเพื่อรวมหมายเลขแท็บ ถ้าฉันต้องการดูมากกว่าหนึ่งบัฟเฟอร์ในแต่ละครั้งฉันแยกหน้าต่างใหม่ภายในแท็บ แม้จะมี @romaini อ้างว่าวิธีการใช้ Vim นี้ทำให้ฉันมีประสิทธิผลมากเพราะมันเหมาะกับคำอุปมาอุปมัยส่วนตัวของฉัน โปรดทราบด้วยว่าในอาชีพปีที่ 37 (จนถึงปัจจุบัน) ในฐานะโปรแกรมเมอร์ฉันยังไม่ต้องเปิดไฟล์มากกว่าห้าหรือหกไฟล์ในคราวเดียว - และนั่นไม่ค่อยบ่อยนัก ทำในสิ่งที่เหมาะกับคุณ :)
โทนี่

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

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

คำตอบ:


500

ตามที่ ZyX กล่าวไว้ใน #vim คำถามนี้ดูเหมือนว่า"ทำไมผู้เชี่ยวชาญของ Vim ถึงชอบรสชาติที่อบอุ่นมากกว่านี้" .

"ผู้เชี่ยวชาญกลุ่ม" ไม่ชอบบัฟเฟอร์มากกว่าแท็บ: พวกเขาใช้บัฟเฟอร์เป็นพร็อกซีไฟล์ที่พวกเขาเป็นและหน้าแท็บเป็นพื้นที่ทำงานที่พวกเขา บัฟเฟอร์และหน้าแท็บมีวัตถุประสงค์ที่แตกต่างกันดังนั้นเลือกที่จะใช้อย่างใดอย่างหนึ่งจึงไม่สมเหตุสมผล

ปัญหาเกี่ยวกับบัฟเฟอร์และแท็บเป็นหนึ่งในความสับสนที่เกิดจากการรวมกันของข้อเท็จจริงที่เป็นอิสระ

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

  2. Vim นำหน้าแท็บใน 7.0 เป็นวิธีสำหรับผู้ใช้ในการสร้าง ad-hoc "พื้นที่ทำงาน" ไม่มีสิ่งใดในคุณสมบัติของพวกเขาตัวเลือกเฉพาะคำสั่งเฉพาะหรือ:helpส่วนของพวกเขาแนะนำว่าหน้าแท็บสามารถหรือควรใช้เป็นไฟล์พร็อกซี่

    ไม่มีอะไรนอกจากชื่อและการปรากฏตัวของ "แท็บหน้า" ซึ่งแน่นอนว่าทำให้เกิดความสับสนมาก

  3. หากไม่มี:set hiddenซึ่งจะถูกปิดใช้งานโดยค่าเริ่มต้นและหาง่ายมาก Vim ทำให้ไม่สามารถเปลี่ยนไปใช้บัฟเฟอร์อื่นได้โดยไม่ต้องเขียนข้อมูลปัจจุบันหรือยกเลิกการเปลี่ยนแปลง ผู้ใช้ใหม่โดยไม่รู้ตัวเลือกนั้นไม่มีทางเลือกนอกจากจะหันไปใช้งานหน้าต่างขนาดใหญ่หรือใช้คุณลักษณะ "คล้ายแท็บ" ที่ใกล้เคียงที่สุดที่พวกเขาสามารถพบได้: หน้าแท็บ

"หน้าแท็บ" เป็นตัวเลือกชื่อที่โชคร้ายสำหรับคุณลักษณะนั้นโดยเฉพาะอย่างยิ่งในยุคที่มีแนวคิดว่าการอ่านเอกสารเป็นเรื่องเสียเวลา

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

"วิธีบัฟเฟอร์"

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

  1. เปิดบัฟเฟอร์แปดอันมองเห็นได้เพียงอันเดียว:

    แปดบัฟเฟอร์เปิด

  2. เปลี่ยนตามหมายเลข:

    สลับหมายเลข

  3. เปลี่ยนตามชื่อ:

    สลับตามชื่อ

Buffers เป็นไฟล์พร็อกซี่ของ Vim หากคุณคิดในแง่ของไฟล์คุณคิดในแง่ของบัฟเฟอร์

"ทางหน้าต่าง"

ด้วยเวิร์กโฟลว์ที่ใช้หน้าต่าง "ไฟล์" ของคุณจะถูกกระจายไปตามมิติ "เสมือน" เดียวเช่นเดียวกับที่ใช้หากคุณใช้บัฟเฟอร์และตามมิติ "กายภาพ" อีกสองมิติ แต่ช่องว่างแบบคาร์ทีเซียนซึ่งพบมิติเหล่านั้นเกือบจะแยกออกจากกันอย่างสมบูรณ์: การย้ายไปยังบัฟเฟอร์อื่นยังคงหมายถึง "ย้ายไปยังไฟล์อื่น" แต่การย้ายไปยังหน้าต่างอื่นไม่ได้ บัฟเฟอร์ที่สอดคล้องกับไฟล์ที่ต้องการอาจปรากฏขึ้นในหน้าต่างนั้น แต่ก็สามารถแสดงในอีกอันหนึ่งอาจจะอยู่ในหน้าแท็บอื่นหรือไม่เลยก็ได้

มีหน้าต่างการนำระหว่างไฟล์ที่เปิดอย่างใดอย่างหนึ่งจะซับซ้อนเกินไปหรือง่ายเกินไปแม้จะมีและ'switchbuf' :sbส่วนใหญ่เป็นเพราะคุณถูกบังคับให้ใช้คำสั่งสองชุดสำหรับสิ่งที่เป็นหลักสิ่งเดียวกัน: การเข้าถึงบัฟเฟอร์

Windows มีการใช้งานตามที่อธิบายไว้ด้านล่าง แต่พวกเขาไม่มีสิ่งที่จะแทนที่บัฟเฟอร์ในเวิร์กโฟลว์ของใครก็ได้

ที่นี่ฉันกำลังทำงานกับกลุ่มสีที่เป็นกลุ่ม หน้าต่างสองบานเป็นมุมมองที่แตกต่างกันของบัฟเฟอร์เดียวกัน: หน้าต่างด้านบนทำหน้าที่เป็นข้อมูลอ้างอิงโดยมีตารางรหัสสีที่ใช้ใน colorscheme และหน้าต่างด้านล่างเป็นตำแหน่งที่ฉันทำงาน:

ทำงานกับ colorcheme

Windows ไม่ได้รับการออกแบบให้เป็นไฟล์พร็อกซีและไม่สามารถนำมาทำเป็นไฟล์ได้: เป็น "คอนเทนเนอร์" หรือ "วิวพอร์ต" ที่ออกแบบมาเพื่อให้คุณได้รับมุมมองในบัฟเฟอร์ ไม่มากไม่น้อย.

"ทางแท็บ"

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

ยังคงทำงานกับไฟล์เดียวกันกับข้างบนแท็บไลน์ใช้พื้นที่ที่สำคัญเพื่อแทบไม่ได้รับประโยชน์ ไฟล์ทั้งหมดของฉันและแท็บทั้งหมดของฉันถูกเรียกjavascript*.vimดังนั้นฉันไม่สามารถทำได้3gtและมั่นใจว่าฉันจะจบลงที่ที่ถูกต้องและเป็นไปไม่ได้ที่จะเข้าถึงแท็บเฉพาะด้วยชื่อ เพิ่มไปที่ความจริงที่ว่าฉลากของมันเป็นสิ่งที่ไม่ช่วยเหลือ แต่มีเหตุผลอย่างสมบูรณ์[Quickfix List]... เนื่องจากไม่มีวิธีที่ใช้งานได้จริงในการผูกไฟล์ / บัฟเฟอร์ไปยังหน้าแท็บ / buffer / files: cycling

และใช่แท็บไลน์ของฉันถูกอุดตันด้วยแท็บเพียง 8 แท็บลองนึกภาพถ้าฉันมี 20!

  1. บัฟเฟอร์แปดตัวเปิดในหน้าแท็บแปดหน้า(ผิด)

    ไม่ถูกต้อง

  2. สองแท็บสำหรับงานเฉพาะสองงาน(ขวา)

    ขวา

หน้าแท็บคือ "คอนเทนเนอร์" หรือ "วิวพอร์ต" ที่ออกแบบมาเพื่อมีหนึ่งหน้าต่างขึ้นไปและตัวเองยังเป็น "คอนเทนเนอร์" ที่ออกแบบมาเพื่อให้มีบัฟเฟอร์

สรุปแล้ว

"ผู้เชี่ยวชาญ Vim" (สมมติว่าฉันสามารถพูดได้ราวกับว่าฉันเป็นคนหนึ่ง) ไม่ชอบบัฟเฟอร์มากกว่าแท็บ:พวกเขาใช้ Vim เพราะมันถูกออกแบบมาและสะดวกสบายกับการออกแบบนั้น:

  • "ผู้เชี่ยวชาญกลุ่ม" มีโหลด 2, 30 หรือ 97 บัฟเฟอร์และมีความสุขมากที่พวกเขาไม่ต้องจัดการกับการกระจายเชิงพื้นที่

  • เมื่อพวกเขาต้องการเปรียบเทียบไฟล์สองไฟล์หรือทำงานในส่วนหนึ่งของบัฟเฟอร์ปัจจุบันในขณะที่เก็บอีกไฟล์ไว้เป็นข้อมูลอ้างอิง "ผู้เชี่ยวชาญ Vim" ใช้ windows เพราะนั่นเป็นวิธีการใช้งาน

  • เมื่อพวกเขาต้องการทำงานเป็นระยะเวลาหนึ่งในส่วนอื่นของโครงการโดยไม่ยุ่งกับมุมมองปัจจุบัน "ผู้เชี่ยวชาญ Vim" โหลดหน้าแท็บใหม่เอี่ยม


10
สำหรับลิงก์เพิ่มเติมโปรดดูที่บัฟเฟอร์การใช้งานของฉันโพสต์อย่างมีประสิทธิภาพ
Peter Rincker

7
@DavidEG การมี 20 บัฟเฟอร์ไม่ใช่ปัญหาเลยดังนั้นจึงไม่จำเป็นต้องมีปลั๊กอิน ในอีกทางหนึ่ง, หน้า 20 แท็บ - ไม่ว่าพวกเขาจะเชื่อถือไฟล์พร็อกซี่หรือไม่ - ไม่สามารถพอดีกับหน้าจอส่วนใหญ่, ปลั๊กอินหรือไม่
romainl

2
@Kache ใช่ว่าเป็นจุดหลักของฉัน: คุณสามารถใช้ windows และหน้าแท็บสำหรับสิ่งที่พวกเขา แต่ไม่ใช่ในฐานะผู้รับมอบฉันทะไฟล์ ดังนั้นข้อโต้แย้งไม่ว่าผู้ใช้ควรใช้หน้าแท็บหรือบัฟเฟอร์มันเป็นว่าคนควรใช้หน้าแท็บเป็นผู้รับมอบฉันทะไฟล์หรือไม่
romainl

14
ในฐานะที่เป็น“กลุ่มผู้เชี่ยวชาญ” ฉันจะบอกว่ากว่า 4 แสนบัฟเฟอร์“เปิด” (จริงๆ“ระบุไว้ แต่ถอดยกเว้นไม่กี่คน”) เป็นสถานการณ์ปกติเมื่อฉันจัดการกับโครงการเช่น NeoVim (ฉันเพียงแค่เปิดทั้งหมด*.c, *.h, scripts/*และtest/**/*.luaไฟล์) เนื่องจากเทอร์มินัลของฉันมีความกว้างเพียง 239 คอลัมน์เป็นวิธีที่เป็นไปไม่ได้ที่จะใช้
ZyX

3
และเนื่องจากมีปลั๊กอินจำนวนมาก (Command-T, …) ที่ทำให้การสลับระหว่างบัฟเฟอร์และ / หรือไฟล์ง่ายขึ้นโดยใช้แท็บสำหรับโปรเจ็กต์ขนาดใหญ่ที่ค่อนข้างไม่มีเหตุผล และ neovim ที่มี≈500ไฟล์ "น่าสนใจ" เป็นโครงการขนาดใหญ่ แต่ไม่ใช่ไฟล์ที่ใหญ่ที่สุด เมื่อคุณเผชิญกับความจำเป็นในการจัดการกับโครงการดังกล่าวคุณจะต้องใช้การค้นหาบางอย่างเพื่อนำทางมันเสมอ (การค้นหาไฟล์ / แท็กด้วย Command-T และเพื่อน ๆ วิธีต่างๆในการกำหนดสัญลักษณ์) และทำให้คุณไม่มีเหตุผลที่จะใช้แท็บ วิธีนี้: ในกรณีใด ๆ คุณจะไม่ได้ใช้ฟังก์ชั่นที่ผูกแท็บเพื่อนำทางโครงการ
ZyX

88

ฉันใช้เพื่อให้ทุกบัฟเฟอร์ในแท็บแยกต่างหาก แต่ผมเริ่มเบื่ออย่างต่อเนื่องgtและgTไอเอ็นจีทั่วทุกที่

ฉันรู้สึกว่าบัฟเฟอร์นั้นยากเกินกว่าจะจัดการได้

นี่คือเทคนิคบางอย่างที่เปลี่ยนความคิดเห็นก่อนหน้าของฉันทั้งหมด:

นี่คือขั้นตอนการทำงานทั่วไปของฉัน:

  • เปิดเป็นกลุ่มและใช้:e(โดยปกติด้วย regex like :e src/**/F*Bar.js) เพื่อเปิดบัฟเฟอร์
  • ตระหนักดีว่าฉันต้องเปิดไฟล์อื่น ใช้:eสำหรับสิ่งนั้นเช่นกัน หากฉันต้องการสลับระหว่างบัฟเฟอร์นี้กับบัฟเฟอร์ที่เปิดอยู่ฉันจะใช้:spหรือ:vspเปิดในหน้าต่างแยกต่างหาก
  • ทำซ้ำจนกว่าฉันจะมีไฟล์ 3-5 ไฟล์ที่ฉันจะสลับระหว่างการใช้เทคนิคในรายการสัญลักษณ์แสดงหัวข้อย่อยด้านบนเพื่อบินระหว่างบัฟเฟอร์ของคุณ
  • หากฉันต้องการ "เริ่มต้นใหม่" ด้วยบัฟเฟอร์ของฉันเพียงแค่ปิด Vim แล้วเปิดใหม่อีกครั้ง

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


24
มันเป็นความอัปยศที่ผู้ใช้ที่เป็นมิตร / มือใหม่คำอธิบายเช่นนี้ได้รับประมาณ 3% ของ upvotes ของคำตอบที่ซับซ้อนมากดื้อดึงเสื่อมเสียเช่นคำตอบที่ได้รับการโหวตสูงสุดที่นี่ ฉันไม่ได้รู้ว่าเป็นคำสั่งไปยังแท็บสวิทช์ที่ผมหามาทดแทนgT ctrl+tabดังนั้นขอขอบคุณที่ช่วยผู้ใช้ใหม่อย่างแท้จริงแทนที่จะทำให้พวกเขารู้สึกโง่
icc97

11
ฉันต้องบอกว่าความคิดเห็นของฉันไม่เป็นธรรมต่อคำตอบของ @ romainl เขามีความสุขมากที่จะตอบคำถามที่ฉันมีเกี่ยวกับเรื่องนี้ แต่แน่นอนว่าเมื่อมีคนพยายามเรียนรู้เสียงตอบรับของคุณนั้นง่ายกว่าที่จะเข้าใจ แต่คำตอบของเขานั้นสมบูรณ์มากขึ้นเมื่อคุณรู้อีกเล็กน้อย
icc97

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

3
จำไม่ได้ว่ามาจากไหน แต่nnoremap <leader>b :ls<CR>:b<space>ค่อนข้างดีสำหรับการสลับบัฟเฟอร์อย่างรวดเร็วเพราะมันแสดงรายการของบัฟเฟอร์ที่เปิดอยู่ในปัจจุบัน นอกจากนี้ยังยอมรับชื่อบางส่วนด้วย (ตราบใดที่มีเพียงหนึ่งการแข่งขัน)
naught101

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

12

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

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


ฉันใช้ตัวแยกเป็นครั้งคราว ฉันไม่ทราบว่าพวกเขาถูกพิจารณาว่า 'กำลังใช้บัฟเฟอร์' มันเป็นแนวคิดที่ลึกลับสำหรับฉันจริงๆ
2c2c

1
ในฐานะที่เป็นการค้นพบแท็บที่น่าสนใจแท็บแมนสามารถสร้างพาเนลด้านข้างเหมือน NerdTree ซึ่งให้รายละเอียดบัฟเฟอร์ทั้งหมดที่แสดงในแท็บแต่ละแท็บ
llinfeng

7

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

ส่วนของชื่อบัฟเฟอร์ใด ๆ สามารถใช้จับคู่ ตัวอย่างเช่นถ้าคุณมีบัฟเฟอร์request_manager.javaและqueue_manager.javaแล้ว:buffer queหรือ:b queตรงกับทั้งสองของพวกเขา แต่จะเปลี่ยนไป queue_manager.java ขณะที่มันตรงกับที่จุดเริ่มต้น


3

ฉันใช้แท็บCtrl- Pและเซสชันเป็นกลุ่มในเวิร์กโฟลว์ของฉันและมีมานานกว่าหนึ่งปีแล้ว:

  • ฉันได้)และ(แมปไปที่ "ไปที่แท็บถัดไป" และ "ไปที่แท็บก่อนหน้า" ตามลำดับ tnเปิดแท็บใหม่ ฉันยังใช้แท็บเพื่อช่วยจัดระเบียบสิ่งต่าง ๆ

  • ฉันใช้เซสชัน Vim สำหรับกลุ่มของไฟล์ที่เกี่ยวข้องกับเรื่องราว / ข้อผิดพลาดที่ฉันกำลังทำอยู่ซึ่งมักจะทำตามหมวดหมู่ เซสชันเหล่านี้จะถูกเขียนทับในระหว่างกระบวนการ

  • ฉันยังไม่พบอะไรที่ดีไปกว่าCtrl- Pแต่ใช้เวลาเล็กน้อยในการประมวลผลไฟล์ทั้งหมดเพื่อการค้นหา


1

โยน 2c ลงในกอง

TLDR; :b *part-of-filename*เป็นวิธีที่ดีที่สุดในการค้นหาไฟล์ที่คุณต้องการในรายการบัฟเฟอร์นั่นคือเร็วกว่าและมีภาระการรับรู้น้อยกว่าหมายเลขบัฟเฟอร์แท็บหรือหน้าต่างสำหรับการติดตามไฟล์

ไม่มีอะไรสำหรับฉันที่จะเปิด 30 บัฟเฟอร์ (นั่นคือฉันไม่ได้รับการดูแล) และความงามของบัฟเฟอร์ที่ใช้แล้วคือว่ามันไม่ทำให้ฉันช้าลงเลย อันที่จริงแล้วมันเพิ่มความเร็วขึ้นเมื่อสี่วันหลังจากที่ฉันเปิดไฟล์ที่ฉันต้องการเรียกใช้:b *part-of-filename*และมันจะปรากฏขึ้นอย่างน่าอัศจรรย์สร้างความประทับใจให้เพื่อนร่วมงาน

บัฟเฟอร์สำหรับไฟล์

เพื่อให้มีประสิทธิภาพ:

  • เปิดไฟล์แรกที่สำคัญจากไดเรกทอรีรากที่เลือกอย่างดี
  • เปิดไฟล์ที่ตามมาด้วย :e
  • ใช้ lsตลอดเวลาเมื่อคุณเริ่มที่จะได้รับแบบจำลองทางจิตที่ดี (คุณไม่สามารถห้อมล้อมสิ่งที่คุณไม่สามารถมองเห็นจิตใจหรือตัวอักษร)
  • ไม่:qมันพัด
  • ใส่:bเข้าไปในหน่วยความจำกล้ามเนื้อของคุณ
  • :b1 เป็นสิ่งที่ดีสำหรับไฟล์แรกที่คุณรู้ว่าคุณเปิดมิฉะนั้นตัวเลขและตัวอักษรจะได้รับการเงอะงะอย่างรวดเร็ว
  • :b# เป็นการดีสำหรับการสลับไปยังไฟล์สุดท้ายของคุณซึ่งเป็นความต้องการทั่วไป
  • :bd#เป็นสิ่งที่ดีสำหรับเมื่อคุณเปลี่ยนไปใช้ไฟล์ชั่วคราวทำสิ่งที่คุณต้องทำเปลี่ยนกลับด้วย:b#และตอนนี้ต้องการปิดไฟล์ชั่วคราวนั้น
  • :b *part-of-filename* เป็นวิธีที่ดีที่สุดในการค้นหาไฟล์ที่คุณต้องการในรายการนั่นคือเร็วกว่าและมีภาระการรับรู้น้อยกว่าหมายเลขบัฟเฟอร์แท็บหรือหน้าต่างสำหรับการติดตามไฟล์

สิ่งที่น่ารำคาญเพียงอย่างเดียว:b *part-of-filename*คือบางครั้งคุณยังไม่ได้เปิดไฟล์และคุณต้องย้อนกลับไป:e path/to/full-filenameก่อน

แท็บใช้สำหรับแยกแยะไฟล์ที่ไม่เกี่ยวข้องอย่างแท้จริง

หรือทำให้การจัดวางหน้าต่างเป็นประโยชน์โดยเฉพาะ (ข้อจำกัดความรับผิดชอบ: ฉันไม่เคยใช้มันเพื่อสิ่งนี้ด้วยตนเอง)

หรือสำหรับไฟล์ที่ไม่ค่อยได้ใช้ แต่จำเป็นต้องมีการคาดการณ์ สำหรับฉันมันมักจะเป็นcommitMessageไฟล์ที่ฉันใส่คำอธิบายประกอบขณะที่ฉันทำงานดังนั้นฉันไม่ต้องคิดมากเกินไปเมื่อถึงเวลาต้องตัดสินใจ gtเร็วกว่า:b com<enter>(ถ้าคุณรู้สึกโชคดี:b com<tab><enter>)

  • :tabe commitMessage
  • gt หรือ gTหน่วยความจำของกล้ามเนื้อที่ชื่นชอบ

การแบ่งหน้าต่างใช้สำหรับการเปรียบเทียบข้อมูลด้วยสายตา

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

  • :vspหรือC-w vเปิดตัวแยกแนวตั้งเช่นซ้าย | จากนั้นใช้:bหรือ:eเพื่อรับไฟล์ที่คุณต้องการ
  • :spหรือC-w sเปิดตัวแบ่งแนวนอนเช่นบน / ล่าง
  • C-w C-w ie double Ctrl-w หมุนคุณไปตามหน้าต่างที่มี
  • C-w c ปิดหน้าต่างปัจจุบัน
  • C-w o ปิดหน้าต่างอื่น ๆ ทั้งหมดให้เป็นปัจจุบันเท่านั้น

คำตอบที่เป็นประโยชน์อย่างไม่น่าเชื่อควรมี upvotes มากขึ้น ขอบคุณสำหรับเคล็ดลับโดยเฉพาะอย่างยิ่งข้อมูลเชิงลึกเกี่ยวกับขั้นตอนการทำงานของคุณด้วย:b#และ:bd#!
Alacritas

0

เพิ่มเหล่านี้ไปยัง.vimrcบัฟเฟอร์ของคุณและเริ่มรัก:

:nnoremap <Tab> :n<cr>
:nnoremap <S-Tab> :N<cr>

วิธีการที่คุณสามารถวงจรเดินหน้า / ถอยหลังผ่านพวกเขาในโหมดปกติผ่านทาง/TabShiftTab


5
อย่าทำอย่างนั้น <C-I>คุณจะสูญเสียการแมปสำหรับ แผนที่<C-Tab>แทนถ้าคุณต้องการจริงๆ

6
นอกจากนี้:nและ:Nเชื่อมโยงกับรายการอาร์กิวเมนต์ไม่ใช่บัฟเฟอร์เปิด คุณต้องการ:bnและ:bp( :bnextและ:bprev) unpaired ของ tpope ให้การจับคู่]bและ[bสำหรับสิ่งนี้ (และสิ่งดีๆอื่น ๆ ) หากคุณต้องการ (และ)หรือหรือ<left>และ<right>ลูกศรอาจเป็นกุญแจที่มีประโยชน์น้อยกว่าในการแทนที่แท็บหากคุณต้องการแผนที่สั้น ๆ
Vaz

1
@jeyoung เห็นด้วย - มันสมเหตุสมผลมากกว่าที่จะใช้Ctrl + Tabเพราะนั่นคือสิ่งที่บรรณาธิการ GUI และเบราว์เซอร์อื่น ๆ ส่วนใหญ่ใช้
icc97

0

ผมอยากจะขอแนะนำการดำเนินงาน brillent จากหมายเลขที่ดีของปีที่ผ่านมา: kien / tabman.vim มันชี้แจงต่อไปนี้:

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

มันเป็นการค้นพบที่ยอดเยี่ยมอีกครั้งสำหรับปลั๊กอินวิเศษนี้ซึ่งควรจะอยู่ในการกำหนดค่า Vim ของฉันเป็นเวลาหลายปีเช่นกัน ในขณะที่ฉันยังคงมองหาบางสิ่งบางอย่างที่ยังแสดงบัฟเฟอร์ที่ซ่อนอยู่ทั้งหมด TabMan คือซูเปอร์แมนของฉันเมื่อมันมีมุมมองที่ดีของนกในการจัดเรียงบัฟเฟอร์ในแท็บต่างๆ


0

แท็บและบัฟเฟอร์เป็นสองมาตรฐานที่แตกต่างกันใน Vi อ่านคำจำกัดความทั้งสามนี้:

A buffer is the in-memory text of a file
A window is a viewport on a buffer.
A tab page is a collection of windows.

อ่านบทความนี้สำหรับhttps://joshldavis.com/2014/04/05/vim-tab-madness-buffers-vs-tabs/เพิ่มเติม


0

ฉันโหลดบัฟเฟอร์ "ที่เลือก" เป็นแท็บเพื่อสลับอย่างรวดเร็ว (TAB / S-TAB) เฟรมเวิร์กของพื้นที่ทำงานพอดีที่นี่สำหรับฉันบัฟเฟอร์ VS แท็บส่วนใหญ่เป็นสิ่งที่มองเห็นได้ ฉันสามารถเปิดไฟล์สำคัญ / งานในหน้าต่างและแท็บและซ่อนไฟล์ที่ฉันไม่ต้องการใช้ในแบ็กกราวน์ได้ทันทีโดยไม่ต้องจำเส้นทางหรือใช้เวลาในการค้นหาและโหลดมันอีกครั้งเมื่อจำเป็น สิ่งนี้ช่วยให้สามารถจัดการงานหรือโครงการต่าง ๆ ในเซสชัน VIM เดียวฉันคิดว่าสิ่งนี้เคยมีความสำคัญในเครื่องที่มีหน่วยความจำต่ำ แต่ก็เหมาะสำหรับการแก้ไขงานทั้งหมดภายใต้กรอบแอพพลิเคชันเดียว ฉันยังมีการตั้งค่าทางลัดบัฟเฟอร์การเปลี่ยนเป็นCtrl-Right / Left เพื่อให้สามารถเลื่อนผ่านบัฟเฟอร์ต่าง ๆ ได้อย่างรวดเร็ว

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

สำหรับไฟล์สลับคุณสามารถบอก VIM ให้เก็บไว้ทั้งหมดในโฟลเดอร์เดียวที่คุณกำหนด สำหรับการใช้งาน:set directoryนี้

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