On 25/05/10 17:11, Ben Fritz wrote:


On May 24, 6:20 pm, Kirill Igumenshchev<[email protected]>  wrote:
hi,
suppose i have a vim session (vim1) with multiple buffers. I open another 
session vim2 in another terminal and would like to edit one of the files that 
is already opened as a hidden buffer in vim1.

is there a way to do so that both vim1 and vim2 are synced?

Only by saving your changes in one Vim before switching to the other.
In general I would advise against this, but you could do it by making
sure you only ever have a single unsaved copy of this file. Write the
file, switch to the other Vim, and execute :checktime if Vim doesn't
automatically detect a file change. Then you can reload the file.

I'm not sure how well this works for hidden buffers, if at all...I
don't use them often myself. And I rarely ever have multiple Vims
editing the same file intentionally.


Different Vim sessions have no knowledge of each other's 'modified' buffers, so I would recommend *not* to use 'hidden' (which hides buffers in memory without saving them when you edit another file) in this case. What you could do is:

        :set nohidden autowriteall autoread

'hidden' = false: don't hide modified buffers

'autowriteall' = true: when leaving a modified buffer, save it, unless the opposite is explicitly requested by an exclamation mark (i.e., :qa! never saves anything, even with this option) Note: [NoName] buffers cannot be written implicitly, you will have either to use an exclamation mark to abandon them (as in :q! :enew! :e! someotherfile) or else, the :saveas command to save them.

'autoread' = true: if a file was modified outside of Vim (or in a different Vim), and it is not modified in this Vim, read it.

Then you can add the following autocommands:

        :au FocusLost * wa|wv
        :au FocusGained * rv|checkt

(so that all editfiles and viminfo will be saved and read back when you switch Vim instances) but be warned that only gvim, and a very few terminal versions, can detect gain and loss of focus: so instead of opening vim1 and vim2 in console mode in different terminals, you would have to open gvim1 and gvim2, which can still be launched from the terminal(s).

Of course, to see whether your console version can detect focus, you can set up

        :au FocusLost * echomsg "Focus Lost!"
        :au FocusGained * echomsg "Focus Gained!"

but don't put your hopes too high: the help says that most console versions cannot detect focus changes, but doesn't say which ones can. Here, my GTK2/Gnome2 vim can detect focus changes when in GUI mode, but the same executable cannot detect them when in console mode in konsole; and even in the GUI it seems unsystematic: at the bottom of the ":messages" list I see

Focus Lost!
Focus Gained!
Focus Lost!
Focus Lost!
Focus Gained!

which seems to indicated that one focus-gain event was, well, lost (when at the hit-enter prompt, I think).


Best regards,
Tony.
--
A CONS is an object which cares.
                -- Bernie Greenberg.

--
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

Reply via email to