我经常使用命令或脚本来删除文本,并且在执行undelete (u)之后,我想要查看之前被命令/脚本删除的内容。
使用undelete命令时,是否可以突出显示以前删除的文本?(或者更好地匹配先前在find "/“命令中删除的文本)
发布于 2011-06-17 01:16:34
如果你只是使用d删除了一些文本,你可以使用/<CTRL-R>"来匹配你刚刚删除的文本(即使你刚刚用u撤销了删除)。
如果删除的文本包含换行符或正则表达式元字符(如\或[),这将不起作用。如果有可能,试一下:
/\V<CTRL-R>=substitute(substitute(getreg('"'), "[\\/]", '\\\0', 'g'), "\n", '\\n', "g")\V -非常没有意义-关闭大多数正则表达式meta-characters<CTRL-R>= -插入vim expressionsubstitute(..., "\n", '\\n', "g")的求值-转义给定stringsubstitute(..., "[\\/]", '\\\0', 'g')中的所有换行符-转义给定stringgetreg('"')中的所有斜杠和反斜杠-获取"寄存器的内容,其中包含最近拖拽和/或删除的文本这有点冗长,所以如果您发现自己需要经常这样做,可以将它绑定到~/.vimrc中的命令
" use ,/ in normal mode to match the most recently deleted or yanked text
nmap ,/ /\V<C-R>=substitute(substitute(getreg('"'), "[\\/]", '\\\0', 'g'), "\n", '\\n', "g")<CR><CR><CR>发布于 2011-06-17 01:58:05
将文件的一种状态与另一种状态进行比较如何?
:command! -nargs=0 DiffLastChange exe "norm! u" | vert new | set bt=nofile | r # | 0d _ | diffthis | wincmd p | exe "norm! \<c-r>" | diffthis现在,您只需运行DiffLastChange即可查看该文件的最后更改的差异。
解释:
exe "norm! u"撤消当前buffervert new中的最后更改垂直拆分新的bufferset bt=nofile将缓冲区类型更改为临时bufferr #从替代文件中读取内容,即我们开始的缓冲区with0d _通过将顶部的空行移入黑洞来清理新缓冲区registerdiffthis将当前缓冲区标记为diffwincmd p的一部分切换到最后一个缓冲区(返回到缓冲区我们开始执行重做来恢复原始缓冲区,并将原始缓冲区标记为with)exe "norm! \<c-r>" statediffthis 的一部分
完成后,我建议执行:diffoff!来关闭这两个差异。
遗憾的是,此命令在其当前状态下不能处理未保存的缓冲区,因为:read #将读取文件。解决方案是将缓冲区的内容复制到指定的寄存器中,然后将其粘贴到临时缓冲区中。遗憾的是,这将重创命名寄存器。将代码重构为函数将提供更大的灵活性,并允许使用变量来保存寄存器的内容(和寄存器类型),并在结束时恢复寄存器。
function! DiffLastChange(...)
let a = @a
let at = getregtype('a')
let c = a:0 == 1 ? a:1 : 1
let ft = &ft
try
exe "norm! " . c . "u"
sil %y a
vert new
set bt=nofile
exe "set ft=" . ft
sil pu a
0d _
diffthis
wincmd p
exe "norm! " . c . "\<c-r>"
diffthis
finally
call setreg('a', a, at)
endtry
endfunction
command! -nargs=? DiffLastChange call DiffLastChange(<f-args>)除了修复未保存的缓冲区问题和销毁问题外,我还添加了通过命令参数(例如:DiffLastChange 3 )进一步追溯历史的功能。该命令还将暂存缓冲区的文件类型设置为与原始缓冲区相同,以便为该缓冲区打开语法突出显示。
对于在缓冲区中查看历史部分之间的差异的更强大的解决方案,我同意Christian Brabandt的观点,并建议使用Gundo或histwin。有关Gundo的更多信息,请参见此vimcasts。
有关更多帮助,请参阅:
:h diffthis
:h diffoff
:h wincmd
:h 'bt'
:h :r
:h :d发布于 2011-06-17 14:18:06
试试histwin或Gundo插件。它允许您比较所有撤消分支,并在预览窗口中显示不同的统一差异。
https://stackoverflow.com/questions/6373991
复制相似问题