diff --git a/runtime/autoload/dist/vim9.vim b/runtime/autoload/dist/vim9.vim index ece21db65d..87b3dbb872 100644 --- a/runtime/autoload/dist/vim9.vim +++ b/runtime/autoload/dist/vim9.vim @@ -3,7 +3,7 @@ vim9script # Vim runtime support library # # Maintainer: The Vim Project -# Last Change: 2026 Jan 31 +# Last Change: 2026 Mar 10 export def IsSafeExecutable(filetype: string, executable: string): bool if empty(exepath(executable)) @@ -60,7 +60,9 @@ if has('unix') enddef else export def Launch(args: string) - execute $':silent ! nohup {args} {Redir()} &' | redraw! + # Use job_start, because using !xdg-open is known not to work with zsh + # ignore signals on exit + job_start(split(args), {'stoponexit': ''}) enddef endif elseif has('win32') @@ -137,7 +139,13 @@ export def Open(file: string) setlocal shell& defer setbufvar('%', '&shell', shell) endif - Launch($"{Viewer()} {shellescape(file, 1)}") + if has('unix') && !has('win32unix') && !exists('$WSL_DISTRO_NAME') + # Linux: using job_start, so do not use shellescape. + Launch($"{Viewer()} {file}") + else + # Windows/WSL/Cygwin: NEEDS shellescape because Launch uses '!' + Launch($"{Viewer()} {shellescape(file, 1)}") + endif enddef # Uncomment this line to check for compilation errors early