2013-03-01 1 views
3

Я пытаюсь написать функцию Vim, которая выполнит серию действий, а затем вернется к строке, где функция была впервые запущена. Возможно ли каким-то образом написать функцию Vim, которая может выполнять это поведение?Функция Vim для возврата в текущую строку

Например, если я где-то в буфере vim, скажите строку 55 и введите gg, чтобы перейти к первой строке, я могу вернуться к строке 55 с помощью <C-o>? Как написать это поведение в функции Vim? Заранее спасибо за помощь.

+0

Почему бы просто не выполнить ': '''? – abcd

ответ

7

Прежде всего, вы можете делать все в функции, которую вы обычно набираете. Чтобы использовать <C-o>, вам просто нужно правильно вытекание:

:execute "normal! \<C-o>" 

Кроме того, вы можете также использовать специальные функции Vimscript. Простейшее является cursor(), который не изменяет список перехода (используйте line('.'), чтобы сохранить исходное положение в переменной, я закодировав здесь):

:call cursor(55, 0) 

Если вы хотите, чтобы ваши действия были полностью невидимым, Однако восстановить позицию курсора недостаточно. Ходы могут также повлиять на окно просмотра; то есть, какие строки буфера отображаются в окне. Чтобы сохранить это в неприкосновенности, используйте:

:let save_view = winsaveview() 
" Your actions here 
:call winrestview(save_view) 
" Now the window looks exactly as before. 
Смежные вопросы