我有一个我想与自己比较的文件。第一个文件是原始文件,第二个文件是正在开发的文件。一种方法是echo
,但是如果原始本身已经改变而没有上演,那么它将无法工作。另一种方法是在文件系统上复制它并使用git diff
和diff
命令。由于临时文件的创建和删除,这并不高效。
我想在VIM中尝试watch
命令。 VIM可以将文件作为缓冲区存储在内存中,因此我的问题是我应该怎么做?
请注意,文件不会在vim环境中更改,而是从外部编辑器更改。
示例:
答案 0 :(得分:2)
在Vim内部,编辑过的文件被读入内存缓冲区。要在某个特定时间点创建文件内容的“快照”,您可以使用#import <Foundation/Foundation.h>
#import "JSONModel.h"
@protocol Video @end
@interface Video : JSONModel
@property (strong, nonatomic) NSArray *youtube;
@end
(默认寄存器)来创建新缓冲区,并将原始缓冲区中的内容复制到该缓冲区,或者:%yank | new %.snapshot | put | 1delete _
(更长),或通过:let contents = getline(1, '$') | new %.snapshot | call setline(1, contents)
通过:SCloneAs %.snapshot
更加轻松。
使用:set autoread
,原始缓冲区将自动更新为在Vim之外进行的任何更改。然后,您可以通过:windo diffthis
对两个窗口进行区分,并使用:diffupdate
更新差异(如果需要)。
当然,您也可以通过:SCloneAs %.snapshot2
创建新的快照;通过:bdelete
删除快照。
答案 1 :(得分:2)
这是为了完成Edwin的回答,这不符合评论。
另一种解决方案是加载test.yml vim test.yml
然后加载:windo diffthis
。
然后创建一个新缓冲区(临时文件):vert diffsplit test_original.yml
,然后读取此新缓冲区:read test.yml
中的内容。
此时你应该有两个窗口 - 一个用test_original.yml,另一个用test.yml。你必须删除test_original.yml中的第一行(dd),因为read附加到文件,因此有一个额外的行。这里的问题是vim将所有行标记为已更改。
要解决此问题,请再次运行:diffoff
:windo diffthis
。现在你只能看到一行。
最后,在test.yml外部进行更改,如果要查看更改,请运行:edit
,现在您应该只看到原始文件和更改文件之间的更改。
一旦结束,就用qa退出!由于没有写入test_original.yml(w),因此没有对文件系统进行复制。
外部的后续更改必须使用:edit
或:checktime
命令重新加载到vim中
答案 2 :(得分:1)
另一个解决方案是启动:windo diffthis
然后创建一个新缓冲区(临时文件):vert diffsplit file1.txt~
(当你有file1.txt
时)然后读取这个新缓冲区中的内容:read file1.txt