在比较文件和更新源代码存储库时,我喜欢使用 vimdiff。要将从一个文件所做的更改复制到另一个文件,我通常使用这样的键序列:-
Shift + V (select line)
k or j; { or }; Up or down arrow keys (select more lines)
y (copy selected lines)
Ctrl + w, left/right arrow (move to other pane)
p (paste lines)
Run Code Online (Sandbox Code Playgroud)
Vim 作为键盘快捷键的大师,肯定应该有更简单的方法来执行相同的任务。有吗?您使用什么来手动更新源代码更改?
我有一些 sql 转储,我正在查看它们之间的差异。diff显然可以向我展示两行之间的差异,但我让自己发疯,试图找到一长串逗号分隔值中的哪些值实际上是导致行不同的值。
我可以使用什么工具来指出某些文件中两行之间的确切字符差异?
我有 file1.txt
this is the original text
line2
line3
line4
happy hacking !
Run Code Online (Sandbox Code Playgroud)
和 file2.txt
this is the original text
line2
line4
happy hacking !
GNU is not UNIX
Run Code Online (Sandbox Code Playgroud)
如果我这样做:diff file1.txt file2.txt我得到:
3d2
< line3
5a5
> GNU is not UNIX
Run Code Online (Sandbox Code Playgroud)
通常如何解释输出?我认为这<意味着已删除,但做什么3d2或5a5意味着什么?
如果我做:
this is the original text
line2
line3
line4
happy hacking !
Run Code Online (Sandbox Code Playgroud)
结果更清楚了,但这@@ -1,5 +1,5 @@意味着什么?
我想聪明一点,将远程文件与本地文件进行比较,而无需先手动下载它。我可以通过以下方式获取远程文件的内容
ssh user@remote-host "cat path/file.name"
Run Code Online (Sandbox Code Playgroud)
然而,管道到 diff
ssh user@remote-host "cat path/file.name" | diff path/file.name
Run Code Online (Sandbox Code Playgroud)
给我这个:
diff: missing operand after `path/file.nae'
diff: Try `diff --help' for more information.
Run Code Online (Sandbox Code Playgroud)
我设置了 ssh 密钥,所以它不会提示我输入密码。对此有什么解决方法?
是否可以在 Vim 中并排查看两个文件?如果是这样,我如何设置我的编辑器来做到这一点,有没有办法diff在 Vim 中的两个文件之间?
我知道:next和:prev命令,但这不是我所追求的。串联查看这两个文件真的很好。
有提供彩色输出的工具:
dwdiff -c File1 File2 # word level diff
grep --color=always # we all know this guy
...
Run Code Online (Sandbox Code Playgroud)
问题是:如何将任意程序的彩色输出转换为彩色html文件?
其他输出格式也可能适用(LaTeX 会很棒)。我认为 html 是一个很好的起点,因为很容易将其转换为其他格式。
(对于如何保留终端颜色代码的好奇,请按照答案:https
:
//unix.stackexchange.com/a/10832/9689... | unbuffer command_with_colours arg1 arg2 | ... - 工具unbuffer是expect 的一部分)
我有两个配置文件,一个来自包管理器的原始配置文件和一个由我自己修改的自定义配置文件。我添加了一些注释来描述行为。
如何diff在配置文件上运行,跳过注释?注释行定义为:
# )跳过第一个要求的(最简单的)正则表达式是#.*. 我尝试了GNU diff 3.0的--ignore-matching-lines=RE( -I RE) 选项,但我无法让它与那个 RE 一起工作。我也尝试过.*#.*,.*\#.*但没有运气。从字面上看,将 ( Port 631)行作为RE不匹配任何内容,将 RE 放在斜杠之间也无济于事。
正如“差异”工具中所建议的那样,正则表达式似乎缺乏?,我试过grep -G:
grep -G '#.*' file
Run Code Online (Sandbox Code Playgroud)
这似乎与评论相符,但不适用于diff -I '#.*' file1 file2.
那么,这个选项应该如何使用呢?如何diff跳过某些行(在我的情况下,评论)?请不要建议greping 文件和比较临时文件。
我正在使用diff -r a b递归比较目录a和b。尽管存在一些断开的链接(a和b目录中的相同断开链接并指向相同的、不存在的目标),但经常会发生这种情况。
diff然后为这些情况输出错误消息并以非零退出代码退出,但是我希望它保持沉默,并以 0 退出,因为目录在我的书中是相同的。
我怎样才能做到这一点?
我有两个包含数千行的日志文件。预处理后,只有一些行不同。这些剩余的线条要么是真正的差异,要么是经过混洗的线条组。
统一差异让我可以看到详细的差异,但它使人工与眼球比较变得困难。并排差异对于比较似乎更有用,但它也增加了数千条未更改的行。有没有办法兼顾两全其美?
请注意,这些日志文件是由xscope监视 Xorg 协议数据的程序生成的。我正在寻找可以应用于类似上述情况的通用工具,而不是专门的网络服务器访问日志分析工具。
http://lekensteyn.nl/files/qemu-sdl-debug/(log13和log14)提供了两个示例日志文件。可以在xscope-filter删除时间戳和其他次要细节的文件中找到预处理器命令。
我通过主机连接ssh,我想将diff某个配置文件与另一台主机上的对应配置文件进行比较(比方说),也可以通过 访问ssh,而无需在运行差异之前先手动下载远程文件。