在Emacs中设置shell窗口

3

每周当我重新启动Emacs时,我经常会执行以下操作:

  1. 打开一个连接到RSH服务器的shell,执行一些命令,重命名缓冲区
  2. 为几个不同的远程机器重复步骤1

我在想:是否有一种方法可以在启动脚本中硬编码这些设置?


使用Emacs几乎可以实现任何事情。您需要在Lisp中编写自定义函数,并将其放入您的.emacs文件中。 - EdH
@EdH 是的,我知道这应该是可能的,因为我没有做过太多 EMACs 定制,并且几乎没有编写任何 LISP 函数,你能给我指一些示例吗? - zinking
连接远程服务器时,您需要输入密码吗? - Thomas
@Thomas,目前还没有需要,如果需要的话,那会让事情变得更加困难吗? - zinking
2个回答

3

这里有一个函数,它可以启动一个shell,在ssh连接到一个主机后运行一个命令,然后进入交互式shell:

(defun start-remote-shell (host command)
  (shell (format "*shell-%s*" host))
  (sleep-for 0 500)  ; Wait half a second for the prompt to appear
  (insert (format "ssh -t %s %s'; exec bash -i'"
                  (shell-quote-argument host)
                  (shell-quote-argument (shell-quote-argument command))))
  (comint-send-input))

您可以将此片段放入.emacs文件中,然后按照您想要的特定调用进行操作,例如:

(start-remote-shell "server-one" "apache start")
(start-remote-shell "server-two" "mysql start")
(start-remote-shell "server-three" "foo start")

我遇到了ansi-color-apply-on-region“标记没有指向任何地方”的问题。我做了一些搜索,有些建议等待提示的时间不够长,但是即使我将其更改为3秒钟,我仍然遇到相同的问题。 - zinking

0

我认为这样的东西可以帮助你:

(mapc (lambda (server)
    (shell (concat "*shell-" server "*"))
    (insert "ls")
    (comint-send-input)
    (insert "ps ax")
    (comint-send-input))
  '("server1" "server2"))

如您所见,使用insert命令向控制台打印信息,而使用comint-send-input命令则相当于在终端中按下回车键。 在本例中,将会在两个Shell缓冲区中执行ls和ps命令。

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