So führen Sie eine Stata do-Datei in Vim aus
-
02-01-2020 - |
Frage
Ich suche nach einer Möglichkeit, eine .do-Datei von Stata von Vim aus auszuführen.
Hier ist, was ich bisher ausgecheckt habe:
- In diesem Link: http://fmwww.bc.edu/repec/bocode/t/textEditors.html#vim, Vim-Funktionen wurden vorgeschlagen;
- Der rundo.die EXE-Datei kann von hier heruntergeladen werden: http://huebler.blogspot.com/2008/04/stata.html
Nachdem jedoch auch die geändert wurde .ini-Dateien wie vorgeschlagen, kann ich die folgende Vim-Funktion, die in _vimrc definiert ist, immer noch nicht ausführen:
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)
" *** CHANGE PATH AND NAME TO REFLECT YOUR SETUP. USE \\ INSTEAD OF \ ***
exec "!start C:\\Program Files\\Scripts\\rundo.exe " . temp
" Delete the temp file after Vim closes
au VimLeave * exe "!del -y" temp
endfun
Da ich diese Funktion zugeordnet habe <F9>
wobei: map <F9> :<C-U>call RunDoLines() <Enter>
, hier ist die Fehlermeldung, die ich beim Drücken bekomme <F9>
beim Öffnen profile.do
durch Vim im Home-Verzeichnis von Stata.
Mein Vim ist auf Github: https://github.com/llinfeng/Vim-Win;der extrahierte Ordner enthält rundo.exe
die Datei befindet sich in meiner Dropbox: https://www.dropbox.com/sh/5tneckhr1rfrp5x/AABLZ4HGElbdbIGBGrvE7Zfta
Wo verstehe ich es falsch?
PS:die gute Nachricht ist, die folgende Rundo()
funktion funktioniert gut, bis auf ein Problem:
fun! RunIt()
wa
!start /min "C:\Users\Linfeng\rundo.exe" "%:p"
endfun
Problem:wenn die .do-Datei einen Fehler enthält und Stata sich darüber beschwert, wird der Ctrl
schlüssel (oder Alt
taste) gedrückt gehalten werden.Dies macht das Drücken Tab
als ob Alt-Tab
, das Fenster verschiebt.Die Tastensperre wird erst nach dem Drücken freigegeben Ctrl
einmal.
Lösung
Ehrlich gesagt, es ist mein Missbrauch der Funktion RunDoLines()
das hat das Problem verursacht.Die Funktion ist weiterhin mit Vim unter Windows 8.1 kompatibel.
Zum Aufrufen dieser Funktion:
- Hinzufügen
vnoremap
zu den<F9>
Mapping. - Visuell (mehrere) Zeile(n) auswählen.
- Drücken
F9
.
Es funktioniert nicht, wenn Sie den Cursor einfach auf eine Zeile setzen.Die Linie muss visuell ausgewählt werden. Die Funktion muss mit einer "ausgewählten Zeile" gefüllt werden, die für mich visuell ausgewählt werden sollte.Wenn Sie im Einfügemodus eine Codezeile durch Ziehen mit der Maus auswählen, werden nicht die Parameter generiert, die von der Funktion benötigt werden.
Bleiben Sie im normalen Modus und drücken Sie V
um den Codeabschnitt auszuführen!