我把移动硬盘的目录用软连接链到home目录。然后打开这个目录下的rust项目。 这时候lsp虽然启动了,但是启动器总是提示两次这个路径是否安全,让确认。 确认之后打开了代码文件,虽然仍然打开了lsp server。但是跳转到函数之类的功能失效。
把这个项目直接放到本地硬盘里,就不会有这个问题。
哪位知道会是什么原因么?
我把移动硬盘的目录用软连接链到home目录。然后打开这个目录下的rust项目。 这时候lsp虽然启动了,但是启动器总是提示两次这个路径是否安全,让确认。 确认之后打开了代码文件,虽然仍然打开了lsp server。但是跳转到函数之类的功能失效。
把这个项目直接放到本地硬盘里,就不会有这个问题。
哪位知道会是什么原因么?
用链接就可能出现链接路径和真实路径不匹配的情况。
相关的工具可能有时候用的是链接路径,有时候用的是真实路径。某些情况下可能需要用对比路径、或用路径做检索,然后就出现了不匹配的情况:
(when (string-prefix-p project-dir (file-name-directory buffer-file-name))
...)
正确编写的代码不会出现这种情况, 用 file-truename
是emacs 29.1 lsp-mode 打开的一个rust项目(很小)。 这个是lsp-mode的bug?如果加上那一行,是会影响整个emacs么?
只是说有可能,未必就一定是。
也未必问题出在 lsp-mode
,也可能出在 project[ile]
或着其它什么包。
为了定位问题和排除不必要的干扰,你需要更新 lsp-mode 到最新,加载最小配置。
「正确编写的代码」说起来容易,只要是人写的代码,就难免出现错误。任何时候都用 file-truename
是不现实的,就像你不会去判断每个变量的 t 或 nil,总会有取舍。所以现在搜索 emacs "lsp-mode" symlink
仍然会看到比较近期的相关错误报告。
我刚刚试了一下,更新到 lsp-mode-20230914.1237 仍然会出现无法正确识别链接后的项目根目录的情况。我把 ~/.scratch/rust/helloworld
链接到 ~/Downloads/rust-helloworld
之后,打开链接路径,lsp-mode 给出了错误的建议:
正常情况下,lsp-mode 给出的建议第一项是直接指向项目根目录 ~/Downloads/rust-helloworld/
,但是截图显示指向了 ~/
。
P.S. 我的情况可能比别人复杂,所以未必是同一个问题:
Target Source
-------------------------------------- ------------------------------------
/Users/$USER /Volume/HDD/Users/$USER
/Users/$USER/.scratch /Users/$USER/Dropbox/scratch
/Users/$USER/Downloads/rust-helloword /Users/$USER/.scratch/rsut/helloworld
我就是提一嘴 file-truename
给你们参考一下的, lsp-mode
用没用它我也不知道
虽然但是, 用字符串比对来判断路径是否匹配, 会不会太简单粗暴了, 比如 "~/"
你怎么处理?
等周末有空我试试