Note that there are some explanatory texts on larger screens.

plurals
  1. POsend code from vim to an external application for execution
    primarykey
    data
    text
    <p>I am regularly using stata at work. My text editor of choice is (g)vim. I have been using the scripts provided <a href="https://code.google.com/p/notepad-stats-integration/" rel="nofollow noreferrer">here</a> or <a href="http://huebler.blogspot.com/2008/04/stata.html" rel="nofollow noreferrer">here</a> to send code from vim to stata. This functionality is immensely practical and virtually the only thing the keeps me from switching to linux completely. The scripts are written in AutoIT, so I cannot use them in linux. They are also basically independent from the choice of text editor, the people who wrote them are using notepad++.</p> <p>Essentially, these scripts together with a few lines in my vimrc allow me to send selections or the whole file to a running stata window (if none is open, stata is started first). </p> <p>I am looking for a solution that does this in linux, but I have no idea where to start. In linux there are two different stata versions, stata for the command line and xstata is the gui version. I need to use the gui version as the functionality of the command line version is limited unfortunately, so screen/tmux are ruled out. </p> <p>If this is trivial, I'm really sorry for missing it and would be immensely grateful for a solution. I also wasn't able to find an existing plugin for vim I could utilize. If not, I am willing to invest some time and figure out how to implement a solution. A pointer in the right direction would however be quite helpful. I am relatively new to linux and programming in general, but willing to learn. </p> <p>Regarding tools: I don't know bash, but it is something I want to look into anyways at some point. I have dabbled a bit in python, so that would also be ok. In case there is anything else absolutely superior for this task, please let me know. </p> <p>Any help is greatly appreciated. The AutoIT scripts are hosted on the website, but I can post my windows setup here if necessary.</p> <p>EDIT</p> <p>Ok, after some debate in the comments, here is the essential AutoIT script that I need to translate. (I would prefer a solution that doesn't overwrite the content of the system clipboard each time though.)</p> <p>Edit2 I guess this is what the script does essentially: It checks for an open stata window, selects it (or executes one), pastes the contents that are to be executed into a temporary file, switches to the stata window, selects the command line with ctrl-1 (and anything that might already be written there with ctrl-a) and then pastes do "tempfile" into the commandline, which then executes the code that was sent. At least that is how I understand it.</p> <p>FINAL COMMENT</p> <p>I have worked up a solution in bash some time ago, it is posted <a href="https://stackoverflow.com/questions/4226145/sending-code-from-vim-to-stata">here</a> as an answer to a previous version of this question.</p> <pre><code>; Declare variables Global $ini, $statapath, $statawin, $statacmd, $dofile, $clippause, $winpause, $keypause ; File locations ; Path to INI file $ini = @ScriptDir &amp; "\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 " &amp; '"' &amp; $dofile &amp; '"') ; Pause avoids problem with clipboard, may be AutoIt or Windows bug Sleep($clippause) Send("^v" &amp; "{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 " &amp; '"' &amp; $dofile &amp; '"') ; Pause avoids problem with clipboard, may be AutoIt or Windows bug Sleep($clippause) Send("^v" &amp; "{Enter}") EndIf </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload