vimrunner
vimrunner copied to clipboard
Windows support
Hey!
A friend of mine, @jarmo, was helping me test Node.vim on Windows and it turns out Vimrunner doesn't run there at all. Let's get it working!
Have you made in progress in this yourself? First off, it seems the pty
gem doesn't exist for Windows.
You could use childprocess instead of pty
to achieve better cross-platform support.
@jarmo, I tried using the childprocess
gem in the childprocess branch. However, as I expected, it didn't work for terminal Vim. I'll expand on that below.
@moll, I haven't worked on that at all. I do have a Windows box that I use exclusively for gaming, but it's not set up to be developer-friendly at all. This is why for this feature I'll mostly rely on your and perhaps @jarmo's work :).
pty
is not a gem, it's part of the standard library, but I'm guessing that was just a terminology slip-up on your part. We use it instead of, say, Kernel#spawn
, since terminal Vim requires a working terminal (because of it's curses-like interface). A pseudo-terminal works just fine for that purpose. Coincidentally, it also works for GUI Vim, which is why we use it for both cases. ChildProcess does seem like a nice interface, but unless it supports PTYs, I don't think it can be used for Vim.
One option would be to use ChildProcess only for GUI Vim, or perhaps only on Windows machines. Me and @mudge tried to avoid it in the past to simplify code-paths, but it may be time to revisit this. I may be missing something with ChildProcess, though, so if you find out some way to get it working, all the better.
Other potential problems that I see:
- How do we find the default Vim executable? We could rely on the
PATH
, but I'm not sure how good of an idea this is. I think Vim for Windows modifies the PATH itself upon installation, and if this is the case, I suppose that's good enough. - Should we support terminal Vim? Last I remember, with mingw, you get a POSIX shell, so you can have a working terminal Vim. Not sure if anyone uses it. Also not sure how things work with PowerShell, it was invented after my Windows days. Also not sure how things work with Cygwin. Does Vimrunner work out of the box there?
I'll be somewhat busy in the following weeks, so I'll limit my work to recreational coding and some talk-related stuff. I'll try to pitch into discussions in this thread, however, and provide guidance and experiment testing on Linux.
Maybe @jarib can help you with the problems of ChildProcess. As i've understood then you can do pretty much everything with it and it's cross-platform.
Right, stdlib!
I propose we could depend merely on PATH
and let other cases be handled with passing the exe path to Vimrunner.start
, just like it does today. As long as the PATH
is set up properly and contains a suitable vim executable, everything should work in each of those shell environments. The PTY issue is separate.
Bump :D . I'm hoping to be able to use vimrunner tests on Appveyor Windows - anyone know if it's possible? Currently, I have the pty issue. Thanks!
@AndrewRadev On Cygwin, vimrunner works fine with the Cygwin X11 and the Cygwin GVim compiled for X11. I do have to manually gvim&
before I can run vimrunner, or else it isn't able to start a server (as far as I can tell). So I suppose, to answer my own question, that one workaround might be to use Cygwin on my Appveyor image and try running X headless ;) . Edit However, that wouldn't give me full testing of Windows GVim path handling, for example. (Edit Appveyor has Cygwin installed by default)