Pregunta

He estado usando Vim para escribir scripts de Windows en Stata desde hace un tiempo en la universidad. Estoy aprendiendo R en el momento, y quiero cambiar completamente a Linux como mi sistema operativo (recientemente he cambiado a Ubuntu en mi portátil). R funciona bien con Vim, tanto en Windows como en Linux, sin embargo, todavía tengo que usar Stata veces. En Windows He estado usando un script AutoIt sencilla proporcionada por un usuario Stata para enviar / líneas de todo el archivo de Stata para su evaluación. Este script no funciona en Linux.

Esto es lo que las miradas de secuencia de comandos como

; 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 el siguiente en mi 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> 

Esto es muy práctico y prácticamente la única razón por la que todavía estoy pegando a Windows. ¿Cómo hago para conseguir algo por el estilo para Ubuntu? Soy nuevo en Linux, y realmente no sé mucho acerca de la programación, además de las estadísticas. Cualquier ayuda es muy apreciada. (Por favor, no sugieren emacs, emacs soporte para Stata es defectuoso, y aunque su integración con R es mucho mejor, me gustaría seguir usando Vim por ahora.)

En un tema relacionado posiblemente con: Estoy pensando en el aprendizaje de Python, ya que probablemente va a trabajar con los datos y haciendo análisis empírico para un tiempo más largo, y creo que podría ser útil para algunas tareas, por ejemplo, para resolver este tipo de problemas o de análisis de datos de sitios web. Se recomienda esto, o debería mirar en otro idioma (o se olvida por completo la idea)?

¿Fue útil?

Solución 4

rara vez usar Stata más, pero en algún momento funcionó una solución rápida en bash. este script, ejecutado con unas pocas líneas en mi .vimrc, funciona bien. es posible que tenga que ajustar los retrasos en función 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 

ajustar esto y lo puso en su 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> 

Otros consejos

Si vas a cambiar a Linux (para bien) que debiera 1. llamada Stata y cambiar su licencia de una licencia de Linux (que lo harán de forma gratuita) e instalarlo de forma nativa, a continuación, a partir de Stata vim sólo requiere una escritura del golpe (no soy experto en VIM) 2. O, usted podría comprar Stata 11, que tiene una licencia para todas las plataformas soportadas 3. usted puede instalar Stata con vino (juego en Linux hizo más fácil para mí), pero no pude conseguir el vino para dar Stata más de medio giga de RAM, por lo que he instalado stata10 nativa

Yo uso gedit para Python, Stata, R, látex, etc., que se encarga de nada, y gtksourceview es bastante fácil añadir resaltado de sintaxis y estilos etcétera ..

Python es ideal para el análisis de datos, consulte

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

Para raspar sitios web theres

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

y para analizar los datos de texto en general, tenemos, http://pyparsing.wikispaces.com/

Tengo un montón de archivos que puede encontrar definiciones de la lengua (gtksoureview para Stata y otros, copias en PDF de algunos libros (algunos) copyleft) útiles, pero no sé cómo adjuntar archivos en este sitio web

en Linux Puede utilizar un plugin para vim llamado slime.vim que le permitirá al código de tubería de vim a un proceso de I correr sin salir de vim. Yo uso esta en el mac para MySQL, PHP, Python y ocaml y funciona muy bien. La única salvedad es que utiliza la pantalla para hacer su magia, que no es algo malo en sí mismo.

Si entiendo bien su pregunta yo creo que esto le ayudará enormemente. Buena suerte y espero que le ayuda.

[Editar]: Vaya, me di cuenta de que su pregunta principal se refiere a la secuencia de comandos AutoIt, lo siento, no sé cómo traducir esto a Linux. No creo que haya ninguna manera fácil. Es posible que desee ver en en xautomation u otras herramientas similares, pero eso es un juego de pelota completamente diferente.

En su .vimrc reemplazar:

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

Con el comando que hace lo mismo en linux. Debe tener un aspecto similar al siguiente:

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

Como no tengo ni idea de Stata, que tendrá que averiguar el comando exacto de otra persona.

Además, no estoy seguro sobre el "%:p": por favor mire que en la ayuda vim y comparar las diferencias entre Windows y Linux

.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top