繁体   English   中英

emacs 流浪模式不尊重远程目录中的 .clang 格式

[英]emacs tramp mode does not respect .clang-format in the remote directory

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

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

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

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

  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文件的位置。 如果在那里找不到该文件,它会在从该位置开始的每个祖先目录中查找。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM