设置emacs shell

设置emacs shell,emacs,startup,Emacs,Startup,当我重新启动Emacs时,我经常(每周)在Emacs中执行此类操作: 打开连接到RSH服务器的shell,执行一些命令,重命名缓冲区 对几个不同的远程机器重复步骤1 我在想:有没有一种方法可以让我在启动脚本中硬编码这些设置?这里有一个函数,可以启动shell,将其ssh到主机,并在放入交互式shell之前运行命令: (defun start-remote-shell (host command) (shell (format "*shell-%s*" host)) (sleep-for

当我重新启动Emacs时,我经常(每周)在Emacs中执行此类操作:

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

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

    这里有一个函数,可以启动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")
    

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

    (mapc (lambda (server)
        (shell (concat "*shell-" server "*"))
        (insert "ls")
        (comint-send-input)
        (insert "ps ax")
        (comint-send-input))
      '("server1" "server2"))
    
    如您所见,使用insert写入控制台,使用comint发送输入,就像在终端中按回车键一样。
    在本例中,ls和ps将在两个shell缓冲区上执行

    使用emacs几乎可以实现任何功能。您需要用lisp编写一个自定义函数,并将其放入您的.emacs文件中。@EdH是的,我知道这应该是可能的,因为我没有经常进行emacs自定义,而且几乎没有编写任何lisp函数,您能给我一些示例吗?您必须键入密码才能连接到远程服务器吗?@Thomas,目前没有,如果需要,会不会让事情变得很困难?我遇到了ansi颜色应用于区域“标记不指向任何地方”我做了一些搜索,有些建议等待提示时间不够长,但在我将其更改为3秒后,我仍然有相同的问题。