ฉันจะแก้ไขบัฟเฟอร์ที่มีอยู่ในแท็บใหม่ในกลุ่ม?


51

สมมติว่าฉันเริ่มเป็นกลุ่มแบบนี้:

vim foo bar

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


หลายท่านอาจกำลังมองหาคำตอบของ liuyang1tabe %อยู่ ด้านล่าง
Mateusz Piotrowski

1
@MateuszPiotrowski อย่างที่ฉันพูดถึงในความคิดเห็นนี้กับคำตอบนั้น:tabe %ไม่สามารถใช้งานได้กับบัฟเฟอร์ที่ไม่มี filepath ที่ถูกต้อง :tab sbทำงานทุกครั้ง
JoL

คำตอบ:


30

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

:ls
  1 %a   "foo"                 line 6
  2      "bar"             line 0

% a เป็นบัฟเฟอร์ที่ใช้งานอยู่ คุณสามารถใช้:b2เพื่อสลับไปที่บัฟเฟอร์ 2 หรือใช้:bnเพื่อวนไปยังถัดไปหรือ:bpก่อนหน้า ฉันชอบ (CTRL-W v) เพื่อแยก windows ในแนวตั้งมากกว่า (CTRL-W) ที่แยกแนวนอน

หากคุณโหลดไฟล์ 2 ไฟล์และไม่มีแท็บ (ยัง) คุณสามารถ:tabnewและในประเภทแท็บใหม่:b2

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


ใช่ แต่ฉันต้องการมีแท็บ
innaM

ดังนั้นคุณได้เริ่มต้นเป็นกลุ่มในแบบที่คุณมีไฟล์ของคุณในไคลเอนต์เป็นกลุ่มไม่ได้อยู่ในเปลือก cmd / terminal?
DaveParillo

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

Ah! ฉันเดาว่าฉันไม่เคยเข้าใจจริงๆว่าบัฟเฟอร์ไม่ได้อยู่ในแท็บ ฉันคิดเสมอ (โดยไม่คิดมาก) ว่าแต่ละแท็บมีรายการบัฟเฟอร์ของตัวเอง
innaM

บนเครื่องของฉันvimจะเปิดตัวแก้ไขภายในเชลล์ gvimเพื่อให้ได้เป็นกลุ่มผู้ใช้แบบกราฟิกอินเตอร์เฟซที่ฉันต้องใช้ และคุณถูกต้อง - บัฟเฟอร์เป็นโกลบอลของแอ็พพลิเคชัน vim
DaveParillo

47

คุณต้องการเปิดบัฟเฟอร์ในแท็บใหม่หรือไม่?

แยกหน้าจอ (Ctrl-W s), ใช้หน้าต่างและ Ctrl-W T


อืมมม ไม่ใช่สิ่งที่ฉันมีในใจ แต่ไม่เลวสำหรับการเริ่มต้น ผมไม่ทราบว่าเกี่ยวกับCtrl-w Tเลย แน่นอนว่าแท็บแรกยังคงมีบัฟเฟอร์สองวิธี
innaM

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

Ah! คุณถูก. :lsผมได้รับการตีความการส่งออกของ
innaM

นอกจากนี้ ctrl-w V แยกหน้าต่างในแนวตั้ง
Shannon Nelson

1
CTRL-w v เป็นคำสั่งที่ถูกต้องสำหรับการแยกหน้าต่างในแนวตั้ง
JRM

27

คุณสามารถทำได้โดยการรวมtabคำสั่งกับsb[uffer]คำสั่ง

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

:ls
  1 %a   "foo"                          line 1
  2      "bar"                          line 0

เมื่อคุณมี ID แล้วคุณสามารถเปิดมันในแท็บใหม่โดยใช้:

:tab sb 2

sbคำสั่งตามปกติจะเปิดให้บัฟเฟอร์ในหน้าต่างแยกใหม่ แต่tabคำสั่งที่ทำให้มันจะเปิดในแท็บใหม่แทน

tabคำสั่งนอกจากนี้ยังช่วยให้คุณสามารถระบุตำแหน่งที่อยู่ในรายชื่อแท็บแท็บใหม่ควรจะสร้าง ตัวอย่างเช่น:0tab sb 2จะส่งผลให้แท็บ 'บาร์' ใหม่ปรากฏที่ด้านบนของรายการแทนที่จะเป็นหลังแท็บปัจจุบัน


2
คุณไม่ต้องการหมายเลขบัฟเฟอร์ให้มันเป็นส่วนที่ชัดเจนของชื่อบัฟเฟอร์และ VIM จัดการให้คุณเอง
ของหวาน

1
นี่คือคำตอบที่ฉันต้องการและต้องการ ฉันผิดหวังเมื่อ:tab buffer part-of-nameไม่ได้เปิดแท็บใหม่! แต่:tab sb part-of-nameทำงานเหมือนจับใจ ขอขอบคุณ!!!!
Sukima

นี่ไม่ใช่คำถามที่แน่นอนของ OP แต่เป็นสิ่งที่ฉันกำลังมองหา :)
jackcogdill

25

วิธีที่ดีกว่าในการบรรลุสิ่งที่ OP ต้องการคือ:

:bufdo tab split

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

:grep foo
:QuickFixOpenAll
:bufdo tab split

แน่นอนเมื่อหันไปใช้ปลั๊กอินมันจะง่ายพอที่จะปรับเปลี่ยนเพื่อเปิดเนื้อหารายการ quickfix ในแท็บโดยตรง

UPDATE : ฉันต้องแสดงความคิดเห็นของ ggustafsson ด้านล่าง มันเป็นคำตอบที่ดีที่สุดของล็อตและห่างไกลและแสดงให้เห็นถึงแนวโน้มของ Vim ที่มีต่อพฤติกรรมการแต่ง ข้อเสนอแนะคือ:

 :tab sball

การดูค่า Vim help สำหรับ: tabและ: sballเป็นสิ่งที่ควรค่าเพื่อดูว่าเกิดอะไรขึ้นที่นี่


:bufdo execute "tabnew %"วิธีการที่คล้ายกันจากการแก้ไขที่ก่อนหน้านี้สำหรับลูกหลานเป็น ฉันคิดว่าวิธีการใหม่นั้นชัดเจนกว่านี้เล็กน้อย
John Whitley

หนึ่ง caveat: หากบัฟเฟอร์เริ่มต้นในกลุ่มไม่ว่างดูเหมือนว่าจะเปิดบัฟเฟอร์สุดท้ายสองครั้ง ฉันจะโพสต์การอัปเดตหากฉันพบวิธีแก้ไขง่ายๆ
John Whitley

12
:tab sballดูเหมือนว่าจะทำงานได้ดีขึ้น
ggustafsson

6

1.เปิดไฟล์สองไฟล์เป็นกลุ่ม

$ vim foo bar

2.ตรวจสอบจำนวนบัฟเฟอร์

: LS
  1% a "foo"
  2 "บาร์"

3.เชนสองคำสั่ง: tabnewเพื่อเปิดแท็บใหม่และb <buffer_number>โหลดบัฟเฟอร์ที่ต้องการในแท็บ

: tabnew | ข 2

8
ปัญหาเกี่ยวกับขั้นตอนที่ 3 คือการสร้างแท็บใหม่ด้วยบัฟเฟอร์ที่ว่างเปล่าก่อนแล้วจึงเปิดบัฟเฟอร์ 2 ทำให้บัฟเฟอร์พิเศษไม่มีชื่อในรายการบัฟเฟอร์ ดีกว่าที่จะใช้:tab sb 2
rkjnsn

1
@rkjnsn คุณควรโพสต์ว่าเป็นคำตอบ - ดีที่สุดตอบคำถาม 'ฉันจะแก้ไขบัฟเฟอร์ที่มีอยู่ในแท็บใหม่ในกลุ่ม?
JonnyRaa

1
@ JonnyLeeds เรียบร้อยแล้ว
rkjnsn

4

เพียงแค่เพิ่มจุดที่คนอื่นไม่ได้พูดถึง

  • หน้าต่างปัจจุบันเป็นแท็บใหม่

หากมีหลายหน้าต่าง<C-W>Tจะย้ายหน้าต่างนี้ไปยังแท็บใหม่ อย่างไรก็ตามทางลัดนี้ใช้สำหรับ "หน้าต่าง" ไม่ใช่ "บัฟเฟอร์" หากต้องการสไตล์นี้:spหรือ<C-W>sคัดลอกบัฟเฟอร์ปัจจุบันไปที่อีกหนึ่งหน้าต่าง<C-W>Tให้ย้ายไปยังแท็บใหม่

4 keystrokes หรือ 7 keystrokes

  • บัฟเฟอร์ปัจจุบันเป็นแท็บใหม่

:tabe % เพื่อเปิดแท็บใหม่สำหรับบัฟเฟอร์ปัจจุบัน

7 การกดแป้น

  • บัฟเฟอร์ไปที่แท็บใหม่

หากใช้ปลั๊กอิน CtrlP ก็สามารถใช้ "CtrlPBuffer" แล้วมี<C-t>ทางลัดเพื่อเปิดด้วยหน้าแท็บใหม่ สไตล์นี้ง่ายต่อการสลับไปยังบัฟเฟอร์ที่แตกต่างกัน

ด้วยทางลัดของ "CtrlPBuffer" 4 การกดแป้นพิมพ์หรือมากกว่า


:tabe %คือสิ่งที่ฉันกำลังมองหามานานแล้วขอบคุณ!
pevik

ไม่:tabe %ไม่ได้เปิดแท็บใหม่สำหรับบัฟเฟอร์ปัจจุบันจริงๆ สิ่งที่เกิดขึ้นคือการ%ขยายไปยังไฟล์:tabeพา ธของบัฟเฟอร์ปัจจุบันและเปิดพา ธ นั้น เป็นกลุ่มจะเห็นว่าคุณกำลังพยายามเปิดไฟล์ที่คุณได้เปิดไว้แล้วและจะนำบัฟเฟอร์ที่คุณมีมาใช้ซ้ำ ซึ่งหมายความว่าวิธีนี้ใช้ไม่ได้กับบัฟเฟอร์ที่ไม่มีไฟล์พา ธ หากคุณเปิดไฟล์ใหม่ด้วย:newและคุณยังไม่ได้บันทึกคุณจะไม่สามารถวางมันลงบนแท็บใหม่ด้วยสิ่งนี้ คำสั่งจริงที่คุณต้องเป็นสิ่งที่ rkjnsn ใส่ในคำตอบของพวกเขา:tab sb %หรือสั้น::tab sb
Jol
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.