我有一个 screenrc 文件,但是当我在 screen 中运行 emacs 时,我发现了一些冲突。例如,在 emacs 中跨缓冲区移动时,Ctrl-右箭头/左箭头,而不是来回移动,会将一些字符发送到缓冲区,例如 5C、5D 等。即使我在没有任何 screenrc 文件的情况下调用 screen,也存在此问题。但至少没有其他冲突。但如果有人能告诉我如何解决这个问题,我将不胜感激?
由于我的 screenrc 文件中有自己的绑定,并且我想继续使用它,所以我在想我会保留我的 screenrc 文件,但是当我想在新屏幕中启动 emacs 时,我不会使用我的 screenrc。有没有办法在调用屏幕时不使用 screenrc ?到目前为止,我在启动 emacs 时一直通过将我的 screenrc 文件重命名为其他名称来进行管理。
是否有任何方法可以让 emacs 本身充当 screen,就像我使用 screen 一样,这样当远程 ssh 会话关闭时,我的 emacs 会话就不会终止。我找到了一些有关 emacs 客户端和 emacs 服务器的文档,但看不懂太多。如果有人能告诉我如何在 emacs 中保存会话并恢复它们,我将不胜感激,这样我就不需要使用 screen 来处理 emacs 了,因为人们应该能够再次恢复 emacs 进程。
答案1
我只对你的问题#3有一些意见。
从 emacs 23 开始,emacs 具有守护进程模式,对我来说,这消除了在屏幕内运行 emacs 的需要。启动后第一次登录时,我会emacs --daemon
从终端启动。这会在后台启动 emacs。然后,每当我需要使用 emacs 时,我都可以运行emacsclient -nc
以将 X 窗口添加到我的 emacs 会话,或者emacsclient -t
获取终端会话。
多个客户端可以愉快地共存。我经常在工作时在工作站屏幕上运行 X 客户端,在家里通过 ssh 登录运行 X 客户端,并在手机上运行终端客户端。所有这些都与同一个 emacs 进程通信,我的所有缓冲区和其他状态都完好无损。如果我手机上的 ssh 连接断开,我可以在再次登录后继续上次中断的地方。
我对屏幕上的键绑定了解不够,无法帮助您解决前两个问题。
答案2
1) 这与 Emacs 解释终端发送的转义序列的方式有关。这很有趣!你应该配置你的输入解码图例如,在 .emacs 文件中定义以下函数:
(defun terminal-init-screen ()
"Terminal initialization function for GNU screen."
(when (boundp 'input-decode-map)
(define-key input-decode-map "^[[1;5C" [(control right)])
(define-key input-decode-map "^[[1;5D" [(control left)])))
(请注意,^[
上面例子中的不是插入符号后跟一个左括号,它是一个逃脱像这样输入的字符:C-q ESC.)
此函数被在屏幕内运行的 Emacs 神奇地调用。
2) 您可以使用其-c
选项调用 screen,以指定与默认文件不同的文件.screenrc
。因此,如果您对 screen 有特殊配置,并且只希望在 screen 中运行 Emacs 时应用这些配置,则可以将它们放在一个文件中.emacs-screenrc
,然后在 screen 中运行 emacs,如下所示:
screen -c .emacs-screenrc emacs
请注意,该文件可能是空的。
3) 在 emacs 中管理会话有时可能很繁琐。Emacs 提供现成的桌面保存模式我个人不使用,但我读过关于它的褒贬不一的报告。你可能想试一试。关于替代方法的良好概述可以在Emacs 维基。
首先,会话管理的替代方法是将 Emacs 作为服务器运行,并使用 连接到它emacsclient
。我不知道你看到了哪个文档,但 GNU 的官方 Emacs 文档通常都非常好。看看它:
http://www.gnu.org/software/libtool/manual/emacs/Emacs-Server.html#Emacs-Server
答案3
对于#1
尝试从屏幕内部调用 emacs:
TERM=xterm emacs -nw somefile
CTRL+箭头现在应能正常工作
答案4
实现 3) 的另一种方法是使用 tramp:使用 tramp,您可以使用计算机上运行的 Emacs 编辑服务器上的文件。只需打开/ssh:user@host:/path/to/remote/file
这也可以用于其他“远程”用途,例如
/sudo::/etc/bla
使用 sudo 进行编辑,/ftp:user@host:/path/to/remote/file
使用 ftp 编辑远程文件...
tramp 将在需要时重新打开 ssh 连接,您甚至可以使用 tramp 在远程主机上运行程序(例如 VCS)。