On 2006-08-12, Yakov Lerner <[EMAIL PROTECTED]> wrote: > On 8/12/06, Gary Johnson <[EMAIL PROTECTED]> wrote: > > I just finished troubleshooting a problem that had several > > contributing factors, one of which was the way Vim's mch_FullName() > > function behaves with ClearCase versioned file names. > > > > If you open a file under ClearCase using the full path name and a > > version extension, e.g., > > > > /project/xyz/system/src/bar.c@@/main/42 > > > > Vim will ask mch_FullName() for the full name of that file. > > mch_FullName() will then extract everything to the left of the last > > '/' as the directory containing the file and chdir() to that > > directory, e.g., > > > > chdir("/project/xyz/system/src/bar.c@@/main") > > > > mch_FullName() then calls getcwd() to determine the operating > > system's name for that directory, which from ClearCase is > > > > /view/garyjohn_main@@/project/xyz/system/main/5/src/main/2/bar.c/main > > > > mch_FullName() then puts back the trailing "file name" of "42" in > > this case and returns the full file name as > > > > /view/garyjohn_main@@/project/xyz/system/main/5/src/main/2/bar.c/main/42 > > > > This is the name that is then given to the buffer used for that file > > and which appears in the status line. > > > > This is a valid file name which points to the correct file and works > > with most external commands. However, it does not work with those > > external commands or Vim autocommands whose behavior depend on the > > file name suffix. It's also really ugly in the status line. > > How about using a symlink ?
That would work. It could be messy figuring out where to put it where its name would be unique, but not impossible. > Regarding statusline, you can use custom statusline > and replace %f to %{MyFilename()} which knows to handle @@. Good idea. There's even a ClearCase command that can convert from one form of the file name to another. On 2006-08-12, Yakov Lerner <[EMAIL PROTECTED]> wrote: > On 8/12/06, Yakov Lerner <[EMAIL PROTECTED]> wrote: > > On 8/12/06, Gary Johnson <[EMAIL PROTECTED]> > > If you open a file > > under ClearCase using the full path name and a > > > version extension, e.g., > > > > > > /project/xyz/system/src/bar.c@@/main/42 > > If I'm not mistaken, 42 is version name here, and your problem is that > such pathname does not have .c extension. > > How about creating "automatic" symlinks: have autocommand autocreate > symlinks these lines: > > :au BufNew /project/xyz/system/src/*.v*.c :!ver=`basename <afile> .c > | sed 's/^.*\.v//'`; base=`basename <afile> .c | sed > 's/\.v[0-9]*\$//`; ln -s /project/xyz/system/src/\$base.c@@/main/\$ver > <afile> > > This is untested, but the idea is that when you open > > % vim bar.v42.c > > the proper symlink is automatically created to version > 42 of bar.c This solves the problem of proper extension > and of ugly @@ filenames. Hmm. That could work. Thanks. One of the situations in which I've had trouble giving a properly-extended file name to an external program is when I've used the ClearCase Vtree Browser to select a C file to opened in Vim, then tried to run 'lint' on the file. In that case, I could modify my :Lint command to create a temporary file with the proper suffix, either as a copy of the file in the Vim buffer or as a symbolic link from the ClearCase file as in your suggestion. I've also come up with a solution for part of the problem, that of Vim's insistence on converting a name like /project/xyz/system/src/bar.c@@/main/42 (through chdir() and getcwd()) to a name like /view/garyjohn_main@@/project/xyz/system/main/5/src/main/2/bar.c/main Using the following autocommand seems to fix that by restoring the original file name. I thought I had tried this solution before and it didn't work, but it seems to work now, so I must have had something set differently before. au VimEnter /view/*@@/* silent windo \ exe 'file' system('cleartool des -short -cview "'.expand("%").'"') The windo command covers the case where vim was invoked as vimdiff to compare two ClearCase versions. Thanks again, Gary -- Gary Johnson | Agilent Technologies [EMAIL PROTECTED] | Wireless Division | Spokane, Washington, USA