ไปที่กึ่งกลางบรรทัดในกลุ่ม


14

ฉันรู้ว่า 0 ไปที่จุดเริ่มต้นของบรรทัดและ $ ไปยังจุดสิ้นสุด แต่มีบางอย่างสำหรับกลาง?

คำตอบ:


11
:call cursor(0, len(getline('.'))/2)

4
สิ่งนี้จะมีประโยชน์พอสมควรหากมันถูกแมปเช่น:: nnoremap gm: เคอร์เซอร์โทร (0, len (getline ('.')) / 2) <cr>
Heptite

3
virtcol ('$') / 2 ก็เพียงพอแล้ว
Luc Hermitte

@Luc Hermitte: ดี แต่ไม่ใช่พฤติกรรมที่ดีที่สุดเมื่อมีแท็บที่เกี่ยวข้อง
ephemient

นั่นเป็นเหตุผลที่ฉันใช้ virtcol แทน col :) แต่แน่นอนเราควรใช้ | และไม่ใช่เคอร์เซอร์ () BTW, len () จะไม่ให้ผลดีกว่านี้ นอกจากนี้ len จะให้ปัญหาอื่น ๆ เกี่ยวกับอักขระหลายไบต์
Luc Hermitte

8

การพิมพ์gmจะทำ แต่จะเคลื่อนที่ตามเส้นหน้าจอ (ดู:help gm) เพื่อให้มันทำงานกับบรรทัดข้อความหนึ่งสามารถทำการแมปคำสั่งนี้:

map gm :call cursor(0, virtcol('$')/2)<CR>

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

@teggy: ฉันเห็น ฉันแก้ไขโซลูชันเพื่อทำการแมป gm ใหม่ให้อยู่กึ่งกลางบรรทัดข้อความ อย่างที่คุณเห็นมันผสมผสานโซลูชันจาก ephemient และ Luc Hermitte
JooMing

ดังที่ ephemient ชี้ให้เห็นมันยังคงมีปัญหากับ tarbs ที่ยากเนื่องจากเคอร์เซอร์ () นับเป็นอักขระแต่ละตัว ยิ่งไปกว่านั้นมันจะไม่ทำงานกับอักขระหลายไบต์เช่นกัน
Luc Hermitte

7

นี่เป็นวิธีแก้ปัญหาที่จะเคารพตัวอักษรแบบฮาร์แท็บและหลายไบต์เช่นกัน

:exe 'normal '.(virtcol('$')/2).'|'

1

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

สิ่งที่ฉันชอบคือ<leader><leader>sตัวละครที่คุณต้องการข้ามไป Easy Motion จะแทนที่การแข่งขันทั้งหมดด้วยตัวอักษรที่แตกต่างกันเพื่อให้คุณเลือก ดูบทช่วยสอน มันเป็นปลั๊กอินที่เปลี่ยนแปลงชีวิต ...

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