Domanda

Sono stato con Vim di scrivere script Stata in Windows per un po 'di tempo presso l'università. Sto imparando R in questo momento, e voglio passare completamente a Linux come il mio sistema operativo (recentemente ho passato a Ubuntu sul mio portatile). R funziona bene con Vim sia in Windows e Linux, ma ho ancora bisogno di utilizzare Stata volte. In Windows ho utilizzato un semplice script AutoIt fornito da un utente di inviare Stata linee / l'intero file di Stata per la valutazione. Questo script non lavorare in Linux.

Questo è ciò che gli sguardi di script come

; 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

con il seguente nel mio vimrc

" STATA DO-FILE SCRIPTS

fun! RunIt()
  w
  !start "C:\Programme\Stata10\integvim\rundo3\rundo.exe" "%:p"
endfun
map <F8> :<C-U>call RunIt()<CR><CR>
imap <F8> <Esc>:<C-U>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> :<C-U>call RunDoLines()<CR><CR> 
imap <F9> <Esc>:<C-U>call RunDoLines()<CR><CR> 

Questo è veramente pratico e praticamente l'unico motivo per cui sono ancora attaccata a Windows. Come potrei fare per ottenere qualcosa di simile per Ubuntu? Sono nuovo di Linux, e realmente non so molto di programmazione, oltre le statistiche. Qualsiasi aiuto è molto apprezzato. (Prego non suggerire emacs, emacs supporto per Stata è difettoso, e anche se la sua integrazione con R è molto meglio, mi piacerebbe continuare a utilizzare Vim per ora.)

Su un argomento possibilmente correlati: sto pensando di imparare Python, come io probabilmente lavorerò con i dati e fare analisi empirica per un tempo più lungo, e penso che potrebbe essere utile per alcuni compiti, per esempio per risolvere i problemi di questo tipo o dati parsing da siti web. E 'questo consigliato, o devo guardare un'altra lingua (o dimenticare l'idea del tutto)?

È stato utile?

Soluzione 4

Io uso raramente Stata più, ma ad un certo punto lavorato fuori una soluzione rapida in bash. questo script, eseguito con poche righe nel mio Vimrc, funziona bene. potrebbe essere necessario regolare i ritardi a seconda del sistema.

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

regolare questo e metterlo nel vostro 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> :<C-U>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> :<C-U>call RunDoLines()<CR><CR> 

Altri suggerimenti

Se avete intenzione di passare a Linux (per bene) si dovrebbe 1. Stata chiamata e passare la licenza per una licenza di Linux (che lo faranno gratuitamente) e installarlo in modo nativo, poi a partire dal Stata vim richiede uno script bash (io non sono esperto in vim) 2. oppure, è possibile acquistare Stata 11, che ha una licenza per tutte le piattaforme supportate 3. è possibile installare Stata con il vino (il gioco su Linux ha reso più facile per me), ma non ho potuto ottenere il vino per dare Stata più di mezzo giga di ram, così ho installato stata10 nativo

io uso gedit per Python, Stata, R, lattice, eccetera, Gestisce qualsiasi cosa, e gtksourceview è abbastanza facile aggiungere evidenziazione della sintassi e stili eccetera ..

Python è grande per l'analisi dei dati, vedere

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

Per raschiare siti web Theres

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

e per l'analisi dei dati di testo in generale che abbiamo, http://pyparsing.wikispaces.com/

Ho un gruppo di file si potrebbe trovare (definizioni lingua gtksoureview per Stata e altri, le copie pdf di alcuni libri (alcuni copyleft)) utili, ma non so come allegare i file presenti su questo sito

in Linux È possibile utilizzare un plugin per Vim chiamato slime.vim, che vi permetterà di codice di pipe da vim a un processo in esecuzione R senza lasciare Vim. Io lo uso su Mac per MySQL, PHP, Python e OCaml e funziona benissimo. L'unica avvertenza è che usa schermo per fare la sua magia, che non è un male in sé.

Se ho capito la tua domanda correttamente Credo che questo vi aiuterà enormemente. Buona fortuna e speranza si può dire.

[Modifica]: Oops, ho notato che la tua domanda principale riguarda allo script AutoIt, mi dispiace non so come tradurre questo per Linux. Non credo ci sia un modo semplice. Si potrebbe voler esaminare in Xautomation o altri strumenti simili, ma questo è un gioco completamente diverso.

Nel vostro .vimrc sostituire:

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

Con il comando che fa la stessa cosa in Linux. Esso dovrebbe essere simile a questo:

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

Non ho la minima idea di Stata, si dovrà scoprire il comando esatto da qualcun altro.

Anche io non sono sicuro circa l'"%:p": per favore guarda che fino a l'aiuto vim e confrontare le differenze tra Windows e Linux

.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top