jose
jose

Reputation: 399

setup vim script to execute python file

I searched SO extensively and I can't get to fix this: I'm trying to code a pathogen friendly python plugin in windows. The setup would be:

In \vimfiles\bundle\plugin I have a myscript.vim with:

let s:path = fnamemodify(resolve(expand('<sfile>:p')), ':h')

function! Up()
    pyfile my_script.py
endfunction

command Up :call Up()

then in the same directory I have my_script.py:

import vim
vim.current.buffer.append("here I am")

This setup only works when/if I load myscript.vim in Vim and run :so %. I get an error 'No such file or directory my_script.py', but from then on the the script runs fine.

What i gather here is that the s:path line, wich sets the path for the python script call, in myscript.vim doesnt get processed when I call the function, but once the script is run I have that path available.

What I'm doing wrong, and how do I fix this? Ty all

Upvotes: 2

Views: 1456

Answers (1)

jose
jose

Reputation: 399

The answer was here, in when using "pyfile s:pyscript" it seems vim doesn't interpret "s:pyscript" as a variable (kudos to https://stackoverflow.com/users/200291/icktoofay) but i didnt grasp it at first glance.

The idea is to build a string with both the command pyfile and the path (including the script name), and then execute it:

So, outside the function, call:

let s:path = fnamemodify(resolve(expand('<sfile>:p')), ':h') . '\my_script.py

and then inside the function:

execute 'pyfile ' . s:path

notice there is a space after pyfile, so you're in fact 'building' the full command by a string concatenation before actually executing it.

Upvotes: 2

Related Questions