Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
221 views
in Technique[技术] by (71.8m points)

Create a vim instance from a python class?

I'm calling a python function that returns a dictionary, and that works but I was just wondering if there was a way to create an instance like this in vimscript m.multi(3), m.div(20,5). This is just an example, not sure about the last 2 lines.

python3 <<EOF
class Multiply:
    @staticmethod
    def myfunc(n):
        print("Answer is:", n * n)
EOF
python3 m = Multiply
python3 vim.command(f"let multi={m}")
call multi(4)
question from:https://stackoverflow.com/questions/65927260/create-a-vim-instance-from-a-python-class

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

Define Multi as a VimScript function and call python inside it:

python3 <<EOF
import vim

class Multiply:
    @staticmethod
    def myfunc(n):
        print("Answer is:", n * n)
EOF

" Single global instance
python3 m = Multiply()

function! Multi(i)
    " int() is required as vim.eval() returns a string even for int arg
    python3 m.myfunc(int(vim.eval('a:i')))
endfunction

Test: :call Multi(4)


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...