vim多人編輯是一種什麼樣的體驗
此時如果你選"y",你的編輯內容會保存,但你小夥伴的編輯內容會被覆蓋,so你賣了隊友。
而若你選擇"n",你的編輯內容又不會保存下了,so你為隊友犧牲了。
那麼正確姿勢應該是怎樣的呢?老司機掏出google(不要問我為啥不用X度)搜索關鍵詞「vim multiuser」發現reddit上也有人發出同樣的需求和疑問:
I would love to SSH into a server and edit a file in Vim at the same time as a friend.As I"ve understood it, this isn"t possible right now, but would it be possible to make an add-on that makes this possible? Some sort of auto-save that updates every second? Will there be a conflict because of the swap files?The thought of being able to do this makes me warm and fuzzy inside, please don"t disappoint me!
總結一下,通過搜索引擎得到的解決方法大致分為幾類:
1. 用共享屏幕的方法協同編輯:如screen或tmux+vim或者安裝CoVim插件
2. 用版本控制工具如git,svn管理和合併分支
看到這些回答,感覺是殺雞用牛刀了,我們需要的是輕量級的解決方案,越方便越好。
好了,不饒彎子了,直接祭出linux下能夠與beyondcompare媲美的vimdiff工具來解決多人編輯衝突的問題吧。問題的重現和解決過程的如下:
首先在.vimrc中插入下述代碼,關閉vim的swap文件機制,目的是為了當多個用戶打開同一份文檔時不要出現下圖所示的警告。
set noswapfile
touch f1
在窗口1(模擬你的小夥伴)打開f1
vim f1
同時也在窗口2(模擬你)打開f1
vim f1
在窗口1編輯f1的內容如下:
aaaaaabbbbbbccccccdddddd
在窗口1保存
:w
在窗口2編輯f1的內容如下
aaaaaaccccccdddeeeffffff
在窗口2保存
:w
此時出現編輯衝突,窗口2中顯示下圖所示的警告。至此多人編輯衝突的問題已經成功重現
下面演示如何解決:在窗口2,按下「n」回車
然後,將窗口2中的編輯內容另存為f2,並退出此次編輯
:w f2:q!
這個時候,告知你的小夥伴,讓他保存下他當前編輯的文檔並退出編輯,等待你處理完衝突。也就是在窗口1中保存並退出
:wq
現在你需要在窗口2中使用vimdiff工具進行文本比較和合併
vimdiff f1 f2
假如你想將f1文件(即你小夥伴編輯的)的第4行和第5行替換成你編輯的內容的話,可進行如下操作:
在右半窗口讓游標處在第4行,按dp,可看見左半邊窗口完成了我們希望的修改
執行:wqa
done!退出編輯窗口,通知你的小夥伴,衝突已成功解決,可以繼續進行編輯文件f1了。
推薦閱讀:
※Stack Overflow:幫助一百萬開發者退出 Vim
※為什麼很多人認為編輯器比 IDE 更酷?
※如何提高右手小拇指打字的靈活性?
※linux下終端操作有什麼不好?
※真的會有人用 vim 開發大的項目嗎?