在VIM中比较两个文件时,我更喜欢将行进行换行处理。然而,默认情况下vimdiff会将换行关闭。
是否有一种方法可以自动为每个差异设置行换行?
我使用以下内容:
autocmd FilterWritePre * if &diff | setlocal wrap< | endif
FilterWritePre
在生成的差异写入缓冲区之前立即触发,setlocal wrap<
复制了全局变量 wrap
的值。当然也可以直接强制执行 setlocal wrap
。
wrap
还是nowrap
?如果是后者,请尝试使用setlocal wrap
而不是setlocal wrap<
来执行相同的autocmd
。 - Nikita Kouevda你可以将以下内容放入你的vimrc文件中。
au VimEnter * if &diff | execute 'windo set wrap' | endif
当vim已经启动时,在每个分割窗口文件上开始diff和wrap的命令为:
:diffthis
:set wrap
然而,diff + wrap显示不正确:
如果一边文件上有一行很长的行,而另一边文件上的行很短或者缺失,那么长行将占据两行,而短行或缺失行只占一行。
这导致了两个文件的垂直位移。当然,颜色有助于在视觉上弥补这种位移。但是在几行差异中,位移可能会超过窗口的高度,使得diff难以阅读。
所以问题并没有完全解决... 请给予建议。
vimdiff -c 'set wrap' -c 'wincmd w' -c 'set wrap' file1 file2
我必须为演示解决这个问题,其中我想让vimdiff
仅在从特定终端启动时换行。
最后我采取了粗略的方法:
alias vimdiff='vimdiff +"windo set wrap"'
vimdiff file.orig file
vimdiff -c 'windo set wrap' file1 file2 file3 [file4]
window set wrap
命令即可。我发现:set diffopt+=followwrap
设置只影响第二个窗格,原因我不知道。我必须单独使用:setlocal wrap
来使第一个窗格也换行,而且这个设置只在diffopt
设置也生效的情况下才有效。虽然很奇怪,但至少它能用。现在的问题是将其放入某个条件语句中,检查vim版本,以便我可以拥有一个跨平台通用的.vimrc
。