emacs,编写使用 term-mode 的自定义命令

emacs,编写使用 term-mode 的自定义命令

我使用 EmacsM-xterm作为终端。由于我的典型工作流程如下:

  • 编辑一些代码
  • C-x o到终端缓冲区(或者C-x bterm[Enter]其他东西)
  • 按下Up键使用上一个命令
  • 按下Enter运行
  • C-x o回去

我想将所有这些(除了第一步......也许)绑定到一个命令,我相信 Emacs 足够棒可以做到这一点 :-)

因此,命令必须:

  • 使用终端进入缓冲区(也许它根本不应该改变任何窗口,也许它应该垂直分割窗口(如果它还没有分割)并使用正确的 sid)
  • 运行最后一条命令,那里已经运行了
  • 返回到最后一个缓冲区/屏幕的一部分

谢谢!我不太习惯 Emacs 脚本系统,我希望有人能帮助我,其他人也能利用这个答案来改善他的工作流程,因为我相信这是一个相当常见的问题


命令示例:

python manage.py test
python manage.py test stats
python solve.py # for project-euler puzzles :-)

第一和第二次有时通过 ssh 运行(在终端中)(我喜欢用 进行开发vagrant

我知道绑定第一个和第三个很容易,但第二个变化太频繁了——我只想“运行最后一个命令”

答案1

快速而肮脏-定义一个宏:

F3
C-x b term RET
UP RET
C-x b RET
F4

现在再次按下将重复您在上一个/对F4之间执行的操作。您可以使用宏做更多事情,包括拥有多个宏、编辑宏、将宏保存在 中等。有关更多信息,请查看F3F4.emacsEmacsWikiEmacs 手册

答案2

不允许M-x compile做类似的事情?它允许您键入自定义命令并运行它,然后下次重复此操作...

嗯,交互式命令可能会有问题(这就是你想使用术语的原因),也许持久可重复使用的 ssh 连接也会有问题(但 TRAMP 可以在这里提供帮助:cd REMOTELOCATION; your_cmd可以工作)。

因此,至少,您可以查看compile的源代码来了解在这种情况下如何管理缓冲区以及如何执行命令。

相关内容