अंत में, मैं यह एक स्क्रिप्ट कहा जाता pyexec.vim लिख कर हल और में रख मेरी प्लगइन निर्देशिका।
python << endpython
import vim
def pycurpos(pythonstatement):
#split the python statement at ;
pythonstatement = pythonstatement.split(';')
stringToInsert = ''
for aStatement in pythonstatement:
#try to eval() the statement. This will work if the statement is a valid expression
try:
s = str(eval(aStatement))
except SyntaxError:
#statement is not a valid expression, so try exec. This will work if the statement is a valid python statement (such as if a==b: or print 'a')
#if this doesn't work either, fail
s = None
exec aStatement
stringToInsert += s if s is not None else ''
currentPos = vim.current.window.cursor[1]
currentLine = vim.current.line
vim.current.line = currentLine[:currentPos]+stringToInsert+currentLine[currentPos:]
endpython
यह oneliners के लिए अपेक्षा के अनुरूप काम करता है, लेकिन नहीं है एक ब्लॉक निम्नलिखित कई बयानों के लिए काफी काम: स्क्रिप्ट नीचे गयी है। तो python pycurpos('a=2;if a==3:b=4;c=6')
परिणामस्वरूप c
हमेशा6
होने के कारण, if
ब्लॉक इसके बाद पहली पंक्ति के साथ समाप्त होता है।
लेकिन त्वरित और गंदे पायथन निष्पादन के लिए, जो मैं चाहता था, स्क्रिप्ट पर्याप्त है।
स्रोत
2010-08-31 20:11:31
लेकिन यह विम के आंतरिक पायथन समर्थन का उपयोग नहीं करता है। विम का खोल समर्थन। –
हाँ, आप सही हैं, मैंने इसे अनदेखा किया। – skeept
यह सबसे अधिक सीधे * टर्मिनल पर जाने, आदेश को निष्पादित करने, परिणाम की प्रतिलिपि बनाने और ओपी द्वारा व्यक्त किए गए "+ पी * निष्पादित करने के समान प्रभाव की अपेक्षित इच्छा प्राप्त करता है। –