Чи є спосіб перенести курсор на середину поточного рядка? (середина рядка тексту - не середина ширини екрана)
Мені було цікаво, чи є ярлик, схожий на Mте, що переміщує курсор до середини екрана.
EDIT : Додано уточнення всередині дужок
Чи є спосіб перенести курсор на середину поточного рядка? (середина рядка тексту - не середина ширини екрана)
Мені було цікаво, чи є ярлик, схожий на Mте, що переміщує курсор до середини екрана.
EDIT : Додано уточнення всередині дужок
Відповіді:
Я не знаю жодного вбудованого способу зробити це, однак, ви можете легко створити карту для цього:
nnoremap µ :exe 'normal! '.(virtcol('$')/2).'\|'<cr>
@Ingo Karkat запропонував наступний варіант, який також працює у VISUAL-режимі.
noremap <expr> gM (virtcol('$') / 2) . '<Bar>'
На жаль, він також спрацьовує в режимі SELECT. Як наслідок, я віддаю перевагу парі:
nnoremap <expr> gM (virtcol('$') / 2) . '<Bar>'
xnoremap <expr> gM (virtcol('$') / 2) . '<Bar>'
noremap <expr> gM (virtcol('$') / 2) . '<Bar>'
Вбудований gm
робить саме це.
M
, я припустив, що екран.
:set virtualedit=all
.
Щоб додати відповідь Люка, є також плагін 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