отправить код из vim во внешнее приложение для выполнения

Я регулярно использую stata на работе. Моим текстовым редактором по выбору является (g) vim. Я использовал сценарии, приведенные здесь или здесь, чтобы отправить код из vim в stata. Эта функциональность очень практична и практически единственная вещь, которая препятствует мне полностью переключиться на Linux. Сценарии написаны в AutoIT, поэтому я не могу использовать их в linux. Они также в основном не зависят от выбора текстового редактора, люди, которые их написали, используют notepad ++.

По сути, эти скрипты вместе с несколькими строками в моем vimrc позволяют мне отправлять выбранные файлы или весь файл в запущенное окно stata (если ни один не открыт, сначала запускается stata).

Я ищу решение, которое делает это в Linux, но я не знаю, с чего начать. В Linux есть две разные версии stata, stata для командной строки, а xstata – версия gui. Мне нужно использовать версию gui, так как функциональность версии командной строки ограничена, к сожалению, поэтому screen / tmux исключены.

Если это тривиально, мне очень жаль, что я пропустил его, и был бы очень благодарен за решение. Я также не смог найти существующий плагин для vim, который мог бы использовать. Если нет, я готов вложить некоторое время и выяснить, как реализовать решение. Однако указатель в правильном направлении был бы весьма полезен. Я относительно новичок в Linux и программировании в целом, но хочу учиться.

Что касается инструментов: я не знаю bash, но в какой-то момент я хочу посмотреть в любом случае. Я немного потрудился в python, так что это тоже будет нормально. Если у вас есть что-то еще более совершенное, сообщите мне.

Любая помощь приветствуется. Сценарии AutoIT размещаются на веб-сайте, но при необходимости я могу установить настройки своего окна.

РЕДАКТИРОВАТЬ

Хорошо, после некоторых обсуждений в комментариях, вот основной сценарий AutoIT, который мне нужно перевести. (Я бы предпочел решение, которое не перезаписывает содержимое системного буфера обмена каждый раз, хотя).

Edit2 Я предполагаю, что это то, что делает сценарий по существу: он проверяет открытое окно stata, выбирает его (или выполняет его), вставляет содержимое, которое должно быть исполнено во временный файл, переключается в окно stata, выбирает командную строку с ctrl-1 (и все, что уже может быть написано там ctrl-a), а затем пасты делают «tempfile» в командной строке, а затем выполняет отправленный код. По крайней мере, так я понимаю это.

ЗАВЕРШЕНИЕ

Некоторое время назад я разработал решение в bash, оно опубликовано здесь как ответ на предыдущую версию этого вопроса.

; Declare variables Global $ini, $statapath, $statawin, $statacmd, $dofile, $clippause, $winpause, $keypause ; File locations ; Path to INI file $ini = @ScriptDir & "\rundo.ini" ;; contents of ini file are the following ;[Stata] ;; Path to Stata executable ;statapath = "C:\Program Files\Stata11\StataSE.exe" ;; Title of Stata window ;statawin = "Stata/SE 11.2" ;; Keyboard shortcut for Stata command window ;statacmd = "^1" ;[Delays] ;; Pause after copying of Stata commands to clipboard, in milliseconds ;; Use higher number if script fails (default: 100, recommended range: 0 - 200) ;clippause = 100 ;; Pause between window-related operations, in milliseconds ;; Use lower number to speed up script, higher number if script fails (default: 200) ;winpause = 200 ;; Pause between key strokes sent to Stata, in milliseconds ;; Use lower number to speed up script, higher number if script fails (default: 1) ;keypause = 1 ; Path to Stata executable $statapath = IniRead($ini, "Stata", "statapath", "C:\Program Files\Stata11\StataSE.exe") ; Title of Stata window $statawin = IniRead($ini, "Stata", "statawin", "Stata/SE 11.2") ; Keyboard shortcut for Stata command window $statacmd = IniRead($ini, "Stata", "statacmd", "^1") ; Path to do-file that is passed to AutoIt ; Edit line to match editor used, if necessary $dofile = $CmdLine[1] ; Delays ; Pause after copying of Stata commands to clipboard $clippause = IniRead($ini, "Delays", "clippause", "100") ; Pause between window-related operations $winpause = IniRead($ini, "Delays", "winpause", "200") ; Pause between keystrokes sent to Stata $keypause = IniRead($ini, "Delays", "keypause", "1") ; Set WinWaitDelay and SendKeyDelay to speed up or slow down script Opt("WinWaitDelay", $winpause) Opt("SendKeyDelay", $keypause) ; If more than one Stata window is open, the window that was most recently active will be matched Opt("WinTitleMatchMode", 2) ; Check if Stata is already open, start Stata if not If WinExists($statawin) Then WinActivate($statawin) WinWaitActive($statawin) ; Activate Stata command window and select text (if any) Send($statacmd) Send("^a") ; Run saved do-file ; Double quotes around $dofile needed in case path contains blanks ClipPut("do " & '"' & $dofile & '"') ; Pause avoids problem with clipboard, may be AutoIt or Windows bug Sleep($clippause) Send("^v" & "{Enter}") Else Run($statapath) WinWaitActive($statawin) ; Activate Stata command window Send($statacmd) ; Run saved do-file ; Double quotes around $dofile needed in case path contains blanks ClipPut("do " & '"' & $dofile & '"') ; Pause avoids problem with clipboard, may be AutoIt or Windows bug Sleep($clippause) Send("^v" & "{Enter}") EndIf 

3 Solutions collect form web for “отправить код из vim во внешнее приложение для выполнения”

IronAHK – это перезапись Linux / Mono на языке сценариев AutoHotKey , который похож на AutoIt (инструмент переопределения GUI / переназначения клавиатуры). Я не использовал IronAHK, но AutoHotkey может запускать скрипты AutoIt v2.

Вы также можете посмотреть @ Project Sikuli : «Sikuli – это визуальная технология для автоматизации и тестирования графических пользовательских интерфейсов (GUI) с использованием изображений (скриншотов). Sikuli включает в себя Sikuli Script, визуальный скриптовый API для Jython и Sikuli IDE, интегрированную среду разработки для написания визуальных сценариев со скриншотами легко "(с первой страницы сикули)

Другим хорошим вариантом является Linux Desktop Testing Project (LDTP) , сценарий с Python:

пример:

 from ldtp import * from ldtputils import * try: launchapp("gedit") if waittillguiexist("*.gedit")==0: raise LdtpExecutionError("Gedit window does not exist") selectmenuitem("*-gedit", "mnuFile;mnuOpen") selectrow("dkgOpenFiles...", "tblFiles", fileName[0]) ... 

Возможно, вы можете использовать механизм, подобный используемому этим плагином vim, который выполняет аналогичную задачу:

http://www.vim.org/scripts/script.php?script_id=1048

Этот плагин отправляет R-код в инструмент R под UNIX и Windows ( язык программирования R широко используется для статистической разработки программного обеспечения и анализа данных).

Я не знаю о Stata или R-языке, но кажется, что вы можете управлять Stata с помощью R, как указано в http://www.r-bloggers.com/why-use-r/ :

 You can easily use it anywhere. It's platform-independent, so you can use it on any operating system. And it's free, so you can use it at any employer without having to persuade your boss to purchase a license. : : R allows you to integrate with other languages (C/C++, Java, Python) and enables you to interact with many data sources: ODBC-compliant databases (Excel, Access) and other statistical packages (SAS, Stata, SPSS, Minitab). 

Некоторые команды Stata, переведенные в R:

http://www.r-bloggers.com/stata-or-r/

Если бы вы могли выполнить нужную задачу через R, возможно, вы могли бы использовать плагин vim выше неизмененного.

Надеюсь, эта помощь.

Я использовал функцию карты VI для определения макросов для отправки моего файла в компилятор С и получения результатов. Это не очень надежный (нет, если / тогда программирование), но его довольно просто реализовать, и у меня много стандартных сопоставлений, которые я использую. Например, &T верхняя строка, на которой я нахожусь, и &t уменьшает ее. Я использую &S для запуска моей проверки орфографии (gspell) и т. Д. Вам не нужно начинать свои макросы с амперсанда, но я знаю, что это маловероятная комбинация букв, которые я бы печатал.

Настройка карты довольно проста. Вы используете команду : map ex, пробел, слово, используемое для вызова карты, пробел и затем нажатия клавиш, которые вы хотите выполнить. Если вам нужно вставить что-то вроде возврата или побега, прикрепите его Ctrl-V.

Вы можете использовать map! для отображения макроса, который может быть выполнен в режиме Вставки или Замены.

  • Vim и PEP 8 - Руководство по стилю для кода Python
  • Vim: измените максимальную линию от 80 в pymode
  • vim как идеал питона
  • Ресурсы, касающиеся скриптов Python в Vim
  • Настройки vim для python
  • как выводить все строки в консоль python в vim?
  • Автоматические заголовки при открытии нового файла python с помощью vim
  • Как правильно настроить автоиндентификацию VIM для редактирования файлов Python - * .py
  •  
    Interesting Posts for Van-Lav
    Python - лучший язык программирования в мире.