有可能差异甚至vimdiff两个几乎相似的子程序出现在同一个文件中?如果是这样,怎么样?
我可以想到将两个子程序复制到两个单独的文件中,然后对它们进行区分,但有没有办法在原始文件中进行?
谢谢!
mMo*_*ntu 45
插件linediff.vim:在两个文本块上执行交互式差异类似于Vincent指出的一个具有一些附加功能:
要使用它,您可以在第一个块上执行视觉选择以进行diff,输入命令:Linediff
,然后将其重复到第二个块.退出,:LineDiffReset
我发现以下地图很有帮助:
noremap \ldt :Linediff<CR>
noremap \ldo :LinediffReset<CR>
Run Code Online (Sandbox Code Playgroud)
ZyX*_*ZyX 23
您不能在原始文件中执行此操作,但可以不使用单独的文件而只使用单独的缓冲区来执行此操作.如果您在寄存器中复制了一个子例程a
(例如,"ay
在可视模式下键入)和寄存器中的其他子例程,这应该可以工作b
:
enew | call setline(1, split(@a, "\n")) | diffthis | vnew | call setline(1, split(@b, "\n")) | diffthis
Run Code Online (Sandbox Code Playgroud)
要自动化:
let g:diffed_buffers=[]
function DiffText(a, b, diffed_buffers)
enew
setlocal buftype=nowrite
call add(a:diffed_buffers, bufnr('%'))
call setline(1, split(a:a, "\n"))
diffthis
vnew
setlocal buftype=nowrite
call add(a:diffed_buffers, bufnr('%'))
call setline(1, split(a:b, "\n"))
diffthis
endfunction
function WipeOutDiffs(diffed_buffers)
for buffer in a:diffed_buffers
execute 'bwipeout! '.buffer
endfor
endfunction
nnoremap <special> <F7> :call DiffText(@a, @b, g:diffed_buffers)<CR>
nnoremap <special> <F8> :call WipeOutDiffs(g:diffed_buffers) | let g:diffed_buffers=[]<CR>
Run Code Online (Sandbox Code Playgroud)
请注意,hidden
如果Vim拒绝放弃更改的文件,您可能需要设置选项(请参阅参考资料:h abandon
).
您可以将这两个部分/子例程/节写入两个文件,然后使用vimdiff查看区别。
:1, 39 write part1 //any line range or marks can be used
:40, 79 write part2
:!vimdiff part1 part2
Run Code Online (Sandbox Code Playgroud)
如果您不习惯使用行号,可以将光标停留在该部分的开头,按v并选择直到该部分的结尾,然后按:。它会显示:'<,'>。然后在命令行本身中键入write,然后输入文件名。按回车。相似,也做第二个。然后,您可以如上所述执行vimdiff命令。
(写命令将零件保存到新文件。)编写新文件可能不是一个好主意,但这对我有帮助。尤其是当我们不得不多次进行比较时。
这是不使用插件或不关心内存的最简单方法之一。