2013-12-19 3 views
2

Мне нужен триггер autocmd для использования, когда курсор перемещается между строками.Vimscript: триггер, когда курсор перемещается между строками

Сейчас я использую:

:autocmd CursorMoved * call MyFunc() 

С его MyFunc выполняется в каждом движении курсора, но мне нужен триггер только при наведении курсора вверх или вниз (не правый и левый)

EDIT:

Проверка линии курсора с последней записанной строкой для меня.

if line(".") != s:recordedLine 
let s:recordedLine = line(".") 
.... 
+2

сохранить текущий номер строки в var, с запущенным CursorMoved, сравнить номер новой строки с var, чтобы решить, была ли она перенесена в другую строку? – Kent

+0

Отлично! Меня устраивает. – Antonio

+0

Вот статья http://vim.wikia.com/wiki/Timer_to_execute_commands_periodically –

ответ

3

Я не думаю, что вы можете делать именно то, что вы пытаетесь сделать. Вероятно, вам нужно будет звонить MyFunc() каждый раз, но при условии, что в функции будет определено, нужно ли выполнять действие. Возможно, вы могли бы использовать getchar(), чтобы выяснить, был ли нажат j или k. Или, возможно, вы можете записать текущий номер строки (let line=getline('.')) и сравнить его с предыдущим номером строки.

+1

getchar() не очень хорошая идея, а что насчет '(,), {,}, 'm,' [' – Kent

+1

Достаточно. Есть много способов перепрыгнуть одну или несколько линий. Сравнение номеров строк было бы лучшим подходом. –

 Смежные вопросы

  • Нет связанных вопросов^_^