Commit: runtime(vim9): remove extra escaping in Open

1 view
Skip to first unread message

Christian Brabandt

unread,
Apr 17, 2026, 11:15:14 AM (23 hours ago) Apr 17
to vim...@googlegroups.com
runtime(vim9): remove extra escaping in Open

Commit: https://github.com/vim/vim/commit/30d42855eb7e938883b7bef48477fad65f49107f
Author: Keith Smiley <keithb...@gmail.com>
Date: Fri Apr 17 15:02:39 2026 +0000

runtime(vim9): remove extra escaping in Open

Before 71fd19d7ac9e83bf63d7bad337f43cd830a5b5bd this function went
through a `:!` command on all platforms, so it needed special escaping for `#` and
others. After that commit it doesn't go through that path on unix
platforms. Then with 48581f2ba96550f5499cc322647b2ff1df5ad4ed this
escaping was re-added on unix and it's needs since it goes through
`sh -c`, but it should not have the extra escaping specific to `:!`.

Specifically my original broken command is:

```
PATH=/usr/bin:/bin VIMRUNTIME=~/dev/vim/runtime ./src/vim -u NONE -c 'call dist#vim9#Open("https://github.com/keith/dotfiles/blob/7bce9f5c697df6a549cf97bf5606d8b639e5bf5a/vimrc#L19")'
```

Where the `#L19` ends up being opened as `%5C#L19`. But I verified this
case still works as well:

```
PATH=/usr/bin:/bin VIMRUNTIME=~/dev/vim/runtime ./src/vim -u NONE -c 'call dist#vim9#Open("foo bar.txt")'
```

Which is what would otherwise break if we weren't doing any shell
escaping on unix.

closes: #19996

Signed-off-by: Keith Smiley <keithb...@gmail.com>
Signed-off-by: Christian Brabandt <c...@256bit.org>

diff --git a/runtime/autoload/dist/vim9.vim b/runtime/autoload/dist/vim9.vim
index d82467391..4d8785d4a 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 <https://github.com/vim/vim>
-# Last Change: 2026 Apr 06
+# Last Change: 2026 Apr 17

export def IsSafeExecutable(filetype: string, executable: string): bool
if empty(exepath(executable))
@@ -139,7 +139,11 @@ 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')
+ Launch($"{Viewer()} {shellescape(file)}")
+ else
+ Launch($"{Viewer()} {shellescape(file, 1)}")
+ endif
enddef

# Uncomment this line to check for compilation errors early
Reply all
Reply to author
Forward
0 new messages