一行命令完成需求
近日在处理文件差异的时候搜索到的一个方法,可以用 vim 把差异导出为 HTML (来源)
vimdiff -c TOhtml -c "w vimdiff_export.html | qa!" file1 file2
使用 vimdiff
对比两个文件,依次执行 TOhtml
、保存、全部退出。
2024-04-20 更新
解决横向滚动同步问题
Vim 保存的网页在表格中使用了左右两个 <div>
,可以自然地同步纵向的滚动,但横向的滚动并不同步。搜索一番后,我在 stackoverflow 上找到了这个回答。稍作修改,把如下代码放到 body
的末尾,就能同步两边的横向滚动了。
<script type="text/javascript">
var isSyncingLeftScroll = false;
var isSyncingRightScroll = false;
var leftDiv = document.getElementsByTagName('div')[0];
var rightDiv = document.getElementsByTagName('div')[1];
leftDiv.onscroll = function() {
if (!isSyncingLeftScroll) {
isSyncingRightScroll = true;
rightDiv.scrollLeft = this.scrollLeft;
}
isSyncingLeftScroll = false;
}
rightDiv.onscroll = function() {
if (!isSyncingRightScroll) {
isSyncingLeftScroll = true;
leftDiv.scrollLeft = this.scrollLeft;
}
isSyncingRightScroll = false;
}
</script>
缩短代码以便在 shell 脚本里完成
虽然这段代码已经够短了,但我还是把它缩得更短了:
<script>m=!1,s=!1,a=document.getElementsByTagName("div"),l=a[0],r=a[1];l.onscroll=function(){m||(s=!0,r.scrollLeft=l.scrollLeft),m=!1},r.onscroll=function(){s||(m=!0,l.scrollLeft=r.scrollLeft),s=!1}</script>
这样,在我的 shell 脚本里,只需三行就可以满足需求:
SRC='<script>m=!1,s=!1,a=document.getElementsByTagName("div"),l=a[0],r=a[1];l.onscroll=function(){m||(s=!0,r.scrollLeft=l.scrollLeft),m=!1},r.onscroll=function(){s||(m=!0,l.scrollLeft=r.scrollLeft),s=!1}</script>'
vimdiff -c TOhtml -c "w vimdiff_export.html | qa!" file1 file2
sed -i '/<\/body>/i'"${SRC}" vimdiff_export.html