envoi de code de vim à stata

J’utilise Vim depuis un certain temps pour écrire des scripts Stata sous Windows à l’université. J’apprends le R en ce moment et je veux passer complètement sous Linux en tant que mon système d’exploitation (je suis récemment passé à Ubuntu sur mon ordinateur portable). R fonctionne bien avec Vim à la fois sous Windows et Linux, mais je dois encore utiliser Stata parfois. Sous Windows, j’ai utilisé un simple script AutoIt fourni par un utilisateur de Stata pour envoyer des lignes / le fichier entier à stata pour évaluation. Ce script ne fonctionne pas sous Linux.

Voici à quoi ressemble le script

; AutoIt v3 script to run a Stata do-file from an external text editor ; Version 3.1, Friedrich Huebler, [email protected], 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 

avec ce qui suit dans mon vimrc

 " STATA DO-FILE SCRIPTS fun! RunIt() w !start "C:\Programme\Stata10\integvim\rundo3\rundo.exe" "%:p" endfun map  :call RunIt() imap  :call RunIt() fun! RunDoLines() let selectedLines = getbufline('%', line("'")) if col("'>") "))) 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  :call RunDoLines() imap  :call RunDoLines() 

C’est très pratique et pratiquement la seule raison pour laquelle je rest fidèle à Windows. Comment pourrais-je obtenir quelque chose comme ça pour Ubuntu? Je suis nouveau sur Linux, et je ne connais pas vraiment la programmation en dehors des statistiques. Toute aide est grandement appréciée. (Veuillez ne pas suggérer emacs, le support emacs pour stata est défectueux, et bien que son intégration avec R soit bien meilleure, je voudrais continuer à utiliser Vim pour le moment.)

Sur un sujet peut-être connexe: je pense à l’apprentissage de Python, car je travaillerai probablement avec des données et des parsings empiriques pour une période plus longue, et je pense que cela pourrait être utile pour certaines tâches, par exemple pour résoudre des problèmes comme données provenant de sites Web. Est-ce recommandé, ou devrais-je regarder une autre langue (ou oublier complètement l’idée)?

Si vous voulez passer à Linux (pour de bon), vous devez: 1. appeler stata et passer votre licence sur une licence linux (ce qu’ils feront gratuitement) et l’installer en mode natif, puis démarrer stata à partir de vim nécessite simplement un bash script (je ne suis pas un expert sur vim) 2. ou, vous pouvez acheter stata 11, qui a une licence pour toutes les plates-formes supscopes 3. vous pouvez installer des stata avec wine (jouer sur Linux a facilité les choses pour moi) mais je ne pouvais pas t obtenir du vin pour donner à stata plus de la moitié d’un concert de ram, alors j’ai installé natio10 natif

J’utilise gedit pour python, stata, R, latex, et cetera, il gère tout, et gtksourceview est assez facile à append avec la coloration syntaxique et les styles et cetera ..

Python est idéal pour l’parsing des données.

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

Pour gratter les sites Web theres

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

et pour parsingr les données en dehors du texte en général, nous avons, http://pyparsing.wikispaces.com/

J’ai un tas de fichiers que vous pourriez trouver utiles (définitions linguistiques gtksoureview pour stata et autres, des copies pdf de certains livres (certains copyleft)) mais je ne sais pas comment joindre des fichiers sur ce site

Dans Linux, vous pouvez utiliser un plugin pour vim appelé slime.vim qui vous permettra de diriger du code de vim vers un processus R en cours d’exécution sans quitter vim. Je l’utilise sur Mac pour mysql, php, python et ocaml et ça marche super bien. Le seul inconvénient est qu’il utilise l’écran pour faire sa magie, ce qui n’est pas une mauvaise chose en soi.

Si je comprends bien votre question, je pense que cela vous aidera énormément. Bonne chance et espoir qui vous aide.

[Edit]: Oups, j’ai remarqué que votre question principale concerne le script AutoIt, désolé je ne sais pas comment traduire cela en Linux. Je ne pense pas qu’il y ait un moyen facile. Vous voudrez peut-être chercher dans xautomation ou d’autres outils similaires, mais c’est un jeu de balle totalement différent.

Dans votre .vimrc remplacer:

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

Avec la commande qui fait la même chose avec Linux. Cela devrait ressembler à ceci:

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

Comme je ne sais rien de Stata, vous devrez trouver la commande exacte de quelqu’un d’autre.

De plus, je ne suis pas sûr du "%:p" : regardez dans l’aide de vim et comparez les différences entre Windows et Linux.

J’utilise rarement des stata, mais à un moment donné, j’ai trouvé une solution rapide en bash. Ce script, exécuté avec quelques lignes dans mon fichier .vimrc, fonctionne correctement. vous devrez peut-être ajuster les délais en fonction de votre système.

 #!/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 

ajustez cela et mettez-le dans votre 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  :call RunIt() 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  :call RunDoLines()