มีวิธีที่ฉันสามารถเลื่อนเคอร์เซอร์ไปที่กึ่งกลางของบรรทัดปัจจุบันหรือไม่? (ตรงกลางของบรรทัดข้อความ - ไม่ใช่กึ่งกลางของความกว้างหน้าจอ)
ฉันสงสัยว่ามีทางลัดคล้ายกับMที่เลื่อนเคอร์เซอร์ไปที่กลางหน้าจอหรือไม่
แก้ไข : เพิ่มความกระจ่างในวงเล็บ
มีวิธีที่ฉันสามารถเลื่อนเคอร์เซอร์ไปที่กึ่งกลางของบรรทัดปัจจุบันหรือไม่? (ตรงกลางของบรรทัดข้อความ - ไม่ใช่กึ่งกลางของความกว้างหน้าจอ)
ฉันสงสัยว่ามีทางลัดคล้ายกับMที่เลื่อนเคอร์เซอร์ไปที่กลางหน้าจอหรือไม่
แก้ไข : เพิ่มความกระจ่างในวงเล็บ
คำตอบ:
ฉันไม่รู้วิธีใด ๆ ในตัวที่จะทำสิ่งนี้อย่างไรก็ตามคุณสามารถมีแผนที่ได้อย่างง่ายดาย:
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>'
noremap <expr> gM (virtcol('$') / 2) . '<Bar>'
ในตัวgm
ทำสิ่งนี้อย่างแน่นอน
M
ผมถือว่าหน้าจอ
:set virtualedit=all
ที่กว้างเป็นหน้าจอหรือลองกับ
เพื่อเพิ่มคำตอบของ Luc นอกจากนี้ยังมีปลั๊กอินEasymotionซึ่งทำให้การย้ายไปยังตำแหน่งที่ต้องการเป็นไปอย่างรวดเร็ว การกด<Leader><Leader>w
จะเน้นปุ่มที่คุณสามารถกดเพื่อย้ายไปยังคำเฉพาะ ด้วยวิธีนี้คุณสามารถย้ายไปยังคำที่อยู่ตรงกลางของบรรทัดปัจจุบันได้อย่างง่ายดาย
หากคุณต้องการไปที่กลางข้อความ (โดยไม่คำนึงถึงช่องว่างในตอนต้นของบรรทัด) สิ่งนี้จะทำงาน:
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>
อย่างไรก็ตามฉันไม่คิดว่ามันจะทำงานในโหมดภาพได้
gM
เลื่อนเคอร์เซอร์ไปที่กึ่งกลางข้อความ:
https://vimhelp.org/motion.txt.html#gM
สิ่งนี้ได้รับการดำเนินการในเดือนตุลาคม 2019: https://github.com/manuelschiller/vim/commit/a267c57acdd8843a91eed2cede6ef02d970147fd