Gary Johnson wrote:
On 2006-05-24, "A.J.Mechelynck" <[EMAIL PROTECTED]> wrote:
Furash Gary wrote:
I'm using VIM on windows with cygwin.  In my _vimrc I've got the
following

" automatically swithc directories set autochdir

        " For cygwin shell
set shell=C:/cygwin/bin/bash set shellcmdflag=--login\ -c set shellxquote=\"
When I try to use cygwin stuff with the "!" command or similar things
from vim, it doesn't seem to know where it is.

That is, if I open up a file on the desktop with gvim, and do

        :pwd

It prints out the path of the desktop (thanks to autochdir I think).
However, if I do

        :! pwd

It prints out the location of my windows home directory.  Is there
anyway I could automatically pass to the shell the location it should
start in?



":pwd" and ":! pwd" don't return the same directory, that is normal.

In my experience, such behavior is not normal.

":pwd" returns Vim's internal "current directory", it changes whenever you use internal ":cd", and 'autochdir' can change it implicitly; such changes are not brought back to the shell.

They are not "brought back" to the parent shell's environment, but
they do affect the environment of any shell that vim executes.

To change the shell's current directory (as shown by ":! pwd" on Unix-like systems and by ":! cd" on dos-like systems) you can use the ":! cd" command, as follows:

":!cd somedirectory" will not do anything useful.  It will start a
shell, change the working directory of that shell, and the shell
will exit, returning control to vim.  It will not affect the
environment of vim or of any subsequent shell.

au BufReadPost * exe "!cd" expand("%:p:h")

The above is untested but I believe it ought to work on Unix as well as on Windows.

Windows handles its process environments differently than Unix does.
If the Windows shell, cmd.exe, starts another program and that
program performs a cd, when that program exits, the working
directory of cmd.exe will have changed to the directory set by the
program.  In Unix, on the other hand, a process inherits its
environment from its parent and passes its environment on to its
children, but changes to the environment by a child are never
reflected in the parent's environment.

Regards,
Gary


Yeah, I goofed, I should have remembered that ":!" (an embedded shell) inherits the environment. Please disregard my previous post in this thread, I oughtn't to give answers too soon after waking up.


Best regards,
Tony.

Reply via email to