คำสั่ง“ set” มีผลกับบัฟเฟอร์ที่ใช้งานหรือไม่?


14

ฉันมีสองบัฟเฟอร์ในกลุ่ม:

:ls
  1 %a   ".vimrc"                       line 1
  2 #h   "script.sh"                    line 1
Press ENTER or type command to continue

เท่าที่เห็นข้างต้นฉันอยู่ในบัฟเฟอร์แรก ตอนนี้ถ้าฉันรัน:set softtabstop=16คำสั่งแล้วฉันคาดว่ามันจะส่งผลกระทบต่อบัฟเฟอร์ทั้งสอง อย่างไรก็ตามนี่ไม่ใช่ตัวอักษร - ในขณะที่stsค่าสำหรับบัฟเฟอร์แรกถูกเปลี่ยนแน่นอนและTabคีย์จะแทรกอักขระแท็บสี่ตัว ( ts=4) จากนั้นสำหรับบัฟเฟอร์ที่สองstsค่ายังคงอยู่4:

:ls
  1 #h + ".vimrc"                       line 1
  2 %a + "script.sh"                    line 1
  softtabstop=4
Press ENTER or type command to continue

เหตุผลที่เป็นเช่นนั้น? ฉันคิดว่าsetมีผลกับบัฟเฟอร์ทั้งหมดและsetlocalมีผลเฉพาะบัฟเฟอร์ที่ใช้งานอยู่ ..

คำตอบ:


25

ตัวเลือกที่สามารถระดับโลก , หน้าต่างท้องถิ่นหรือบัฟเฟอร์ท้องถิ่น

เมื่อคุณโลกตัวเลือกค่าใหม่เป็นระดับโลก:set

เมื่อคุณโลกตัวเลือกค่าใหม่เป็นท้องถิ่น:setlocal

เมื่อคุณท้องถิ่นตัวเลือกค่าใหม่เป็นท้องถิ่น:set

softtabstopเป็นตัวเลือกบัฟเฟอร์ท้องถิ่นการเปลี่ยนค่าจะส่งผลกระทบต่อบัฟเฟอร์ปัจจุบันเท่านั้น

"ขอบเขต" ของตัวเลือกที่ระบุไว้ใน:help option:

'softtabstop' 'sts'    number    (default 0)
                       local to buffer
                       {not in Vi}
Number of spaces that a <Tab> counts[...]

:help local-options, :help :setlocalและ:help global-localอธิบายทุกสิ่งโดยละเอียด


3
:setglobalนอกจากนี้ยังมี
Sato Katsura

3
นอกจากนี้ตัวเลือกบางตัวยังมีทั่วโลกไม่ว่าคุณจะตั้งค่าอย่างไร 'encoding'เช่น
แอนโทนี

มีวิธีการตั้งค่าฟังก์ชั่นท้องถิ่นโดยรหัสบัฟเฟอร์และค่าตัวเลือกที่มีการvimscriptเรียกใช้ฟังก์ชั่นหรือไม่?
St.Antario

มีฟังก์ชั่นsetbufvarที่สามารถใช้เพื่อให้บรรลุ ไม่พบมันในตอนแรก
St.Antario

2

ไม่ใช่ผู้เชี่ยวชาญ @Martin แต่จากการอ่าน:help setคุณจะต้อง " เลิกตั้ง" ค่าโลคัลของstsในแต่ละบัฟเฟอร์เพื่อให้บัฟเฟอร์นั้นรับค่าโกลบอลใหม่ใด ๆ setlocal sts= (หรือสำหรับธงบูลีนsetlocal flag<) ค่อนข้างเหมาะสมการตั้งค่าท้องถิ่นเริ่มต้นเป็นค่าสากลปัจจุบันเมื่อเปิดจากนั้นเก็บค่าท้องถิ่นจนกว่าจะบอกเป็นอย่างอื่น หากไม่มีการตั้งค่าในตัวเครื่องควรรับค่าส่วนกลางใหม่

setอีกครั้งไม่ได้เป็นผู้เชี่ยวชาญผมอันตรายเดาที่ว่าบัฟเฟอร์ที่สองมีการตั้งค่าในท้องถิ่นอย่างชัดเจนก่อนที่ต่อมา มากกว่า 50/50 ที่ความเข้าใจของฉันผิดที่ฉันยังไม่ชัดเจนในสิ่งที่แตกต่างระหว่างsetและsetglobalเป็น

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