Два последовательных идентичных вызова echo имеют разные выходные данные в функции Vim - PullRequest
2 голосов
/ 28 сентября 2019

Оригинальный пост о Vi и Vim Beta , в котором было один интересный ответ , но пока не так много внимания.Я прошу прощения за кросспостинг, и я попрошу, чтобы оригинал был закрыт / удален.

Учитывая следующую функцию в файле .vimrc,

fu! MyFun(count)
  echo a:count
  echo a:count
  if a:count > 0
    normal ,
    call MyFun(a:count - 1)
  endif
endf

вызывает :call MyFun(3) генерируетследующий вывод.

3
3
2
2
1
1
0
0

Однако если я определю отображение nn , :<C-U>execute "call MyFun(" . v:count . ")"<CR>, то вызов :call MyFun(3) сгенерирует

3
0
2
0
1
0
0
0

Я понимаю, что отображение , дважды вызывает сам вызов функции MyFun (if a:count > 0), однако я не могу понять, как это может привести к другому результату двух последовательных вызовов echo a:count.

1 Ответ

4 голосов
/ 28 сентября 2019

Проблема заключается в перерисовке экрана (см. :h echo-redraw) в Vim.

Изменение echo на echom по-прежнему приводит к тому же (прерывистому) выводу экрана (3 0 2 0 1 0 0 0), но :mess показывает, что скрыто: 3 3 0 0 2 2 0 0 1 1 0 0 0 0.

...