ฉันจะย้ายเคอร์เซอร์ไปที่กึ่งกลางของบรรทัดปัจจุบันได้อย่างไร


17

มีวิธีที่ฉันสามารถเลื่อนเคอร์เซอร์ไปที่กึ่งกลางของบรรทัดปัจจุบันหรือไม่? (ตรงกลางของบรรทัดข้อความ - ไม่ใช่กึ่งกลางของความกว้างหน้าจอ)

ฉันสงสัยว่ามีทางลัดคล้ายกับMที่เลื่อนเคอร์เซอร์ไปที่กลางหน้าจอหรือไม่

แก้ไข : เพิ่มความกระจ่างในวงเล็บ


2
ตรงกลางของเส้นเต็มหรือกลางความกว้างของหน้าจอคืออะไร?
muru

@muru กำลังคิดว่าจะอยู่ตรงกลางของสายเต็ม
thameera

2
คุณสามารถเพิ่มคำถามลงไปในคำถามได้หรือไม่ และคุณคาดหวังว่าจะเกิดอะไรขึ้นกับการห่อ
muru

คำตอบ:


16

ฉันไม่รู้วิธีใด ๆ ในตัวที่จะทำสิ่งนี้อย่างไรก็ตามคุณสามารถมีแผนที่ได้อย่างง่ายดาย:

nnoremap µ :exe 'normal! '.(virtcol('$')/2).'\|'<cr>

@Ingo Karkat เสนอตัวแปรต่อไปนี้ซึ่งทำงานในโหมด VISUAL

noremap <expr> gM (virtcol('$') / 2) . '<Bar>'

น่าเสียดายที่มันถูกเรียกใช้ในโหมดเลือก เป็นผลให้ฉันชอบทั้งคู่:

nnoremap <expr> gM (virtcol('$') / 2) . '<Bar>'
xnoremap <expr> gM (virtcol('$') / 2) . '<Bar>'

3
ตัวแปรนี้จะทำงานอย่างถูกต้องสำหรับโหมดภาพ:noremap <expr> gM (virtcol('$') / 2) . '<Bar>'
Ingo Karkat

15

ในตัวgmทำสิ่งนี้อย่างแน่นอน


7
หมายเหตุที่ว่านี้จะพาคุณไปที่ตรงกลางของเส้นที่เกี่ยวกับความกว้างของคอนโซลไม่เกี่ยวกับความยาวสาย ดังนั้นถ้าคุณมีตัวอักษร 10 บรรทัดและคอนโซลที่มีความกว้าง 80 ตัวอักษรเคอร์เซอร์จะลงท้ายด้วยอักขระที่ 10 ในบรรทัด (เนื่องจาก "พยายาม" เพื่อไปยังลำดับที่ 40) ไม่ใช่อันดับที่ 5
apnorton

3
อ๋อ จากคำถามมันไม่ชัดเจนว่าเรากำลังมองหาตรงกลางของบรรทัดหรือตรงกลางของหน้าจอ จากการเปรียบเทียบกับMผมถือว่าหน้าจอ
tommcdo

1
ที่จริงฉันเพิ่งลองสิ่งนี้บนหน้าจอกว้าง (ประมาณ 180 ตัวอักษร) ด้วยข้อความ 80- ถ่าน เคอร์เซอร์ไปที่ท้ายบรรทัด ดูเหมือนจะเป็นคำสั่งที่มีประโยชน์มาก
Ben

@Ben มันไปที่จุดสิ้นสุดของบรรทัดหรือมันใกล้เคียงกับกึ่งกลางของความกว้างของหน้าจอเท่าที่จะเป็นไปได้? ลองกับสายที่มากกว่า 50% :set virtualedit=allที่กว้างเป็นหน้าจอหรือลองกับ
8bittree

ใช่ แต่ OP ขอให้คำสั่งข้ามไปที่กลางข้อความบรรทัดไม่ใช่ตรงกลางของหน้าจอ ดังนั้นจึงไม่ตอบคำถาม
Ben

3

เพื่อเพิ่มคำตอบของ Luc นอกจากนี้ยังมีปลั๊กอินEasymotionซึ่งทำให้การย้ายไปยังตำแหน่งที่ต้องการเป็นไปอย่างรวดเร็ว การกด<Leader><Leader>wจะเน้นปุ่มที่คุณสามารถกดเพื่อย้ายไปยังคำเฉพาะ ด้วยวิธีนี้คุณสามารถย้ายไปยังคำที่อยู่ตรงกลางของบรรทัดปัจจุบันได้อย่างง่ายดาย


1

หากคุณต้องการไปที่กลางข้อความ (โดยไม่คำนึงถึงช่องว่างในตอนต้นของบรรทัด) สิ่งนี้จะทำงาน:

function! s:Gm()
  execute 'normal! ^'
  let first_col = virtcol('.')
  execute 'normal! g_'
  let last_col  = virtcol('.')
  execute 'normal! ' . (first_col + last_col) / 2 . '|'
endfunction
nnoremap <silent> gm :call <SID>Gm()<CR>

อย่างไรก็ตามฉันไม่คิดว่ามันจะทำงานในโหมดภาพได้


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