emacs写js的时候不会提示dom相关的操作方法.

这个是单独写在 user-config 的么, 我尝试了一下也没有效果, 好像是我少了 dom 的那部分文件似的, 因为别的提示都是正常的

我实在是不懂 spacemacs 应该写在哪里,没有效果和初始化代码没有执行是不同的,不应该在一个不确定的基础上去解决问题,那几行代码你都可以手动执行。

可以正常执行, 但是就是没效果。。 郁闷了, 晚上回去看看Mac上, 不过我的项目里确实没有 .tern-port 文件, 即使这样 emacs 里面的 tern-mode 还是正常的

没有 .tern-port 就是 tern 服务没有启动,这个是 emacs 之外的。前面也已经说了,无非就是要让 tern 服务跟 emacs 的 tern-mode 对接起来:

  1. 安装 tern
  2. 启动 tern 2.1 通过配置 Emacs 让它自动运行 2.2 或者,在 ternminal 手动运行

如果配置没效果,一定是当中某个环节出错了。

当前目录下没有 .tern-project 文件

刚想起来, 忽略了个东西, 手动设置 tern-use-port 的时候, 第一个参数填 port, 第二个 server 填什么。。 我填的 localhost

手动去项目里启动才有

可以不填,默认是 127.0.0.1

手动启动 tern 之后有 .tern-port 文件了。 而且 emacs 里面的 tern-know-port.tern-port 的一样, 但是还是没作用。。 真是醉了。。

就是一个小小的配置,为什么会讨论这么久。把下边代码保存到 /path/to/test-tern.el 然后按照 Usage 跑起来:

;;; Usage:
;;;
;;;     mkdir /path/to/testdir/
;;;     cd /path/to/testdir/
;;;     /path/to/emacs -nw -Q -l /path/to/test-tern.el
;;;
(toggle-debug-on-error)
(setq package-user-dir (format "%s/elpa--test-tern/%s" user-emacs-directory emacs-version))
(setq package-archives
      '(("gnu" . "http://mirrors.tuna.tsinghua.edu.cn/elpa/gnu/")
        ("melpa" . "http://mirrors.tuna.tsinghua.edu.cn/elpa/melpa/"))) ;; For China mainland
      ;; '(("gnu" . "http://elpa.emacs-china.org/gnu/")
      ;;   ("melpa" . "https://melpa.org/packages/")))

(package-initialize)

(defmacro try-install (pkg)
  `(unless (package-installed-p ,pkg)
     (package-refresh-contents)
     (package-install ,pkg)))

(try-install 'tern)
(try-install 'company)
(try-install 'company-tern)

;; ------------------------------------------------------------------

(add-hook 'after-init-hook
          '(lambda ()
             (let ((value (find-file-noselect "test.js" nil nil nil)))
               (if (listp value)
                   (mapcar 'switch-to-buffer (nreverse value))
                 (switch-to-buffer value)))
             (company-mode 1)
             (tern-mode 1)
             (insert "// Press `M-x company-tern` to complete\n")
             (insert "document.get")
             ))

(run-hooks 'after-init-hook)
;;; test-tern.el ends here

跟之前一样, company-tern 的工作是正常的, 只是没有 dom 相关的提示, 不知道是为什么

@zilongshanren 子龙碰到过这种情况么, company 工作正常但是没有 dom 操作相关的提示, 比如 getElementById, querySelector

版本问题?我这边是:

$ npm view tern
{ name: 'tern',
  description: 'A JavaScript code analyzer for deep, cross-editor language support',
  'dist-tags': { latest: '0.21.0' },
  ...

一个版本。。。。。

$ npm view tern
 
{ name: 'tern',
  description: 'A JavaScript code analyzer for deep, cross-editor language support',
  'dist-tags': { latest: '0.21.0' },

都说了没有 .tern-project 文件

添加.tern-project

1 个赞

好像真是这个问题,因为我有个 ~/.tern-config:

{
  "libs": [
    "browser",
    "jquery"
  ],
  "plugins": {
    "node": {}
  }
}

所以即使 ~/testdir/ 目录下没有任何配置,它也会起作用

还真是。。。 我在home目录创建了个 .tern-project 然后把你这段复制进去重启 emacs 就都好了. 话说你这个文件是弄什么生成的, 我的咋没自动生成呢~ @xiyang @twlz0ne thank you very much!

时间长了我也不记得有这个 ~/.tern-config 的存在了。我的配置文件里倒是写了一个 tern/create-project-file 函数,用来配置 eslint 等等针对当前项目的的选项。

厉害! it works.

这个问题还是挺坑的, 困扰了我很久。。