จะปิดการใช้งานการเลื่อนในแนวนอนได้อย่างไร?


37

ฉันมีตัวละครที่ซ่อนอยู่ในบัฟเฟอร์และการเลื่อนแนวนอนทำให้การจัดตำแหน่งใหญ่ขึ้น

มีวิธีการปิดการใช้งานหรือไม่? ฉันไม่พบตัวเลือกที่เกี่ยวข้องใด ๆ

การสาธิตการเลื่อนในแนวนอนไม่ดี

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


6
คุณไม่สามารถปิดการใช้งานได้ แต่คุณสามารถ:set wrap
EvergreenTree

8
@Enuy สิ่งที่ฉันหมายถึงคือเส้นนั้นยาวกว่าความกว้างของหน้าต่างจริง ๆแต่มีการซ่อนข้อความบางส่วน (รหัสสีที่คล้ายกับทุบตี) ดังนั้น Vim จึงคิดว่ามันมาถึงขอบหน้าต่างแล้ว แต่มันมองไม่เห็น ฉันว่านี่มีคุณสมบัติเป็นข้อผิดพลาด
tommcdo

8
@tommcdo ใช่ฉันเข้าใจความหมายของคุณ มีปัญหาที่คล้ายกันกับการตัดเส้นเฉพาะเมื่อชิ้นส่วนที่ปกปิดที่ปลายสายเป็นสาเหตุของการพันและมันได้ WONTFIX จาก Bram: code.google.com/p/vim/issues/detail?id=260
Enuy

3
นั่นเป็นเหตุผลที่ฉันกำลังค้นหาโซลูชันอื่น - เพื่อปิดใช้งานการเลื่อนแนวนอนทั้งหมด
Enuy

3
สิ่งที่ฉันคิดว่าใกล้เคียงที่สุดคือถ้าคุณอยู่ในอาคารผู้โดยสารคุณสามารถใช้<c-s>เพื่อหยุดเครื่องชั่วคราวเพื่อที่หน้าจอจะไม่อัปเดต จากนั้นคุณสามารถทำการเปลี่ยนแปลงและกลับไปที่จุดเริ่มต้นของบรรทัดแล้วกด<c-q>เพื่อเริ่มการทำงานต่อ ตัวเลือกอื่น ๆ ที่อาจไม่เป็นประโยชน์: ตรวจสอบให้แน่ใจว่าจำนวนอักขระที่ซ่อนอยู่เท่ากันนั้นอยู่ระหว่างอักขระทุกตัวที่มองเห็นหรือขยายหน้าต่าง
Matt Boehm

คำตอบ:


2

วิธีปิดการใช้งานการเลื่อนแนวนอน

ฉันเขียนโซลูชันที่ปิดใช้งานการเลื่อนในแนวนอน (โดยการลบคำแนะนำของ@ ЯрославРахматуллин ) แต่ฉันไม่คิดว่าคุณจะชอบ:

augroup NoScrollPlease
  autocmd!
  autocmd CursorMoved * norm!99zH
augroup END

วิธีนี้ช่วยป้องกันการเลื่อนไปทางขวาด้วยวิธีที่แม่นยำอย่างไม่น่าเชื่อเพียงแค่เลื่อนกลับไปอีกครั้ง *

* เนื่องจากฉันไม่ทราบว่าคุณเลื่อนไปทางขวาหรือเส้นของคุณนานเท่าไหร่ฉันจึงเลื่อนหน้าจอขนาดครึ่งหน้าจอ 99 "ไกล" โดยพลการ โปรดทราบว่าฉันไม่ได้สนใจที่จะตรวจสอบว่าคุณได้เลื่อนไปทางขวาจริงหรือไม่ก่อนที่จะเลื่อน "ย้อนกลับ" ไปทางซ้าย ถ้าคุณจริงตั้งใจจะใช้วิธีนี้คุณอาจต้องการที่จะเคาะบางสิ่งบางอย่างขึ้นโดยการเปรียบเทียบค่าของgetcurpos(), และ'sidescroll''columns'

ทำไมคุณไม่อยากทำเช่นนั้น

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

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

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

ตัวเลือกอื่น?

ดังนั้นฉันจึงกลัววิธีแก้ปัญหาตามแผนของคุณจะไม่เลื่อนออกไป หากคุณต้องการวิธีแก้ปัญหาที่ใช้งานได้กับปัญหาทั่วไปก็จะต้องมีการดำเนินการในซอร์สโค้ด Vim

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

จากผลลัพธ์ที่ยังไม่ได้กำหนดและการกล่าวถึงvim-plugin-AnsiEscในเอกสารนี้อาจเป็นสิ่งที่เป็นไปได้สำหรับพวกเขาที่จะนำไปใช้ แต่มันยากที่จะพูดได้อย่างแน่นอนโดยไม่ทราบว่าปลั๊กอินทำงานอย่างไร


0

หากคุณมีวิธีแก้ไขไฟล์คุณอาจต้องการตัดการตั้งค่าสีด้วย\[และ\]ตามที่อธิบายไว้ที่นี่ :

[... ] สิ่งที่ทำไปแล้วคือการใส่ '\ 033 [1; 33m' ที่เริ่มสีเหลืองใน '[' และ ']' ซึ่งบอกเชลล์ว่า "ทุกสิ่งระหว่างวงเล็บเหลี่ยมที่หลบหนีเหล่านี้รวมถึงวงเล็บด้วย เป็นตัวละครที่ไม่ได้พิมพ์ [... ]

มิฉะนั้นรหัสสีทั้งหมดจะถูกพิจารณาว่าเป็นอักขระดังนั้นอาจมีการพิจารณาในการเลื่อนแนวนอน

ฉันไม่แน่ใจว่านี่เป็นปัญหา แต่การได้เห็นที่มาของปฏิทิน (พร้อมsyntax off) และพฤติกรรมปัจจุบันทำให้ฉันคิดอย่างนั้น


ปัญหาไม่ใช่สี แต่เป็นตัวอักษรที่ซ่อนอยู่ในconcealสถานที่ (ดูการอภิปรายในความคิดเห็น)
Rich

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

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

0

แก้ไข: นี่เป็นข้อผิดพลาดที่รู้จักปิด "จะไม่แก้ไข": https://github.com/vim/vim/issues/260

คำตอบเดิม:

เสียงเรียกเข้าของฉันไม่เลื่อนในแนวนอนจนกระทั่งเคอร์เซอร์ชนกับขอบของหน้าจอ

คุณกำลังใช้sidescrolloff?

ฉันไม่รู้เกี่ยวกับการปิดใช้งานการเลื่อนในแนวนอนทั้งหมด แต่การตั้งค่านี้ควรรอจนกว่าเคอร์เซอร์จะหายไปจากขอบ:

:set sidescrolloff=0

ปัญหาที่มีอยู่แม้จะมี'sidescrolloff=0'เพราะเป็นกลุ่มที่เชื่อว่าเคอร์เซอร์ได้ไปปิดขอบ: มันฐานการคำนวณในข้อความที่ชัดแจ้งไม่ข้อความที่มองเห็น
Rich

โอ้นั่นเป็นรถบั๊กกี้จริงๆ ฉันพบรายงานข้อผิดพลาดเกี่ยวกับสิ่งนี้และเพิ่มลงในคำตอบของฉัน ดูแลเป็นกลุ่มไม่ต้องการที่จะแก้ไข
JasonWoof

ไม่ใช่การแก้ไขข้อบกพร่องนี้ ... แต่บางทีคุณอาจใช้การระบายสีปฏิทินด้วยข้อความธรรมดาในบัฟเฟอร์และ prop_type_add () และ prop_add () สำหรับ colours / etc
JasonWoof

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