отправка кода из vim в stata

Я использую Vim для написания сценариев Stata в Windows некоторое время в университете. Я изучаю R на данный момент, и я хочу полностью переключиться на Linux в качестве своей ОС (недавно я перешел на Ubuntu на своем ноутбуке). R отлично работает с Vim как в Windows, так и в Linux, но мне все равно иногда нужно использовать Stata. В Windows я использовал простой скрипт AutoIt, предоставленный пользователем Stata для отправки строк / всего файла в stata для оценки. Этот скрипт не работает в Linux.

Вот как выглядит сценарий

; AutoIt v3 script to run a Stata do-file from an external text editor ; Version 3.1, Friedrich Huebler, fhuebler@gmail.com, www.huebler.info, 30 March 2009 ; Declare variables Global $ini, $statapath, $statawin, $dofile, $winpause, $keypause, $clippause ; File locations ; Path to INI file $ini = @ScriptDir & "\rundo.ini" ; Path to Stata executable $statapath = IniRead($ini, "Stata", "statapath", "C:\Program Files\Stata10\wsestata.exe") ; Title of Stata window $statawin = IniRead($ini, "Stata", "statawin", "Stata/SE 10.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 SendKeyDelay and WinWaitDelay 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("^4") 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("^4") ; 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 ; End of script 

со следующим в моем vimrc

 " STATA DO-FILE SCRIPTS fun! RunIt() w !start "C:\Programme\Stata10\integvim\rundo3\rundo.exe" "%:p" endfun map <F8> :<CU>call RunIt()<CR><CR> imap <F8> <Esc>:<CU>call RunIt()<CR><CR> fun! RunDoLines() let selectedLines = getbufline('%', line("'<"), line("'>")) if col("'>") < strlen(getline(line("'>"))) let selectedLines[-1] = strpart(selectedLines[-1], 0, col("'>")) endif if col("'<") != 1 let selectedLines[0] = strpart(selectedLines[0], col("'<")-1) endif let temp = tempname() . ".do" call writefile(selectedLines, temp) exec "!start C:\\Programme\\Stata10\\integvim\\rundo3\\rundo.exe " . temp au VimLeave * exe "!del -y" temp endfun map <F9> :<CU>call RunDoLines()<CR><CR> imap <F9> <Esc>:<CU>call RunDoLines()<CR><CR> 

Это действительно практично и практически единственная причина, по которой я все еще придерживаюсь Windows. Как я могу получить что-то подобное для Ubuntu? Я новичок в Linux, и не знаю много о программировании, кроме статистики. Любая помощь приветствуется. (Пожалуйста, не предлагайте emacs, поддержка emacs для stata ошибочна, и хотя ее интеграция с R намного лучше, я бы хотел использовать Vim на данный момент.)

По возможно связанной теме: я рассматриваю возможность изучения Python, поскольку я, вероятно, буду работать с данными и делать эмпирический анализ в течение более длительного времени, и я думаю, что это может быть полезно для некоторых задач, например для решения таких проблем или разбора данные с веб-сайтов. Является ли это рекомендуемым, или я должен смотреть на другой язык (или полностью забыть идею)?

4 Solutions collect form web for “отправка кода из vim в stata”

Если вы собираетесь переключиться на Linux (для хорошего), вы должны: 1. вызвать stata и переключить лицензию на лицензию Linux (которую они сделают бесплатно) и установить ее изначально, а затем запустить stata из vim просто требует bash скрипт (я не эксперт по vim) 2. Или вы можете купить stata 11, у которого есть одна лицензия для всех поддерживаемых платформ 3. вы можете установить stata с вином (игра на linux облегчила мне), но я не мог " t получить вино, чтобы дать stata более половины концерта, поэтому я установил родной stata10

Я использую gedit для python, stata, R, latex и т. Д., Он обрабатывает все, и gtksourceview довольно легко добавить подсветку синтаксиса и стили и так далее.

Python отлично подходит для анализа данных, см.

http://www.scipy.org/ http://openopt.org/Welcome http://www.macworld.com/appguide/app.html?id=63924&expand=false

Для соскабливания сайтов theres

http://scrapy.org/ http://wwwsearch.sourceforge.net/mechanize/

и для анализа данных из текста, как правило, у нас есть, http://pyparsing.wikispaces.com/

У меня есть куча файлов, которые вы можете найти полезными (gtksoureview определения языков для stata и других, pdf-копии некоторых книг (некоторые copyleft)), но я не знаю, как прикреплять файлы на этом веб-сайте

в linux вы можете использовать плагин для vim, называемый slime.vim, который позволит вам подключать код от vim к запущенному процессу R, не выходя из vim. Я использую это на mac для mysql, php, python и ocaml, и он отлично работает. Единственное предостережение в том, что он использует экран, чтобы сделать свою магию, что само по себе не плохо.

Если я правильно понимаю ваш вопрос, я верю, что это очень поможет вам. Удачи и надежды, которые помогут вам.

[Edit]: К сожалению, я заметил, что ваш основной вопрос относится к сценарию AutoIt, извините, я не знаю, как перевести это в Linux. Я не думаю, что есть простой способ. Возможно, вы захотите изучить xautomation или другие подобные инструменты, но это совершенно другая игра в мяч.

В вашем .vimrc замените:

 !start "C:\Programme\Stata10\integvim\rundo3\rundo.exe" "%:p" 

С помощью команды, которая делает то же самое в linux. Он должен выглядеть примерно так:

 !/usr/share/... "%:p" 

Поскольку у меня нет подсказки о Stata, вам нужно будет узнать точную команду от кого-то еще.

Также я не уверен в "%:p" : посмотрите, что в vim поможет и сравните различия между Windows и Linux.

Я редко использую stata больше, но в какой-то момент разработал быстрое решение в bash. этот скрипт, выполненный с несколькими строками в моем .vimrc, отлично работает. вам может потребоваться настроить задержки в зависимости от вашей системы.

 #!/bin/bash # needs wmctrl, xte and xsel # to get them run # sudo apt-get install wmctrl xautomation xsel # in debian/ubuntu linux #copy to clipboard "do filename" echo 'do ' '"'$1'"' | xsel -b # get current window id winid = $(xprop -root | awk '/_NET_ACTIVE_WINDOW\(WINDOW\)/{print $NF}') # check for stata window, if found activate else execute # use correct version here if [ "$(pgrep stata)" ] then wmctrl -a 'Stata/MP 11.2' else xstata & sleep .1 fi # delay depends on window manager etc # .1 ok with xmonad in 10.04 sleep .1 # switch to command line, ctrl-4 in stata 10, ctrl-1 in 11/12 # and select existing text via ctrl-a xte 'keydown Control_L' 'key 1' 'key A' 'usleep 100' \ 'key V' 'keyup Control_L' sleep .1 xte 'key Return' sleep .3 # go back to editor window wmctrl -i -a $winid 

отрегулируйте это и поместите его в свой vimrc.

 "" STATA DO-FILE SCRIPTS fun! RunIt() w "adjust this path to the bash script !sh "/home/username/.rundo.sh" "%:p" endfun au FileType stata noremap <F8> :<CU>call RunIt()<CR><CR> fun! RunDoLines() let selectedLines = getbufline('%', line("'<"), line("'>")) if col("'>") < strlen(getline(line("'>"))) let selectedLines[-1] = strpart(selectedLines[-1], 0, col("'>")) endif if col("'<") != 1 let selectedLines[0] = strpart(selectedLines[0], col("'<")-1) endif let temp = tempname() . ".do" call writefile(selectedLines, temp) "adjust this path to the bash script exec "!sh /home/username/.rundo.sh " . temp "au VimLeave * exe "!del -y" temp au VimLeave * silent exe '!del /Q "'.$TEMP.'\*.tmp.do"' endfun au FileType stata noremap <F9> :<CU>call RunDoLines()<CR><CR> 
  • ctags информация для встроенных функций в PHP / Python / Etc
  • Vim с поддержкой среды python
  • Generic: команда python в vim?
  • Фрагменты против аббревиатур в Vim
  • Окончание Vim Python
  • компиляция vim с поддержкой python
  • Задание интерпретатора Python для команды vim's: python
  • отправить код из vim во внешнее приложение для выполнения
  • Python - лучший язык программирования в мире.