在eshell中使用git-log

11

我想在eshell中运行git命令。当我运行:

git log -p

它的界面看起来像这样:

git-log in eshell

注意光标前的^[[k符号。向下箭头键不起作用,会出现“未找到”错误。你可以在 minubuffer(迷你缓冲区)中看到。唯一的滚动方法是使用 RETURN 键,而且看起来很混乱:

git-log in eshell -- scrolling

我的 $TERM 设置为 eterm,我也尝试过 ansi,但都没有效果。有人之前遇到过这个问题吗?

谢谢。

编辑:

我有一个解决方法。我创建了这个函数:

(defun eshell/git (&rest args)
     (apply 'eshell-exec-visual (cons "git" args)))

所以每次运行git命令时,它都会在一个*git*缓冲区中输出结果。

如果你有其他方法,请也告诉我。

5个回答

4

由于使用了分页器,您只能使用RETURN来滚动。您可以通过更改git的core.pager配置选项永久禁用它,或者通过将GIT_PAGER环境变量设置为空字符串来临时禁用它。另一个可能导致问题的来源是^[序列,它们用于切换颜色。您可以使用git log命令的--no-color选项禁用它们。


1
GIT_PAGER非常好用,现在我可以在*eshell*中进行适当的grep了。--no-color似乎没有帮助,但由于没有分页器,它们不再显示。谢谢。 - sudo

3
你必须在git中启用颜色,并且该特定的伪终端不支持彩色。尝试使用m-x ansi-term。它支持颜色并且通常更像终端。
或者你可以尝试使用这个hook:
 (add-hook 'eshell-preoutput-filter-functions
           'ansi-color-filter-apply)

参考这里


1
就记录而言,我也有OP的问题,我的ANSI颜色工作正常,问题是Git内置的分页器与Shell模式和Eshell的有限终端功能不兼容。 - Dustin Getz

3

你尝试过使用Magit吗?它将git集成到你的Emacs工作流中。我对它了解不多,因为我刚开始使用Emacs,还在努力学习基础知识。但是Magit看起来非常不错。安装magit,在你的repo中打开一个文件,然后运行M-x magit-log-long,这将创建一个带有ascii历史图形输出的缓冲区,其中包含git log的输出。我相当确定你也可以从该缓冲区检出旧的提交,但你应该阅读手册以确保。


1

通过将git的内置分页器设置为cat来禁用它:

git config --global core.pager cat

1
еҰӮжһңеңЁeshellе’Ңдј з»ҹзҡ„shellдёӯйғҪдҪҝз”ЁgitпјҢиҝҷ并дёҚжҳҜдёҖдёӘд»Өдәәж»Ўж„Ҹзҡ„и§ЈеҶіж–№жЎҲгҖӮ - Robert P. Goldman

0

vc-print-root-log 命令(C-x v L)会在只读缓冲区中打印一个格式良好的 git 日志,您可以从中搜索、查看差异和显示提交。


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