当前位置:  开发笔记 > 运维 > 正文

在将文件保存到Vim之前,我能看到更改吗?

如何解决《在将文件保存到Vim之前,我能看到更改吗?》经验,为你挑选了5个好方法。

我用Vim.我打开一个文件.我编辑它,我希望在保存之前看到我编辑的内容.

我怎么能在Vim中这样做?



1> chaos..:
:w !diff % -


有人可以解释一下吗?我不明白发生了什么.我知道你正在炮轰`diff`.`%`指当前打开的文件路径.为什么这一切都是`:w`命令的参数?另外,如何将`-`分配给工作缓冲区的内容?在vim中是自动的,缓冲区的内容(或者缓冲区中的特定范围)被分配给stdin用于shell命令吗?
或者使用`:w!git diff%-`作为彩色版本,如果你安装了git!
@NathanWallace:它是`:w`的参数,因为我们正在将文件写入命令(在`stdin`上).在命令中,`-`告诉它从`stdin`读取.
有没有办法用vimdiff做到这一点?我试过了:w!vimdiff% - 但没有成功.
仅在系统上安装了差异时才有效(读取:不能跨平台工作)
@Dergachev当我运行`:w!git diff%-`时,我得到错误`fatal:bad flag' - '在文件名之后使用'.

2> Tobias Heini..:

因为有些人询问了命令的解释

:w !diff % -

这是我尝试写一个更详细的答案:

我假设你正在使用catecho安装一个系统(例如几乎任何GNU/Linux,Mac OS,BSD和其他类UNIX系统).

以上命令的工作原理如下:

    在vim中保存文件的语法是:

    :w 
    

    在vim中执行shell命令的语法是:

    :!
    

    在vim发布的shell环境中,%碰巧指向当前文件名.您可以通过执行以下操作来验证这一点:

    :!echo %
    

    这应输出文件名(如果vim在没有文件名的情况下运行,则输出错误).

    使用cat我们也可以输出文件的内容:

    :!cat %
    

    这应该返回上次保存状态的文件内容,如果从未保存过,则返回错误.

    程序diff能够从标准输入(stdin)读取.其手册页说明了以下内容:

    [...]如果文件是" - ",则读取标准输入.[...]

    执行不带文件名的save命令而是后面的shell命令会导致vim将文件内容写入shell的stdin,而不是将其保存在物理文件中.您可以通过执行来验证这一点

    :w !cat
    

    这应该始终打印文件当前内容(这将被写入文件).

把它放在一起(或tl; dr):文件被"保存"到stdin,diff以文件名和stdin作为输入运行.

知道这个也可以比较文件与vimdiff做这样的事情 - 这只是一个你不想这样做的想法:

:w !cat > /tmp/tempFile && vimdiff /tmp/tempFile % && rm /tmp/tempFile

(然后打开readonly并关闭vimdiff使用:qall)



3> Bill Lynch..:

http://vim.wikia.com/wiki/Diff_current_buffer_and_the_original_file

这是一个函数和命令,用于查看当前编辑的文件与文件系统中未修改版本之间的差异.只需将它放在你的vimrc或插件目录中,打开一个文件,进行一些修改而不保存它们,然后做:DiffSaved.

function! s:DiffWithSaved()
  let filetype=&ft
  diffthis
  vnew | r # | normal! 1Gdd
  diffthis
  exe "setlocal bt=nofile bh=wipe nobl noswf ro ft=" . filetype
endfunction
com! DiffSaved call s:DiffWithSaved()

要退出差异视图,您可以使用该:diffoff命令.

下面是一个类似的功能,适合模仿'cvs diff'命令......


提供链接并不是真正的答案
@ luc-hermitte当你在一个不断变化的大量盒子上使用vim而你不能轻易改变.vimrc时,不是替代`:w!diff%-`的优势?(如果他们安装了diff.)
混沌的答案是优越的,在托比亚斯的答案中,解释是完整的.

4> Rook..:

我总是喜欢差异化 - 好看,简单,有效.



5> 0x89..:

来自vimrc_example.vim:

" Convenient command to see the difference between the current buffer and the
" file it was loaded from, thus the changes you made.
if !exists(":DiffOrig")
  command DiffOrig vert new | set bt=nofile | r # | 0d_ | diffthis
          \ | wincmd p | diffthis
endif

推荐阅读
手机用户2402852387
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有