Перемещение курсора в Vim после сохранения
Я начал испытывать странное поведение в Vim - при сохранении файла (:w
) курсор переместится в определенное место в файле. Расположение является постоянным и отличается для разных файлов, то есть это может быть начало функции и т. Д., Но если я переместу строку вверх или вниз, местоположение после сохранения останется.
Мой.vimrc довольно длинный, и пока я пробовал только :noautocmd
команда.
Как я могу это исправить или отладить?
2 ответа
Из документов по синтетике:
При значении 0 курсор не будет прыгать автоматически. > let g:syntastic_auto_jump = 0 <При значении 1 курсор всегда будет переходить к первой обнаруженной проблеме независимо от ее типа. > let g:syntastic_auto_jump = 1 <При значении 2 курсор перейдет к первой обнаруженной проблеме, но только если эта ошибка является ошибкой. > let g:syntastic_auto_jump = 2 <При значении 3 курсор перейдет к первой обнаруженной ошибке, если таковая имеется. Если все обнаруженные проблемы являются предупреждениями, курсор не будет прыгать. > let g:syntastic_auto_jump = 3
Итак, добавление
let g:syntastic_auto_jump = 0
решил проблему. Непонятно, почему проблема появилась внезапно, но вот решение для тех, кто в ней нуждается.
У меня была такая же проблема, а не из-за syntastic_auto_jump
установка, но из-за команды, которую я поместил для конечного пробела:
autocmd FileType * autocmd BufWritePre <buffer> :%s/\s\+$//e
Это перемещало курсор на последнюю строку, которую заменял пробел. По сути, любая команда, вносящая изменения в документ и изменяющая курсор без его восстановления, может вызывать аналогичное поведение.
PS: конечный пробел можно исправить либо с помощью функции, которая восстанавливает курсор, как показано ниже (взято отсюда)
function! <SID>StripTrailingWhitespaces()
let l = line(".")
let c = col(".")
%s/\s\+$//e
call cursor(l, c)
endfun
autocmd BufWritePre * :call <SID>StripTrailingWhitespaces()
или с помощью плагина, который заменяет конечные пробелы и восстанавливает курсор для вас