在Vim中进行搜索和替换后如何查看更改?

3
有没有一种方法可以查看vim搜索和替换生成的更改?例如,以下示例删除尾随空格。
:%s/\s\+$//g

但是,假设我对正则表达式不确定,我担心它会更改我不想更改的东西。但我也不想使用gc代替g,因为确认过多的更改会让人混乱并且需要一段时间,相反地,我希望在新缓冲区中看到更改的内容,就像某种列表一样。这可能吗?


如果你使用git,你可以使用它的diff命令来查看发生了什么。 - Matt Gregory
或者你可以将它写入一个单独的文件并使用vimdiff,但无论如何你都应该使用git。 - Matt Gregory
@MattGregory,你能指点我如何在git中使用diff吗?我正在使用git,但不知道如何将一个文件与其先前版本进行比较(它应该在另一个提交中吗?还是有一种更简单的方法,而不必为了diff而进行提交?),我也会查看vimdiff,谢谢。 - Jose V
git diff filename 可以获取文件中的差异,而 git diff 则适用于所有文件。 - dlmeetei
这不是一个完美的证明,但为什么你不在Vim会话中使用:jumps呢? - dlmeetei
2个回答

5

有一个老技巧可以用来查看已保存文件和最新更改之间的差异。你可以使用:help :DiffOrig命令进行查看。

这归结为以下命令:

 command DiffOrig vert new | set bt=nofile | r # | 0d_ | diffthis
    \ | wincmd p | diffthis

一旦您将以下内容放入您的 .vimrc 文件中,便可保存文件,进行替换(或其他任何更改),然后运行 :DiffOrig 查看更改。如果您对结果不满意,可以按下 u 进行撤销,或者保存文件。

这意味着在运行替换之前必须保存文件,但根据您的评论,我认为这已经是一个足够好的工具了?

您可能还想参考 vim 维基上的这个页面,了解一些替代方案:http://vim.wikia.com/wiki/Diff_current_buffer_and_the_original_file


3

Neovim有一个很好的功能,可以实时高亮替换内容。

"As you type a substitution  the results will immediately be
"visible in the edit window. This feature is best highlighted
"in this video: http://www.youtube.com/watch?v=sA3z6gsqOuw
if has("nvim")
    set inccommand=nosplit
endif

另一个很酷的选项是插件NarrowRegion。它会选择文本,使用临时窗口应用更改,并在保存后将结果放回源文本中。 (链接)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接