V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zjsxwc
V2EX  ›  程序员

doom-emacs 搭建 rust 开发环境

  •  
  •   zjsxwc ·
    zjsxwc · 2021-01-04 09:21:07 +08:00 · 2649 次点击
    这是一个创建于 1427 天前的主题,其中的信息可能已经有所发展或是发生改变。

    安装 doom-emacs

    我是 manjaro 系统,参考 https://github.com/hlissner/doom-emacs/#install

    pacman -S git emacs ripgrep
    pacman -S fd
    git clone --depth 1 https://github.com/hlissner/doom-emacs ~/.emacs.d
    ~/.emacs.d/bin/doom install
    

    安装 rls 这个 rust 语言服务器

    rustup update
    rustup component add rls rust-analysis rust-src
    

    配置 doom-emacs

    修改 ~/.doom.d/init.el (参考 https://emacs-lsp.github.io/lsp-mode/page/installation/

    ;;; 添加中国源
    (setq package-archives '(("gnu" . "http://mirrors.ustc.edu.cn/elpa/gnu/")
                             ("melpa" . "http://mirrors.ustc.edu.cn/elpa/melpa/")
                             ("melpa-stable" . "http://mirrors.ustc.edu.cn/elpa/melpa-stable/")
                             ("org" . "http://mirrors.ustc.edu.cn/elpa/org/")))
    
    (doom! :input
    ...
           :tools
           lsp  ;打开支持 rls 的 lsp 协议的三方包依赖
    ...
           :lang
           (rust +lsp)  ;对于 rust 语言使用 lsp 协议
    
    

    更新 doom-emacs 的三方包

    ~/.emacs.d/bin/doom sync
    

    对 rustic-mode 使用 rust-analyzer 作为 rustic-lsp-server,修改文件~/.doom.d/config.el最后添加一句

    (setq rustic-lsp-server 'rust-analyzer)
    

    使用方式

    doom-emacs 使用 vim 快捷键编辑单个文件,使用 emacs 快捷键编辑整个项目,还能使用 emacs 庞大的 elisp 插件库。

    默认 projectile 是以 git 项目作为当前一整个项目的,但 rustic 会把 rust-src 当作三方依赖,所以可以从我们当前代码跳到标准库代码定义中。

    使用 <空格> + c 就可以唤出菜单进行对 rust symbol 语义上跳转,

    比如 <空格> + c + d 会跳到 symbol 定义处, <空格> + c + D 会跳到使用 symbol 处(当然这个是我当前的版本快捷键,如果版本更新还是要看菜单显示出的快捷键)。

    使用 <空格> + b 就可以唤出菜单进行进行 navigation,比如 <空格> + b + [ 就是回跳上一个页面,<空格> + b + ]就是回跳下一个页面。

    使用 <空格> + s 就是全局搜索

    使用 <空格> + p 就是项目管理

    使用 <ctrl> + x + <ctrl> + c 就是退出 emacs

    使用 <alt> + x 就是执行 emacs 三方插件提供的函数

    第 1 条附言  ·  2022-08-29 10:39:07 +08:00
    最新 rls 已经被 rust-analyzer 取代所以我们从 github 源代码安装最新 rust-analyzer

    cd ~/.doom.d
    git clone https://github.com/rust-analyzer/rust-analyzer.git
    cd rust-analyzer
    cargo xtask install --server
    第 2 条附言  ·  2022-08-30 12:15:26 +08:00
    使用 inlay hints 来辅助 rust 类型提示,lsp-treemacs 来概览文件结构

    vim ~/.doom.d/packages.el
    ```
    (package! treemacs)
    (package! lsp-treemacs)
    ```

    vim ~/.doom.d/config.el
    ```
    (require 'rust-mode)
    (require 'rustic)
    (require 'lsp)
    (require 'flycheck)

    (with-eval-after-load 'lsp
    (with-eval-after-load 'rustic
    (setq lsp-rust-analyzer-server-display-inlay-hints t)
    (add-hook 'rustic-mode-hook #'lsp-rust-analyzer-inlay-hints-mode)
    ))

    (use-package! lsp-rust
    :config
    (setq! lsp-rust-analyzer-cargo-watch-enable t
    lsp-rust-analyzer-cargo-watch-command "clippy"
    lsp-rust-analyzer-proc-macro-enable t
    lsp-rust-analyzer-cargo-load-out-dirs-from-check t
    lsp-rust-analyzer-inlay-hints-mode t
    lsp-rust-analyzer-display-closure-return-type-hints t
    lsp-rust-analyzer-display-chaining-hints t
    lsp-rust-analyzer-display-parameter-hints t
    ))
    (after! rustic
    (setq rustic-lsp-server 'rust-analyzer)
    )
    ```

    ~/.emacs.d/bin/doom sync
    第 3 条附言  ·  2022-10-03 12:46:24 +08:00
    ln -s ~/.doom.d/rust-analyzer/target/release/rust-analyzer ~/.local/bin/rust-analyzer
    zjsxwc
        1
    zjsxwc  
    OP
       2021-01-04 09:45:57 +08:00
    缺点还是有的,emacs 对于 rust 的代码补全只限于 symbol 范围提示,
    不能和 jb 家的 ide 那样能够智能总结我的编码习惯猜出我要写什么变量名,

    smallsneaker
        2
    smallsneaker  
       2021-08-01 13:32:46 +08:00
    awesome, thanks!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1076 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 23:15 · PVG 07:15 · LAX 15:15 · JFK 18:15
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.