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 -- Gary Johnson | Agilent Technologies [EMAIL PROTECTED] | Wireless Division | Spokane, Washington, USA