--- Please enter the report below this line. ---
Hi,
To reproduce the bug. Just create a directory with a ~ (mkdir
-p /tmp/bad~dir). Then when you do a ":chdir /tmp/bad~dir", an error
is raised "E79: Cannot expand wildcards".
As a side effect it is not possible to use a tags file in the bad~dir
or below (/tmp/bad~dir/tags) because it will no be seen by vim.
Note I have not tested all shell but the bug appears with the tsch
shell (and not zsh for example). So you must use this option "set
shell=/bin/tcsh\ -f".
Please find attached a patch that seems solve the problem not sure it
is the good solution (and works in all situations). Maybe a solution
will be to escaped ~ like '\~' before sending to the tcsh shell.
Note: Tcsh debian version is 6.14.00-7
Best Regards,
Gregory
Debian Release: squeeze/sid
500 unstable ftp.fr.debian.org
1 experimental ftp.fr.debian.org
--- Package information. ---
Depends (Version) | Installed
===================================-+-====================
vim-common (= 2:7.2.245-2) | 2:7.2.245-2
vim-runtime (= 2:7.2.245-2) | 2:7.2.245-2
libacl1 (>= 2.2.11-1) | 2.2.47-3
libc6 (>= 2.3.4) | 2.9-25
libgpm2 (>= 1.20.4) | 1.20.4-3.2
libncurses5 (>= 5.6+20071006-3) | 5.7+20090803-1+b1
libselinux1 (>= 2.0.85) | 2.0.85-1
Package's Recommends field is empty.
Suggests (Version) | Installed
==========================-+-===========
ctags |
vim-doc |
vim-scripts | 20090211-1
This looks good to me. I'll forward it upstream and see what he thinks. Thanks for the patch. :)
Looking into this further, this isn't actually a problem with using tcsh
or the expansion of '~'. The problem is what that Vim isn't properly
detecting which shell you're using because you've set 'shell' to
"/bin/tcsh -f" instead of simply "/bin/tcsh".
In src/os_unix.c
5354 else if ((len = STRLEN(p_sh)) >= 3)
5355 {
5356 if (STRCMP(p_sh + len - 3, "csh") == 0)
5357 shell_style = STYLE_GLOB;
Vim checks whether the last 3 characters of 'shell' are "csh". Since
that fails with your setting, Vim then uses an sh-compatible method for
expansion. This obviously fails with tcsh.
So, the simple workaround for now is to simply "set shell=/bin/tcsh".
I'll send this information to Bram so he knows about it.
Bram,
The code in src/os_unix.c:mch_expand_wildcards which detects what shell
is being used doesn't work properly if 'shell' has been set to a shell
and arguments (e.g., "/bin/tcsh -f").
5354 else if ((len = STRLEN(p_sh)) >= 3)
5355 {
5356 if (STRCMP(p_sh + len - 3, "csh") == 0)
5357 shell_style = STYLE_GLOB;
5358 else if (STRCMP(p_sh + len - 3, "zsh") == 0)
5359 shell_style = STYLE_PRINT;
5360 }
5361 if (shell_style == STYLE_ECHO && strstr((char *)gettail(p_sh),
5362
"sh") != NULL)
5363 shell_style = STYLE_VIMGLOB;
Vim checks whether the last 3 characters of 'shell' are "csh". Since
the last 3 characters of p_sh in this case are " -f", Vim then checks
whether "sh" is in gettail(p_sh) and uses sh-compatible shell expansion.
It looks like a safer approach would be to grab p_sh up to the first
whitespace and then use gettail() on that to get the shell name. That
should reduce the false-positive rate for setting STYLE_VIMGLOB in line
5363.
Although, it'll still fail with shells like fish which will pass the
strstr(..., "sh") check but not work with STYLE_VIMGLOB. fish does work
with STYLE_ECHO, so we could add that to the special-case list.
Bram,
The code in src/os_unix.c:mch_expand_wildcards which detects what shell
is being used doesn't work properly if 'shell' has been set to a shell
and arguments (e.g., "/bin/tcsh -f").
5354 else if ((len = STRLEN(p_sh)) >= 3)
5355 {
5356 if (STRCMP(p_sh + len - 3, "csh") == 0)
5357 shell_style = STYLE_GLOB;
5358 else if (STRCMP(p_sh + len - 3, "zsh") == 0)
5359 shell_style = STYLE_PRINT;
5360 }
5361 if (shell_style == STYLE_ECHO && strstr((char *)gettail(p_sh),
5362
"sh") != NULL)
5363 shell_style = STYLE_VIMGLOB;
Vim checks whether the last 3 characters of 'shell' are "csh". Since
the last 3 characters of p_sh in this case are " -f", Vim then checks
whether "sh" is in gettail(p_sh) and uses sh-compatible shell expansion.
It looks like a safer approach would be to grab p_sh up to the first
whitespace and then use gettail() on that to get the shell name. That
should reduce the false-positive rate for setting STYLE_VIMGLOB in line
5363.
Although, it'll still fail with shells like fish which will pass the
strstr(..., "sh") check but not work with STYLE_VIMGLOB. fish does work
with STYLE_ECHO, so we could add that to the special-case list.
James - Well, theoretically there could be a space in the path. I think searching for the last slash, using gettail(), can comparing from that position should work in most cases. To catch "tcsh" as well as "csh" we can use "strstr" on gettail(). That only fails for "sh -csh", but that's unlikely to be used :-).
James - Well, theoretically there could be a space in the path. I think searching for the last slash, using gettail(), can comparing from that position should work in most cases. To catch "tcsh" as well as "csh" we can use "strstr" on gettail(). That only fails for "sh -csh", but that's unlikely to be used :-).
I thought of that, but I figured that was quite unlikely to happen on unix systems. That was my original idea, but that fails if the arguments after the shell contain slashes. Then again, that may be just as uncommon as having spaces in the path. The current method of detecting (t)csh works fine. It's just that the string being used to do the detection contains too much information.
Date: Wed, 19 Aug 2009 17:55:54 +0200
Hello Please I am Mr. Jerry Kloubarly Ngessan, I stopped at your email from our international business directory in my research for a reliable person to partner with, I have a business that will profit us both that I want us to discuss. You can contact me for more details for convenient business discussion if you are interested. My email is (jerrykloubarlyngessan@gmail.com) I will be glad to hear from you soon for more details Thanks for your time and waiting for your response Mr.Jerry Kloubarly Ngessan
Hello Please I am Mr. Jerry Kloubarly Ngessan, I stopped at your email from our international business directory in my research for a reliable person to partner with, I have a business that will profit us both that I want us to discuss. You can contact me for more details for convenient business discussion if you are interested. My email is (jerrykloubarlyngessan@gmail.com) I will be glad to hear from you soon for more details Thanks for your time and waiting for your response Mr.Jerry Kloubarly Ngessan