enviar el código de vim a Stata
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)?
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