如何将Emacs实例设置为在单独的GNU屏幕窗口中使用单独的历史记录?

如何将Emacs实例设置为在单独的GNU屏幕窗口中使用单独的历史记录?,emacs,elisp,gnu-screen,Emacs,Elisp,Gnu Screen,我经常在不同的GNU屏幕窗口中打开几个Emacs实例。我怎样才能给他们单独的历史进行汇编等 问题是:当我在一个窗口的Emacs中编译M-x并关闭它,然后在另一个GNU屏幕窗口中打开另一个Emacs时,它自然会有相同的历史记录,即,arrow up给我在另一个窗口中键入的编译命令 如何将它们设置为在单独的GNU屏幕窗口中使用单独的命令等历史记录?编译模式的编译函数使用变量compile history。通常,这不会在不同的Emacs实例之间共享 ie:如果你: 转到单屏幕会话并键入emacs 然后

我经常在不同的GNU屏幕窗口中打开几个Emacs实例。我怎样才能给他们单独的历史进行汇编等

问题是:当我在一个窗口的Emacs中编译M-x并关闭它,然后在另一个GNU屏幕窗口中打开另一个Emacs时,它自然会有相同的历史记录,即,arrow up给我在另一个窗口中键入的编译命令

如何将它们设置为在单独的GNU屏幕窗口中使用单独的命令等历史记录?

编译模式的编译函数使用变量compile history。通常,这不会在不同的Emacs实例之间共享

ie:如果你:

转到单屏幕会话并键入emacs 然后键入M-x compile 然后输入:不作为编译命令生成任何内容 然后转到另一个屏幕窗口并键入emacs 然后键入M-x compile 那么什么都不做就不会成为历史。 如果是,则:

在该变量上启用了历史持久性,请查看该变量的文档 或者emacs命令实际上是一个emacsclient命令 尽管如此,如果您愿意,您仍然可以通过以下方式拥有不同的编译历史:

在每个屏幕会话中设置环境变量 通过emacsclient命令行将env var传递到emacsclient会话中,比如-e。 建议defadvice使用compilation read命令函数,以便根据传入的ENV VAR绑定新的编译历史记录列表
我无法在我的系统GNU Emacs 23.3.1 Debian flavor上重现这种行为。当您禁用配置文件(例如运行emacs-q)时,是否也会发生这种情况?您确定这些是单独的emacs实例吗?多个EmacClient实例都连接到同一个emacs服务器,因此它们都将共享相同的历史记录,但多个emacs实例将各自拥有自己的历史记录。我猜如果这些是连接到同一服务器的EmacClient实例,它们不仅会共享命令历史记录,还会共享*编译*缓冲区,OP肯定也会注意到……好吧,我简化了描述,但这样做并不完全准确。这个问题实际上是关于GNU屏幕和Emacs的,请参阅更新的问题。这两个Emacs实例是在GNU屏幕窗口中,还是在xterm或任何其他终端中,在这里都不会有任何区别。我不明白您为什么说这些Emacs实例自然会共享相同的历史。您能否确认这两个emacs实例完全不相关?例如,尝试在其中一个中创建一个名为foo的缓冲区,并查看它是否也存在于另一个中;不应该。另外,您可以用emacs-q运行相同的测试吗?