Wednesday, September 12, 2012

Re: Changing location of swap directory for selected files, how to?

On 08:03 Wed 12 Sep , Ben Fritz wrote:
> On Wednesday, September 12, 2012 8:22:44 AM UTC-5, Karthick wrote:
> > Hello,
> >
> >
> > I would like to modify the value of 'dir' option for a few specific
> > files (e.g: all files in directory ~/Foo/). Had 'dir' been a buffer
> > local option, it would have been a easy thing,
> > au BufEnter ~/Foo/* set dir=newval
> >
> > But 'dir' is global across buffers. Can anyone suggest workarounds?
> >
> >
> > I have tried
> > au BufEnter ~/Foo/* call ChangeDir()
> > au BufLeave ~/Foo/* call RevertDir()
> >
> > function ChangeDir()
> > let b:tmp=&dir
> > set dir=newval
> > endfunction
> >
> > function RevertDir()
> > exe 'set dir=' . b:tmp
> > endfunction
> >
> > ..but BufEnter fires *after* swap file is created.
> >
> > If you want to know why I'm doing this - it is to prevent .swp files
> > being created in my DropBox folder (and retain default behavior in all
> > other cases)
> >
> > -Karthick
>
> I bet you could add BufReadPre to your BufEnter autocmd to get it to trigger before swapfile creation. Maybe you'd need to add a BufReadPost to your BufLeave event as well, so that the BufEnter doesn't save the wrong dir option value.
>
> I'm not sure how to make it work when you create a new file. Possibly BufNewFile will work, or you can always create the document outside of Vim before editing.
>
> One workaround might be to set 'noswapfile' globally in your .vimrc, and set 'swapfile' locally on BufEnter, after setting the correct 'dir' option.
>
> Another workaround, which is probably not worth using, is that if a file is loaded with 'readonly' set, Vim doesn't create a swap file until the first change. You might be able to take advantage of this.

What about this idea:

function! ChangeSwap()
let dir=&dir
set dir=/tmp
set swapfile!
set swapfile!
let &dir=dir
endfunction

au BufReadPost ../DrobBox/* :call ChangeSwap()

It is not efficient since it recreates the swap file but you could try.

Best,
Marcin




--
You received this message from the "vim_use" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

No comments: