取消删除后如何突出显示所有先前删除的文本

如何解决取消删除后如何突出显示所有先前删除的文本

|| 我经常使用命令或脚本来删除文本,并且在执行取消删除(u)后,我想查看该命令/脚本先前删除内容。 使用undelete命令时是否可以突出显示先前删除的文本? (甚至更好地匹配find \“ / \”命令中先前删除的文本)     

解决方法

        如果您只是使用
d
删除了某些文本,则可以使用
/<CTRL-R>\"
来匹配刚删除的文本(即使您只是用
u
取消了删除)。 如果删除的文本包含换行符或正则表达式元字符(例如
\\
[
),则此方法将无效。如果可能,请尝试:
/\\V<CTRL-R>=substitute(substitute(getreg(\'\"\'),\"[\\\\/]\",\'\\\\\\0\',\'g\'),\"\\n\",\'\\\\n\',\"g\")
\\V
-非常不可思议-关闭大多数正则表达式元字符
<CTRL-R>=
-插入vim表达式的求值
substitute(...,\"g\")
-对给定字符串中的所有换行符进行转义
substitute(...,\'g\')
-在给定的字符串中转义所有斜杠和反斜杠
getreg(\'\"\')
-获取
\"
寄存器的内容,其中包含最近被拉出和/或删除的文本 这有点罗word,所以如果您发现自己需要经常这样做,可以将其绑定到
~/.vimrc
中的命令:
\" use,/ in normal mode to match the most recently deleted or yanked text
nmap,/ /\\V<C-R>=substitute(substitute(getreg(\'\"\'),\"g\")<CR><CR><CR>
    ,        如何从文件的一种状态获取差异并与另一种状态进行比较呢?
: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\"
撤消当前缓冲区中的最后一个更改
vert new
垂直拆分新缓冲区
set bt=nofile
将缓冲区类型更改为暂存缓冲区
r #
从备用文件中读取内容,即我们开始时使用的缓冲区
0d _
通过将顶部的空白行移入黑洞寄存器来清理新缓冲区
diffthis
标记当前缓冲区为差异的一部分
wincmd p
切换到最后一个缓冲区(回到我们开始时使用的缓冲区)
exe \"norm! \\<c-r>\"
执行重做以恢复原始缓冲区状态
diffthis
将原始缓冲区标记为与差异区分开 完成后,我建议执行
:diffoff!
关闭两个差异。 遗憾的是,此命令在当前状态下无法处理未保存的缓冲区,因为“ 26”将读取文件。解决方案是将缓冲区的内容复制到命名寄存器中,然后将其粘贴到暂存缓冲区中。不幸的是,这会破坏命名寄存器。将代码重构为函数将提供更大的灵活性,并允许使用变量来保存寄存器的内容(和寄存器类型)并在最后恢复寄存器。
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的更多信息,请参见此vimcast。 有关更多帮助,请参见:
:h diffthis
:h diffoff
:h wincmd
:h \'bt\'
:h :r
:h :d
    ,        尝试使用histwin或Gundo插件。它使您可以比较所有撤消分支,并在预览窗口中显示差异的统一比较。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?