【问题标题】:emacs tramp mode does not respect .clang-format in the remote directoryemacs tramp 模式不尊重远程目录中的 .clang-format
【发布时间】:2018-02-08 05:34:56
【问题描述】:

我有一个带有.clang-formatsimple.c 源代码的git repo。在本地模式下,即从本地磁盘编辑,它尊重样式文件。但是,如果我使用 tramp 模式编辑同一个 repo,那么clang-format 将使用一些默认样式文件格式化源代码(我不知道它是从哪里获取的),并且不会尊重存在于同一个远程目录中的样式文件.

Q1:我该如何解决这个问题?

Q2:(可能更简单)tramp-mode中的clang-format默认在哪里拾取样式文件?

【问题讨论】:

  • 我想你正在使用来自 MELPA 的clang-format.el。我对此一无所知,但很快扫描此文件,它似乎不支持远程工作。例如,它使用call-process-region,它不知道远程主机。
  • 我试过tramp-call-process-regiontramp-sh-handle-call-process-region;两者都没有工作。据我了解,tramp-mode 将远程文件复制到/var 下的本地目录;我也尝试将.clang-format 放在/var 下,但无济于事。
  • 不,不是这样。 call-process-region 需要对应的 process-file-region,但它不存在。所以必须先写这个函数。
  • @MichaelAlbinus 我不熟悉流浪者模式的工作原理。你能描述一下process-file-region 的假设功能是什么吗?

标签: emacs clang-format tramp


【解决方案1】:

以下是我解决此问题的方法:

  1. 我将.clang-format 文件从远程位置复制到我的主目录中。
  2. 我编写了以下包装函数,将 --assume-filename 参数替换为引用主目录中同名文件的路径:
  (defun my-clang-format-region ()
    (interactive)
    (let ((start (if (use-region-p) (region-beginning) (point)))
          (end (if (use-region-p) (region-end) (point)))
          (assumed-filename (if (file-remote-p buffer-file-name)
                                (concat (getenv "HOME") "/" (file-name-nondirectory buffer-file-name))
                               buffer-file-name)))
      (clang-format-region start end clang-format-style assumed-filename)))
  (global-set-key '[(control meta tab)] 'my-clang-format-region)

--assume-filename 似乎可以指定一个不存在的文件的路径。所有clang-format 似乎关心的是文件的扩展名和目录路径;它使用目录路径作为查找.clang-format 文件的位置。如果在那里找不到文件,它会从该位置开始查找每个祖先目录。

这对我来说适用于 clang-format 可执行文件的 9.0 和 10.0 版本,以及来自 melpa 的 clang-format.el 版本 20190824.2216。

【讨论】:

    【解决方案2】:

    如果您在本地主机上具有root权限,则创建目录/ssh:host:并将.clang-format从远程主机复制到/ssh:host:/path/to/.clang-format即可解决问题。

    这是因为 Emacs 的 clang-format 包将 buffer-file-name 传递给本地的 clang-format 可执行文件,而对于远程文件,buffer-file-nameTramp file name,它由 Emacs 专门处理,但 @987654329 不知道@。没有什么可以阻止您在本地主机上创建具有该确切名称的文件,之后clang-format 将能够找到并读取相应的.clang-format 配置文件。

    【讨论】:

      猜你喜欢
      • 2012-11-09
      • 1970-01-01
      • 2018-06-09
      • 1970-01-01
      • 1970-01-01
      • 2017-02-15
      • 2012-04-11
      • 2011-03-09
      • 2010-09-13
      相关资源
      最近更新 更多