Доброй ночи, дорогие гуру.
Проблема такова:
function! To_next_line()
let line = line(".")
let line+=1
exe "Cbreak " . expand("%:p") . ":" . line
exe "Ccontinue"
exe "Cclear " . expand("%:p") . ":" . line
endfunction
Ccontinue выполняется в фоновом режиме.
Есть ли возможность принудительно дождаться ее завершения или в какую сторону нужно смотреть.
Чего-то нигде ничего не нашел, простите, если вопрос тупой.
vim script ждать завершения фоновой команды
Модератор: /dev/random
- serzh-z
- Бывший модератор
- Сообщения: 8259
- Статус: Маньяк
- ОС: Arch, Fedora, Ubuntu
- Контактная информация:
Re: vim script ждать завершения фоновой команды
Надо полагать, это особенность этого приложения и надо смотреть его опции запуска, чтобы оно не отсоединялось от терминала. Vim наоборот ожидает завершения терминальной программы и чаще возникает обратная проблема - запустить команду асинхронно.
Re: vim script ждать завершения фоновой команды
Это понятно.
Но может быть есть возможность отследить изменения, например в foldcolumn или командной строке и сделать автокомманду, если известно например, что и куда выводит плагин.
В этом случае не придется текст плагина и не будет зависание текстового редактора во время выполнения команды.
- serzh-z
- Бывший модератор
- Сообщения: 8259
- Статус: Маньяк
- ОС: Arch, Fedora, Ubuntu
- Контактная информация:
Re: vim script ждать завершения фоновой команды
leha2000
Так "Ccontinue" - это просто какая-то команда, а не "!<external-program>"?
Так "Ccontinue" - это просто какая-то команда, а не "!<external-program>"?
Re: vim script ждать завершения фоновой команды
Ccontinue это команда продолжения отладки, плагина Pyclewn (http://pyclewn.sourceforge.net/)
Она выполняется как команда редактора, хотя является внешней программой, т.к. плагин pyclewn это не только vimscript, а также куча питоновых скриптов, которые работают с gdb и pybd. Интерфейс отладки довольно убог, поэтому хотел сделать несколько улучшений, не влезая в код.
Эта команда производит отображение '=>' в фолде на месте брейкпоинта.
Т.е. если бы отследить изменения в фолде можно бы autocmd сделать, если я это правильно понимаю.
- serzh-z
- Бывший модератор
- Сообщения: 8259
- Статус: Маньяк
- ОС: Arch, Fedora, Ubuntu
- Контактная информация:
Re: vim script ждать завершения фоновой команды
Быстрый анализ исходников наводит на мысль, что это вообще не слишком-то невозможно. По-крайней мере без правки исходников Pyclewn. Он там, судя по всему, весь такой из себя асинхронный. Пишет в CLI gdb команду и продолжает своё выполнение.
Вообще, у gdb есть команды для построчного выполнения: next/step и т.д. Логично предположить, что у Pyclew должны быть обёртки для этих команд.
P.S.: ещё в мануале Pyclewn есть раздел про некие async-options. Возможно, что какие-то из этих опций выставлены по умолчанию?
Re: vim script ждать завершения фоновой команды
serzh-z писал(а): ↑15.02.2012 21:35Быстрый аналих исходников наводит на мысль, что это вообще не слишком-то невозможно. По-крайней мере без правки исходников Pyclewn. Он там, судя по всему, весь такой из себя асинхронный. Пишет в CLI gdb команду и продолжает своё выполнение.
Вообще, у gdb есть команды для построчного выполнения: next/step и т.д. Логично предположить, что у Pyclew должны быть обёртки для этих команд.
P.S.: ещё в мануале Pyclewn есть раздел про некие async-options. Возможно, что какие-то из этих опций выставлены по умолчанию?
Понял. Печально. Хороша задумка, да реализация г. Особенно что касается pdb. Поставляемых обертки ограничиваются командами дебугера, и то работают далеко не все. Поэтому и хотел свои обертки написать. Асинхронные опции - это не то. Документацию то я изучал. Они как раз по умолчанию выключены и могут быть включены пользователем, но эта асинхронность pyclewn по отношению к gdb, а не к VIM.
Да и вообще хотелось бы сделать данный костыль средствами VIM, а не средствами копания в коде pyclewn с неизвестным результатом.
Можно ведь с помощью autocmd event отследить чего на экране меняется? Ну или в буферах. Почему нельзя в вертикальной полосе. Кстати не очень понятно что это есть за полоса из двух столбцов появляется. На окно не похожа, думал что фолдколумн, но включил фолдинг, а эта хня все равно появляется.
Как вообще определить что это?
Re: vim script ждать завершения фоновой команды
Vim слева может показывать всего три вида информации:
- Свёртки (:h 'foldcolumn')
- Знаки (:h signs)
- Номера линий (:h 'nu', :h 'rnu')
По описанию больше всего похоже на второе. Отключается путём изучения вывода execute 'sign place buffer='.bufnr('%') с последующим удалением всех знаков с помощью sign unplace (:h :sign-unplace).
- Выучить справку vim. Всю.
- Взять gdb, собрать vim с отладочной информацией и посмотреть стёк вызовов при выводе символа, принадлежащего данному столбцу.
Re: vim script ждать завершения фоновой команды
Благодарю за ответы.
Буду пытаться. Надеюсь, что про заучивание справки была шутка.
Если хватить времени, мужества и упорства отпишусь о результатах, но задор потихонечку пропадает.
Буду пытаться. Надеюсь, что про заучивание справки была шутка.
Если хватить времени, мужества и упорства отпишусь о результатах, но задор потихонечку пропадает.
Re: vim script ждать завершения фоновой команды
Нет, не шутка. Если вы видите непонятную фигню в Vim (колонки, строки, выделение, …), то есть только два пути своими силами узнать, что это такое. Оба описаны выше. Хотя нет, ещё можно изучить исходники Vim.