Остановить движение курсора при переключении нумерации строк - PullRequest
0 голосов
/ 01 октября 2019

Я настроил некоторые параметры в моем .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

Не решает проблему, хотя.

1 Ответ

0 голосов
/ 03 октября 2019

Если вы не укажете возвращаемое выражение, будет возвращено 0, которое оценивает движение "перейти к первому символу".

Вы хотите вернуть пустую строку:

function! SetLineNumbersVisual()
   set relativenumber
   return ''
endfunction
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...