Try something like this:
set noshellslash
let f = 'c:\topdir\main\source\ai\somefile'
let f = expand(f)
let f =fnamemodify( f, escape( ':p:s?c:\topdir\main\source\??', '\\' ) )
This will give you the relative path, providing that the path head
remains consistent. This should strip off any pathnames it detects
from &path:
function! GetPathRelative( f )
let f = expand( a:f )
let f =fnamemodify( f, ':p', )
let longest = ''
for dir in split( &path, ',' )
let dir = expand( dir )
if stridx( f, dir ) == 0 && f != dir
if strlen( dir ) > strlen( longest )
let longest = dir
endif
endif
endfor
if longest != ''
let f = strpart( f, strlen( longest ) )
let f = substitute( f, '^[/\\]*', '', '' )
endif
return f
endfunction
let f = GetPathRelative( 'c:\topdir\main\source\ai\somefile')
echomsg f
let f = expand("%:p")
echomsg f
let f = GetPathRelative( f )
echomsg f
On 5/25/06, Max Dyckhoff <[EMAIL PROTECTED]> wrote:
I'm sorry, the script which I call basically just makes a system call:
function! SDCheckout()
let file = expand("%")
if (confirm("Checkout from Source Depot?\n\n" . file,
"&Yes\n&No", 1) == 1)
call system("sd edit " . file . " > /dev/null")
if v:shell_error == 0
set noreadonly
edit!
else
if (confirm("An error occured!", "Oh no!", 1) ==
1)
endif
endif
endif
endfunction
Sorry for the wrapping problems.
I'm not entirely sure what you are suggesting doing with :h and :s??,
but would I not suffer the problem of not knowing which subdirectory the
file was in? Surely this isn't something that should need to be fixed,
rather it should Just Work?
Thanks!
Max
-----Original Message-----
From: Eric Arnold [mailto:[EMAIL PROTECTED]
Sent: Wednesday, May 24, 2006 8:10 PM
To: Max Dyckhoff
Cc: [email protected]
Subject: Re: Working directory problems
I'm not sure how your bound function works. Have you tried using
fnamemodify() to manipulate the filename? You can use the :h option
to strip the path, and :s?? to substitute the relative path.
On 5/24/06, Max Dyckhoff <[EMAIL PROTECTED]> wrote:
> Hi,
>
> I have some issues with the working directory in vim that I really
> cannot get to the bottom of. I have tried looking through the help,
and
> I've searched the Interweb too, to no avail, so I thought I would turn
> to this trusty mailing list!
>
> I operate a single vim instance with multiple files open in multiple
> splits. The common working directory for my code files is
> c:\<project>\main\source\, and the majority of the files therein lie
in
> ai\<filename>. Normally the vim split status line shows the file as
> being ai\<filename>, namely the relative path from the working
directory
> of c:\<project>\main\source\.
>
> When I open a new file - which I invariably do using "sf <filename>",
as
> I have all the appropriate directories in my path - occasionally the
> statusline shows as the absolute path, namely
> c:\<project>\main\source\ai\<filename>. If I perform the command "cd
> c:\<project>\main\source", then the status line fixes itself. It
should
> be noted that the status line is only incorrect for the new file;
> existing files are still fine.
>
> Now I wouldn't normally be bothered by this, but I have a function in
> vim which I have bound to F6 that will check the current source file
out
> of our source depot, and if the status line is showing the absolute
path
> then it will fail, because the information about the source depot lies
> only within the c:\<project>\main directories.
>
> God, I hope that makes sense. It seems like such a trivial problem,
but
> it really irks me, and I wonder if anyone could give me a hand!
>
> Cheers,
>
> Max
>
> --
> Max Dyckhoff
> AI Engineer
> Bungie Studios
>