我一直在使用Vim在Windows上编写Stata脚本一段时间。 我现在正在学习R,我想完全切换到Linux作为我的操作系统(我最近在我的笔记本电脑上切换到了Ubuntu)。 R在Windows和Linux下都可以正常工作,但是我仍然需要使用Stata。 在Windows中,我一直使用Stata用户提供的一个简单的AutoIt脚本将行/整个文件发送给stata进行评估。 这个脚本在Linux中不起作用。
这是剧本的样子
; 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 Filesstata10wsestata.exe") ; Title of Stata window $statawin = IniRead($ini,"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,"winpause","200") ; Pause between keystrokes sent to Stata $keypause = IniRead($ini,"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
以下在我的vimrc
" STATA DO-FILE SCRIPTS fun! RunIt() w !start "C:ProgrammeStata10integvimrundo3rundo.exe" "%:p" endfun map <F8> :<CU>call RunIt()<CR><CR> imap <F8> <Esc>:<CU>call RunIt()<CR><CR> fun! RunDoLines() let selectedLines = getbufline('%',line("'<"),line("'>")) if col("'>") < strlen(getline(line("'>"))) let selectedLines[-1] = strpart(selectedLines[-1],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> :<CU>call RunDoLines()<CR><CR> imap <F9> <Esc>:<CU>call RunDoLines()<CR><CR>
这是非常实用的,而且几乎是我仍然坚持使用Windows的唯一原因。 我将如何去得到这样的Ubuntu的东西? 我是linux新手,除了统计数据外,对编程知之甚less。 任何帮助是极大的赞赏。 (请不要提示emacs,emacs对于stata的支持是有缺陷的,虽然它与R的集成要好得多,但我现在想继续使用Vim。)
使用variables作为bash关联数组中的键
如何使用bash从Windows PATH中提取指定的path
sdkman的`sdk`命令在哪里安装?
运行Windows脚本与Linux的几个隧道
linux在systemd启动脚本
在一个可能相关的话题上:我正在考虑学习Python,因为我可能正在使用数据并进行更长时间的实证分析,而且我认为这对某些任务可能是有用的,例如解决像这样的问题或parsing来自网站的数据。 这是build议,还是应该看另一种语言(或完全忘记这个想法)?
如何确定NTP通信状态
bash中的“>”和“&>”有什么区别?
pipe道stderr到系统日志里面的自动ftp脚本
如何在* nixlogin时运行脚本?
如果你要切换到Linux(好),你应该1.呼叫静态和切换您的许可证到一个Linux许可证(他们将免费做),并本地安装,然后从VIM启动静态只需要一个bash脚本(我不是vim的专家)2.或者,你可以购买stata 11,它拥有所有支持的平台上的一个许可证3.你可以用wine安装stata(在Linux上玩,这让我更容易)但是我不能,不要让葡萄酒给予stata一半以上的ram,所以我安装了原生的stata10
我使用gedit for python,stata,R,latex等等,它可以处理任何事情,gtksourceview很容易添加语法高亮和样式等等。
Python非常适合数据分析,请参阅
http://www.scipy.org/ http://openopt.org/欢迎http://www.macworld.com/appguide/app.html?id=63924&expand=false
为了刮网站theres
http://scrapy.org/ http://wwwsearch.sourceforge.net/mechanize/
和一般我们有的文本解析数据, http://pyparsing.wikispaces.com/
我有一堆你可能会觉得有用的文件(gtkoureview stata和其他人的语言定义,一些书的pdf副本(一些copyleft)),但我不知道如何附加本网站上的文件
在linux中,你可以使用一个名为slime.vim的vim插件,它允许你从vim管道代码到一个正在运行的R进程而不用离开vim。 我使用这个在MysqL,PHP,Python和OCAML,它的工程很好。 唯一需要注意的是,它使用屏幕来实现它本身并不坏的魔法。
如果我正确理解你的问题,我相信这会对你有很大的帮助。 祝你好运,希望能帮助你。
[编辑]:哎呀,我注意到你的主要问题涉及到AutoIt脚本,对不起,我不知道如何将它翻译成Linux。 我不认为有任何简单的方法。 你可能想看看xautomation或其他类似的工具,但这是一个完全不同的球类游戏。
在你的.vimrc替换:
!start "C:ProgrammeStata10integvimrundo3rundo.exe" "%:p"
用在linux中做同样的事情的命令。 它应该看起来类似于这个:
!/usr/share/... "%:p"
因为我对Stata没有任何线索,所以你必须从别人那里得到确切的命令。
另外我不确定"%:p" :请在vim帮助中查看,并比较Windows和Linux之间的差异。
我很少再使用stata了,但是在某个时候,在bash中找到了一个快速解决方案。 这个脚本,在我的.vimrc中用几行执行,效果很好。 您可能需要根据系统调整延迟。
#!/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
调整这个并把它放在你的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> :<CU>call RunIt()<CR><CR> fun! RunDoLines() let selectedLines = getbufline('%',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> :<CU>call RunDoLines()<CR><CR>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。