vim script ждать завершения фоновой команды

и другие vi-подобные редакторы

Модератор: /dev/random

leha2000
Сообщения: 18
ОС: Gentoo, Arch

vim script ждать завершения фоновой команды

Сообщение leha2000 »

Доброй ночи, дорогие гуру.

Проблема такова:

function! To_next_line()
let line = line(".")
let line+=1
exe "Cbreak " . expand("%:p") . ":" . line
exe "Ccontinue"
exe "Cclear " . expand("%:p") . ":" . line
endfunction

Ccontinue выполняется в фоновом режиме.
Есть ли возможность принудительно дождаться ее завершения или в какую сторону нужно смотреть.
Чего-то нигде ничего не нашел, простите, если вопрос тупой.
Спасибо сказали:

Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8255
Статус: Маньяк
ОС: Arch, CentOS, Ubuntu

Re: vim script ждать завершения фоновой команды

Сообщение serzh-z »

leha2000 писал(а):
15.02.2012 02:30
Ccontinue выполняется в фоновом режиме.
Надо полагать, это особенность этого приложения и надо смотреть его опции запуска, чтобы оно не отсоединялось от терминала. Vim наоборот ожидает завершения терминальной программы и чаще возникает обратная проблема - запустить команду асинхронно.
Спасибо сказали:

leha2000
Сообщения: 18
ОС: Gentoo, Arch

Re: vim script ждать завершения фоновой команды

Сообщение leha2000 »

serzh-z писал(а):
15.02.2012 03:23
leha2000 писал(а):
15.02.2012 02:30
Ccontinue выполняется в фоновом режиме.
Надо полагать, это особенность этого приложения и надо смотреть его опции запуска, чтобы оно не отсоединялось от терминала. Vim наоборот ожидает завершения терминальной программы и чаще возникает обратная проблема - запустить команду асинхронно.


Это понятно.
Но может быть есть возможность отследить изменения, например в foldcolumn или командной строке и сделать автокомманду, если известно например, что и куда выводит плагин.
В этом случае не придется текст плагина и не будет зависание текстового редактора во время выполнения команды.
Спасибо сказали:

Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8255
Статус: Маньяк
ОС: Arch, CentOS, Ubuntu

Re: vim script ждать завершения фоновой команды

Сообщение serzh-z »

leha2000
Так "Ccontinue" - это просто какая-то команда, а не "!<external-program>"?
Спасибо сказали:

leha2000
Сообщения: 18
ОС: Gentoo, Arch

Re: vim script ждать завершения фоновой команды

Сообщение leha2000 »

serzh-z писал(а):
15.02.2012 16:14
leha2000
Так "Ccontinue" - это просто какая-то команда, а не "!<external-program>"?


Ccontinue это команда продолжения отладки, плагина Pyclewn (http://pyclewn.sourceforge.net/)
Она выполняется как команда редактора, хотя является внешней программой, т.к. плагин pyclewn это не только vimscript, а также куча питоновых скриптов, которые работают с gdb и pybd. Интерфейс отладки довольно убог, поэтому хотел сделать несколько улучшений, не влезая в код.
Эта команда производит отображение '=>' в фолде на месте брейкпоинта.
Т.е. если бы отследить изменения в фолде можно бы autocmd сделать, если я это правильно понимаю.
Спасибо сказали:

Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8255
Статус: Маньяк
ОС: Arch, CentOS, Ubuntu

Re: vim script ждать завершения фоновой команды

Сообщение serzh-z »

leha2000 писал(а):
15.02.2012 02:30
сть ли возможность принудительно дождаться ее завершения или в какую сторону нужно смотреть.
Быстрый анализ исходников наводит на мысль, что это вообще не слишком-то невозможно. По-крайней мере без правки исходников Pyclewn. Он там, судя по всему, весь такой из себя асинхронный. Пишет в CLI gdb команду и продолжает своё выполнение.

Вообще, у gdb есть команды для построчного выполнения: next/step и т.д. Логично предположить, что у Pyclew должны быть обёртки для этих команд.

P.S.: ещё в мануале Pyclewn есть раздел про некие async-options. Возможно, что какие-то из этих опций выставлены по умолчанию?
Спасибо сказали:

leha2000
Сообщения: 18
ОС: Gentoo, Arch

Re: vim script ждать завершения фоновой команды

Сообщение leha2000 »

serzh-z писал(а):
15.02.2012 21:35
leha2000 писал(а):
15.02.2012 02:30
сть ли возможность принудительно дождаться ее завершения или в какую сторону нужно смотреть.
Быстрый аналих исходников наводит на мысль, что это вообще не слишком-то невозможно. По-крайней мере без правки исходников Pyclewn. Он там, судя по всему, весь такой из себя асинхронный. Пишет в CLI gdb команду и продолжает своё выполнение.

Вообще, у gdb есть команды для построчного выполнения: next/step и т.д. Логично предположить, что у Pyclew должны быть обёртки для этих команд.

P.S.: ещё в мануале Pyclewn есть раздел про некие async-options. Возможно, что какие-то из этих опций выставлены по умолчанию?


Понял. Печально. Хороша задумка, да реализация г. Особенно что касается pdb. Поставляемых обертки ограничиваются командами дебугера, и то работают далеко не все. Поэтому и хотел свои обертки написать. Асинхронные опции - это не то. Документацию то я изучал. Они как раз по умолчанию выключены и могут быть включены пользователем, но эта асинхронность pyclewn по отношению к gdb, а не к VIM.
Да и вообще хотелось бы сделать данный костыль средствами VIM, а не средствами копания в коде pyclewn с неизвестным результатом.
Можно ведь с помощью autocmd event отследить чего на экране меняется? Ну или в буферах. Почему нельзя в вертикальной полосе. Кстати не очень понятно что это есть за полоса из двух столбцов появляется. На окно не похожа, думал что фолдколумн, но включил фолдинг, а эта хня все равно появляется.
Как вообще определить что это?
Спасибо сказали:

Аватара пользователя
ZyX
Сообщения: 355
ОС: Gentoo

Re: vim script ждать завершения фоновой команды

Сообщение ZyX »

leha2000 писал(а):
16.02.2012 16:11
Кстати не очень понятно что это есть за полоса из двух столбцов появляется. На окно не похожа, думал что фолдколумн, но включил фолдинг, а эта хня все равно появляется.

Vim слева может показывать всего три вида информации:
  • Свёртки (:h 'foldcolumn')
  • Знаки (:h signs)
  • Номера линий (:h 'nu', :h 'rnu')

По описанию больше всего похоже на второе. Отключается путём изучения вывода execute 'sign place buffer='.bufnr('%') с последующим удалением всех знаков с помощью sign unplace (:h :sign-unplace).
leha2000 писал(а):
16.02.2012 16:11
Как вообще определить что это?
  • Выучить справку vim. Всю.
  • Взять gdb, собрать vim с отладочной информацией и посмотреть стёк вызовов при выводе символа, принадлежащего данному столбцу.
Спасибо сказали:

leha2000
Сообщения: 18
ОС: Gentoo, Arch

Re: vim script ждать завершения фоновой команды

Сообщение leha2000 »

Благодарю за ответы.
Буду пытаться. Надеюсь, что про заучивание справки была шутка.
Если хватить времени, мужества и упорства отпишусь о результатах, но задор потихонечку пропадает.
Спасибо сказали:

Аватара пользователя
ZyX
Сообщения: 355
ОС: Gentoo

Re: vim script ждать завершения фоновой команды

Сообщение ZyX »

leha2000 писал(а):
17.02.2012 17:03
Благодарю за ответы.
Буду пытаться. Надеюсь, что про заучивание справки была шутка.
Если хватить времени, мужества и упорства отпишусь о результатах, но задор потихонечку пропадает.

Нет, не шутка. Если вы видите непонятную фигню в Vim (колонки, строки, выделение, …), то есть только два пути своими силами узнать, что это такое. Оба описаны выше. Хотя нет, ещё можно изучить исходники Vim.
Спасибо сказали: