gitui
gitui copied to clipboard
Vim is not available as external editor on windows
Thanks for gitui, it makes my daily life easier=)
There is, however, one thing that seems break my current flow - I can not launch vim from within gitui.
Describe the bug Vim is not available as external editor
To Reproduce Steps to reproduce the behavior:
- Navigate to a repo with modified files, run
gitui - Chose a file with modifications
- Hit 'e' button to edit this file
- A "popup" appears:
failed to launch editor:
"vim": program not found
Same bug observed when trying to '^e'dit commit message in external editor.
Expected behavior
A vim instance with selected file loaded.
Context (please complete the following information):
- OS/Distro + Version: win10 (build 21H2-19044.1889)
- GitUI Version 0.21.0
- Running in
WindowsTerminalandpwsh-7.2.6 - both
vimandgituiare installed viachocolatey
Additional context
vim is present in path:
PS1> where.exe vim
C:\Windows\vim.bat
and git is configured to use vim
git config -l | rg editor
core.editor=vim
need windows user support for this
I did a bit of digging
- "real"
vimin my$PATHis, in fact, abatscript:
PS> (Get-Command vim).Name
vim.bat
- there is a
%PATHEXT%($env:PATHEXTinpwsh) env variable that specifies the list of extensions to test if the command's extension is not provided. (see also https://learn.microsoft.com/en-us/previous-versions/cc723564(v=technet.10)#command-search-sequence and https://stackoverflow.com/a/1653492/3206165) - For some reason the implementation in rust (I suppose the guilty party should be somewhere around
externaleditor.rs:115) does not do these extension checks and only tries to run the provided executable as-is.
I see the following solutions:
- (workaround) explicitly provide extension; might lead to bugs if one uses
git's config in a cross-platform (or cross-installation) manner (that's my case, unfortunately) - fix behavior of the library responsible for running external commands; that would be waaaay out of my depth, I can't write a helloworld in
rust - bikeshed a test in
gitui"if the editor command has no extension and we are on windows, then try with the extensions form that env var..." - some other option I might have missed?
Aha, it appears that things are not that easy upstream...
https://github.com/rust-lang/rust/issues/37519
https://doc.rust-lang.org/src/std/process.rs.html#540-543
https://github.com/rust-lang/rust/pull/37381
... and all the way down the rabbit whole...
vs code is also not usable because of this. I have mine editor in git config:
git config -l|?{$_ -like '*edit*'}
core.editor=code --wait
and
gcm code
CommandType Name Version Source
----------- ---- ------- ------
Application code.cmd 0.0.0.0 C:\Program Files\Microsoft VS Code\bin\code.cmd
investigating this.
- the issue is trying to run a command script (.bat or .cmd) but only giving the root name - vim, code etc.
- works fine with vim.bat or code.cmd
- not an issue with gitui, a simple 5 line test prog has the same issue
- importantly git on windows works with editor set to 'vim'. So this is a backwards step as far as a regular git user on windows is concerned
Thr std::Process code is really very broken, making all sorts of odd assumptions trying to make things work 'by magic'. I will file a bug but dont hold your breath.
I think I can come up with a solution - will update here
This issue has been automatically marked as stale because it has not had any activity half a year. It will be closed in 14 days if no further activity occurs. Thank you for your contributions.