在EmacsW32 和cygwin 中使用tramp 可能吗?

2023-12-22

我在使用 Emacs W32 和 cygwin 设置 Trampoline 时遇到一些问题。我已将 emacs 配置为使用 cygwin 作为使用 w32 shell 的 shell。我还将 HOME 环境变量设置为 c:/cygwin/home/myusername

问题是流浪汉似乎挂起并且没有建立连接:

“流浪汉正在等待新 shell 的提示”。

我尝试打开调试,但仍然只看到此消息。期待得到一些关于这方面的提示。谢谢。


请注意 emacs wiki 上与 cygwin 相关的信息:http://www.emacswiki.org/emacs/TrampMode http://www.emacswiki.org/emacs/TrampMode

我不使用 EmacsW32,但我确实通过 Cygwin 和 NT Emacs 成功使用了 TRAMP over ssh。

我从来没有让 TRAMP 在没有 ssh 代理的情况下工作(即提示输入凭据)——正如您所注意到的,它只是挂起——但它在一个 ssh 代理上工作得很好,所以我没有花时间尝试解决这个问题。假设您也很乐意使用代理(并且您已经生成了密钥并根据需要添加了authorized_keys文件),那么对我有用的方法是:

  1. 从 cygwin 运行 ssh-agent。
  2. 通过 cygwin 启动 NT Emacs(以便它继承 ssh-agent 环境变量)。
  3. 使用“sshx”作为 TRAMP 方法(您可以在每个文件路径中手动指定它,但我建议将其设为默认值,使用(setq tramp-default-method "sshx")).

这些要点都在 Wiki 中有所介绍,但您也可以在某种程度上实现自动化:

对于第 1 步,如果 ssh 代理尚未运行,我的 bash 配置文件会自动启动该代理;如果我的身份已过期,则提示我输入密码。 (参见下面的代码。)

对于步骤 2,启动 emacs 的 Windows 快捷方式的目标如下所示:

C:\cygwin\bin\bash.exe --login -c "env HOME=\"`cygpath '%APPDATA%'`\" /cygdrive/c/emacs/emacs-23.1/bin/runemacs.exe"

The --login参数意味着我的 bash 配置文件已执行,这确保在启动 emacs 之前始终执行第 1 步。

(环境HOME对于 TRAMP 来说不是必需的,但是%APPDATA%是 NT Emacs 下的默认设置,这会阻止 Cygwin 主目录优先,因此无论您是否使用此快捷方式运行它,都保持 emacs 配置一致。)

最后,这是我的 cygwin .bash_profile 中管理我的 ssh 代理的代码。这有点老套,但对我有用。

请注意,我的身份会在 4 小时(14400 秒)后过期。发生这种情况后,TRAMP 可能会挂起(如前所述,我从未得到它提示我输入凭据的信息),因此请注意这个问题。类型C-g阻止它尝试连接。要恢复连接,通常只需启动另一个 cygwin shell,重新输入密码,然后 TRAMP 就会再次正常工作。有时它仍然没有响应,但杀死 *tramp* 缓冲区可以解决这个问题。当然,如果可以接受的话,不使您的身份过期应该可以避免这个问题。

SSH_ENV="${HOME}/.ssh/environment"

# Run ssh-agent, if one is not already running
function start_agent {
    echo "Initialising new SSH agent..."
    /usr/bin/ssh-agent -t 14400 | sed 's/^echo/#echo/' > "${SSH_ENV}"
    echo succeeded
    chmod 600 "${SSH_ENV}"
    . "${SSH_ENV}" >/dev/null
    /usr/bin/ssh-add;
}

# Source SSH settings, if applicable
if [ -f "${SSH_ENV}" ]; then
    . "${SSH_ENV}" >/dev/null
    #ps ${SSH_AGENT_PID} doesn't work under cywgin
    ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ >/dev/null || {
        start_agent;
    }
    #if our ssh-added identity has expired (see -t option to ssh-agent)
    #then we need to re-add it
    if ! /usr/bin/ssh-add -l >/dev/null; then
        /usr/bin/ssh-add;
    fi
else
    #no ssh-agent running at the moment
    start_agent;
fi
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在EmacsW32 和cygwin 中使用tramp 可能吗? 的相关文章

  • Emacs 关于 python 模式函数的默认提示

    在 python 模式下 有一个名为 py execute region 的函数 它将突出显示的代码区域发送到 Python 缓冲区进行评估 评估后 光标位于 Python 缓冲区中 但我希望它保留在脚本缓冲区中 以便我可以继续生成更多代码
  • 在 cygwin 上编译 android boost 时无法识别的命令行选项

    我正在尝试在 cygwin 的帮助下编译 boost以下文章 http www codexperiments com android 2011 05 tips tricks building boost with ndk r5 但是当我运行
  • ANDROID NDK - android:找不到命令

    我试图完成 Android NDK 中提供的第一个示例练习 我试图在 cygwin 上运行以下命令 android update project p 然而 我得到android command not found error 我检查了我的
  • Emacs lisp:将字符翻译为标准 ASCII 转录

    我正在尝试编写一个函数 将包含 unicode 字符的字符串转换为某种默认的 ASCII 转录 理想情况下 我想要例如 ngstr m成为Angstroem或者 如果不可能的话 Angstrom 同样地 应该成为a x c 或类似的 Ema
  • 解决 emacs 错误的想法:“应用:生成子进程:exec 格式错误”

    我正在尝试将 rdebug 与 emacs 和 cygwin 一起使用 但遇到了麻烦 每当我执行 M x rdebug 并为其提供适当的脚本来运行时 它都会因错误而停止 apply Spawning child process exec f
  • 如何集成Django和Cygwin?

    我有一个安装了 cygwin python 和 django 的 Windows 盒子 现在我想运行 django admin 但是当我这样做时 我收到错误 django admin py c Python26 python exe can
  • Emacs:调试Python的方法

    我把这个贴在程序员 stackexchange com https softwareengineering stackexchange com questions 29844 emacs methods for debugging pyth
  • 如何在 Emacs Lisp 中“URL 解码”字符串?

    我有一个像 foo 20bar 这样的字符串 我想要其中的 foo bar 我知道 Emacs Lisp 中必须有一个内置函数来解码 URL 编码的字符串 查询字符串 但我今天找不到它 无论是在我的文档中还是在我的文档中都找不到它 lisp
  • emacs:Orgmode,如何从一行行中创建一个列表

    有没有办法隐藏这样的行块 line1 line2 linen into 1 line1 2 line2 n linen 使用 Emacsorg mode http orgmode org 我知道的最短的方法是 突出显示这些行 包括它们的换行
  • Emacs:当光标位于右括号时匹配括号

    之前有人问过 Emacs 当光标位于其上时突出显示匹配的括号 而不是其后 https stackoverflow com questions 16399530 emacs highlight matching paren when curs
  • 寻找下一个开放端口

    有没有什么办法 使用基本的 Unix 命令 找到下一个未使用的端口号 从端口 4444 开始向上 我通过 ssh 通过 openssh 进入 Windows XP 计算机 运行 Cygwin 工具并使用 bash shell 谢谢 戴夫 尝
  • 通过 Emacs 评估 ghci 或 Hugs 中的缓冲区

    在 Emacs 中使用 sml mode 我已经能够使用以下命令将缓冲区内容直接发送到较差的 SML 进程C c C b 现在我只想用 Haskell 做同样的事情 Haskell 模式似乎不支持这一点 所以我想知道 使用 Emacs 和
  • 带有 Viper 和 Vimpulse 的 Emacs 缺少哪些 Vim 功能?

    Emacs 的一些重要功能在 Vim 中是缺失的 例如 comint 模式 并且没有脚本 插件可以替代它们 与 Emacs 相比 Vim 也有一些优点 例如模式编辑和通常更好的默认快捷键 然而 Viper 模式让我两者兼而有之 Vimpul
  • Emacs 强制组织模式捕获缓冲区在新窗口中打开

    如何强制组织模式的捕获缓冲区在新窗口中打开 我试过 setq special display regexps Capture 但它不起作用 我立即看到一个新窗口 然后 org mode 进行两个垂直分割 我使用 3 个垂直分割 并将捕获缓冲
  • Git 显示更改后的相同文件

    当我似乎无法弄清楚更改时 Git 向我显示整个文件已更改 这是 cygwin git 但它也发生在 msysgit 中 git version git version 2 1 1 diff lt git show HEAD File cs
  • 为什么在 emacs-lisp 中的函数参数之前使用#'?

    我熟悉 Emacs Lisp 但不熟悉 Common 或任何其他 Lisp 一些 Lisp 程序员建议 例如emacs 的基本功能 https stackoverflow com questions 17076646 a basic fun
  • 如何让 clangd 转向 c++20

    当没有其他信息时 如何让 clangd 回退到 c 20 例如 在第一次构建之前 cmake 可以生成一个 这是在带有最新 LLVM 的 Arch Linux 上 这是通过 Emacs LSP 运行的 但这应该没有什么区别 你可以加 Com
  • Emacs Lisp 可以将 lambda 形式分配给像Scheme 这样的变量吗?

    在研究 Emacs Lisp 的符号单元时 我发现像这样的示例函数 defun a rest x x 我可以打电话 symbol function a 返回 lambda rest x x 如果我愿意的话我可以使用它 gt lambda r
  • C# 开发人员有什么理由应该学习 Emacs/Vim 吗?

    我在一家纯粹的 Microsoft 商店担任 C 开发人员 最近 我开始在工作之余的空闲时间使用 Gas 和 Linux 自学汇编 我喜欢摆弄 Linux 尽管我对它还很陌生 我一直听说我应该学习 VIM 或 Emacs 但事实是 我绝对不
  • Emacs -- 修改 `fill-column-indicator.el` 以在空白处显示

    我正在寻求一些帮助来修改fill column indicator el由 Alp Aker 设计 以便垂直线在空白处可见 无论空白模式是否处于活动状态 以下是该库的 Github 存储库的链接 https github com alpak

随机推荐