I have a similar problem. I use Vim to edit Stata scripts (stata.com). These
scripts are called do-files. They are simple text files, but with a .do
extension, which Stata uses to recognize them as scripts. The Stata command
for executing such a script, say called filename.do, is "do filename".

In Windows, there is a way to launch Stata from Vim to execute either a
do-file, or a set of selected lines in a do-file that is being edited in
Vim. This can be repeated as many times as you want, whether or not Stata is
already running, inside the same instance of Stata. I would like to get
MacVim to do the same. 

The Windows solution consists of two parts. The first is a rundo.exe file
written with an AutoIt script as described here --
http://s281191135.onlinehome.us/2008/20080427-stata.html. The second is a
Vim script as described here --
http://www.stata.com/statalist/archive/2006-06/msg00905.html. 

This Vim script goes into _gvimrc, and it describes two Vim functions:
RunIt() for making Stata execute a do-file being edited in Vim, and
RunDoLines() for making Stata execute a subset of selected lines of that
file.

For my first attempt at getting this to work in MacVim, I modified the
script as shown below:

" STATA DO-FILE SCRIPT

function RunIt()
  wa
  !open -a StataMP --args do "%:p"
endfunction

:map <F7> :<C-U>call RunIt() 
:imap <F7> <Esc>:<C-U>call RunIt()

function 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 "!open -a StataMP --args do " . temp

   " Delete the temp file after Vim closes
   au VimLeave * silent exe '!rm "'.$TEMP.'\*.do"'
endfunction

:map <F8> :<C-U>call RunDoLines() 
:imap <F8> <Esc>:<C-U>call RunDoLines() 

Unfortunately, this doesn't work all that well. Either RunIt() or
RunDoLines() will work as expected only once. All subsequent calls to either
function will be ignored.

What am I missing?

Thank you,
Gabi

--
View this message in context: 
http://vim.1045645.n5.nabble.com/Launching-an-already-open-file-tp3248056p4655491.html
Sent from the Vim - Mac mailing list archive at Nabble.com.

-- 
You received this message from the "vim_mac" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

Reply via email to