Open kyoh86 opened 6 months ago
本質的ではない。 保存前に「自分が編集開始したときとの差分があれば、警告する」みたいな方が良い。
そしてそれはトランザクションなしには(徹底的には)やれない。
警告するだけだともったいないというか面倒くさいので、こうしたい。
差分を適用しようとしたときに、もしコンフリクトが起きたらgitのmergeがそうするように、その部分にマーカーを挿入したものをバッファに適用する。
<<<<<<<
our
=======
their
>>>>>>>
こうだよね。
これがあれば rhysd/conflict-marker.vim でGitと同じようにコンフリクトとシンプルに戦えるから良いと思う。
仕様まとめ
防ぐためにはどうするか
差分を適用しようとしたときに、もしコンフリクトが起きたらgitのmergeがそうするように、その部分にマーカーを挿入したものをバッファに適用する。
<<<<<<<
our
=======
their
>>>>>>>
こうだよね。
これがあれば rhysd/conflict-marker.vim でGitと同じようにコンフリクトとシンプルに戦えるから良いと思う。
あと、そもそも編集が行われてないんだったらこういう保存周りの処理を一切呼ばないようにしたい。コストの無駄なので。
diffは下手に頑張らず、外部コマンドに頼った方がよさそう。
diff a.txt b.txt | patch --merge c.txt
--merge
が肝
--merge Merge using conflict markers instead of creating reject files.
diff の --from-file
--to-file
使えば、どちらか片方はSTDINに任せられる
https://github.com/kpdecker/jsdiff/issues/307 もろにマージ欲しいと書いてる人がいる。 exportはされてるけどREADMEに書かれてない、しかも変更がめちゃくちゃ古い。 https://github.com/kpdecker/jsdiff/blob/master/src/patch/merge.js
https://github.com/kpdecker/jsdiff/issues/181 ここで欲されて実装されたけどパブリックにならないまま放置されてる
https://github.com/kpdecker/jsdiff/issues/341 今分かってるバグはこれ。