欢迎使用 Nox -- 轻量级 LSP 客户端

目前使用Nox,在Mac 和 Linux 都正常。但在Windows下有点小问题:
通过kill-this-buffer 关闭所有*Nox(xxxxx)* buffer时会造成emacs 冻结。
虽然对使用影响不太大,但是有时不小心关闭这些nox buffer时就得重启emacs。由于冻结住了,很难debug。有用过nox的朋友遇到这个问题吗?

有个问题: java项目下不能 auto guess project root,设置 project root 开启 nox 后,只有第一个 java 文件能正常补全,打开其他的 java 文件会另起一个 nox workspace

请问有人在使用Nox实现C#的自动补全和跳转吗? 我用Nox尝试连接,总是不成功。
不知道Nox 需要什么样的参数可以连接?

经过测试,目前C#在Emacs上的语法高亮可以使用Csharp-mode, 配合omnisharp-emacs 连接omnisharp-roslyn Sever 正常工作。

Nox是Forked自eglot的,在eglot上有人通过以下配置可以成功连接omnisharp-roslyn

  (use-package eglot
  :commands (eglot eglot-ensure)
  :hook ((python-mode . eglot-ensure)
         (csharp-mode . eglot-ensure))
  :config
  (progn
    (define-key eglot-mode-map (kbd "C-c e r") 'eglot-rename)
    (define-key eglot-mode-map (kbd "C-c e f") 'eglot-format)
    (define-key eglot-mode-map (kbd "C-c e h") 'eglot-help-at-point)
    (add-to-list 'eglot-server-programs
                 `(csharp-mode . ("C:/Home/omnisharp_64/OmniSharp.exe" "-lsp")))))

系统:Windows 10,Mac
emacs 28.0.50/ 27.0.91

显然不是,我最新的电脑也卡的

楼主加油,关注中,等有空了在spacemacs中试试。

我用Nox 在 mspyls和haskell 以及ccls感觉都很好啊,没觉得卡。我只测试过Windows和mac

打开go文件 M-x nox 返回

[nox]Server reports (type=2): You are neither in a module nor in you GOPATH. If you are using modules, please open your editor at the directory containing the go.mod.

我在用module,用lsp-mode的时候没问题或者会让import project,使用nox的时候如何让它识别go项目呢。

spacemacs 中如何安装配置?

1 个赞

spacemacs中不知道如何使用nox

dotspacemacs-additional-packages
'(
  (nox :location (recipe :fetcher github :repo "manateelazycat/nox"))
 )

lsp layer是不是要删除掉,python layer默认会加载cannaoda layer, 怎么处理

lsp layer 可以去掉,cannaoda layer 是啥,不需要的 package 可以放到 dotspacemacs-excluded-packages 或者像我这样在 layer 中加 not 去掉

   (c-c++ :packages (cc-mode ccls company-c-headers)
          :variables
          c-c++-default-mode-for-headers 'c++-mode
          c++-enable-organize-includes-on-save t
          ;; c-c++-backend t
          c-basic-offset 4
          c-c++-adopt-subprojects t)
   (python :packages (not yapfify live-py-mode)
           :variables
           python-backend 'anaconda
           python-sort-imports-on-save t
           python-test-runner '(pytest nose)
           python-formatter 'black
           python-format-on-save nil
           blacken-fast-unsafe t
           python-fill-column 88)
1 个赞

Hi, 我已经不用nox 而继续用lsp了。 在spacemacs 中,你想使用nox的话,你只需要把你想用lsp作为backend的语言那些layer中,backend 去掉lsp支持 改为默认的; 可以但不需要删除lsp (不删除的好处是,你可以随时关闭nox,随时用lsp)。如果python 你不想用默认的anaconda,你可以在进入python文件后,关闭anacoanda,有个具体的mode close,比较直接。 即使anaconda和nox一起开,应该问题也不大。

我不用nox的原因是,lsp现在速度已经比较快(没有觉得和nox有明显区别),在spacemacs 里面用起来也比较方便了。在识别根目录上,nox好像略有问题。

之前识别出现问题之后就没有补全了,现在不知道因为什么,会报错但是会出补全

其实就是最后一行配置管用,omni csharp的路径是固定的吗?

omni csharp需要自己编译或者下载预编译的。路径可以自定义的,要固定也是可以的。Omnisharp-emacs这个包是自动将预编译的版本下载到.emacs.d的一个子目录下。
~/.emacs.d/.cache/omnisharp/server/v1.34.5/OmniSharp.exe
我只试过mac和Windows。

我加了对 OmniSharp 的支持 Add support for OmniSharp. · manateelazycat/nox@6490924 · GitHub

下面这个变量的值你可以修改成你的路径

(defvar nox-omni-sharp-path "~/.emacs.d/.cache/omnisharp/server/v1.34.5/OmniSharp.exe")

设置好路径后,直接在 csharp-mode 中启用 Nox 应该就可以了。

我没有Windows,所以这个补丁是忙写的。

我加了对 OmniSharp 的支持 https://github.com/manateelazycat/nox/commit/649092413064493f7d262a596c8e334c0fd6b52c

下面这个变量的值你可以修改成你的路径

(defvar nox-omni-sharp-path "~/.emacs.d/.cache/omnisharp/server/v1.34.5/OmniSharp.exe")

设置好路径后,直接在 csharp-mode 中启用 Nox 应该就可以了。

我没有Windows,所以这个补丁是盲写的。

:+1:多谢猫哥,我晚上回家测试一下。 @manateelazycat 刚刚抽空尝试了一下,提示以下错误,不知道应该是哪方面原因?

Error in post-command-hook ((closure ((--cl-maybe-connect-- closure #1 nil (progn (remove-hook 'post-command-hook --cl-maybe-connect-- nil) (let ((G1 buffer)) (if (buffer-live-p G1) (save-current-buffer (set-buffer G1) (if nox--managed-mode nil (apply #'nox--connect (nox--guess-contact)))))))) (buffer . #<buffer testNox.cs>) nox--managed-mode t) nil (progn (remove-hook 'post-command-hook --cl-maybe-connect-- nil) (let ((G1 buffer)) (if (buffer-live-p G1) (save-current-buffer (set-buffer G1) (if nox--managed-mode nil (apply #'nox--connect (nox--guess-contact))))))))): (cl-no-applicable-method make-instance nox-omni-sharp-path :name "NOX (Csharp/csharp-mode)" :events-buffer-scrollback-size 2000000 :notification-dispatcher (closure ((fn . nox-handle-notification) (initargs :process (closure ((contact "-lsp") (autostart-inferior-process) (readable-name . "NOX (Csharp/csharp-mode)") (nickname . "Csharp") (contact "-lsp") (class . nox-omni-sharp-path) (project transient . "d:/Code/Csharp/") (managed-major-mode . csharp-mode) nox--managed-mode t) nil (let ((default-directory default-directory)) (make-process :name readable-name :command contact :connection-type 'pipe :coding 'utf-8-emacs-unix :noquery t :stderr (get-buffer-create (format "*%s stderr*" readable-name)))))) (contact "-lsp") (autostart-inferior-process) (readable-name . "NOX (Csharp/csharp-mode)") (nickname . "Csharp") (contact "-lsp") (class . nox-omni-sharp-path) (project transient . "d:/Code/Csharp/") (managed-major-mode . csharp-mode) nox--managed-mode t) (server method params) (apply fn server method (append params nil))) :request-dispatcher (closure ((fn . nox-handle-request) (initargs :process (closure ((contact "-lsp") (autostart-inferior-process) (readable-name . "NOX (Csharp/csharp-mode)") (nickname . "Csharp") (contact "-lsp") (class . nox-omni-sharp-path) (project transient . "d:/Code/Csharp/") (managed-major-mode . csharp-mode) nox--managed-mode t) nil (let ((default-directory default-directory)) (make-process :name readable-name :command contact :connection-type 'pipe :coding 'utf-8-emacs-unix :noquery t :stderr (get-buffer-create (format "*%s stderr*" readable-name)))))) (contact "-lsp") (autostart-inferior-process) (readable-name . "NOX (Csharp/csharp-mode)") (nickname . "Csharp") (contact "-lsp") (class . nox-omni-sharp-path) (project transient . "d:/Code/Csharp/") (managed-major-mode . csharp-mode) nox--managed-mode t) (server method params) (apply fn server method (append params nil))) :on-shutdown nox--on-shutdown :process (closure ((contact "-lsp") (autostart-inferior-process) (readable-name . "NOX (Csharp/csharp-mode)") (nickname . "Csharp") (contact "-lsp") (class . nox-omni-sharp-path) (project transient . "d:/Code/Csharp/") (managed-major-mode . csharp-mode) nox--managed-mode t) nil (let ((default-directory default-directory)) (make-process :name readable-name :command contact :connection-type 'pipe :coding 'utf-8-emacs-unix :noquery t :stderr (get-buffer-create (format "*%s stderr*" readable-name))))))

暂时帮不了,主要是没有用Windows没法测试。