Я настроил некоторые параметры в моем .vimrc, чтобы он переключался на относительную нумерацию строк в визуальных режимах и переключался обратно на абсолютный при нажатии escape. Проблема в том, что каждый раз, когда я переключаю режимы, он возвращает курсор к первому столбцу. Я пытаюсь остановить это.
Мой оригинальный код выглядит следующим образом и вдохновлен этим сообщением.
Итак, мой код
autocmd InsertEnter * :set norelativenumber
autocmd InsertLeave * :set relativenumber
function! SetLineNumbersVisual()
set relativenumber
return
endfunction
function! ResetLineNumbering()
set norelativenumber
return
endfunction
map <Esc> :call ResetLineNumbering()<CR>
vnoremap <silent> <expr> <SID>SetLineNumbersVisual SetLineNumbersVisual()
nnoremap <silent> <script> v v<SID>SetLineNumbersVisual
nnoremap <silent> <script> V V<SID>SetLineNumbersVisual
nnoremap <silent> <script> <C-v> <C-v><SID>SetLineNumbersVisual
augroup LineNumberSwap
autocmd!
autocmd InsertEnter * call ResetLineNumbering()
autocmd InsertLeave * call ResetLineNumbering()
autocmd CursorHold * call ResetLineNumbering()
augroup END
Так что код меняется на относительныйкогда в любом визуальном режиме, а затем при выходе возвращает его к абсолютному. Что также делает это постоянно перемещать курсор назад к первому столбцу.
Чтобы исправить это, я попытался определить положение курсора перед установкой режима, а затем заставить курсор двигаться назад, но, похоже, это не работает.
function! SetLineNumbersVisual()
let l:cur_pos = getpos(".")
set relativenumber
call cursor(l:cur_pos[1],l:cur_pos[2])
return
endfunction
function! ResetLineNumbering()
let l:cur_pos = getpos(".")
set norelativenumber
call cursor(l:cur_pos[1],l:cur_pos[2])
return
endfunction
Не решает проблему, хотя.