Emacs,在 React 尖括号中向前和向后

Emacs, forward & backward in React angle brackets

假设你有

<Foo>
  <Bar>
    hello
  </Bar>
</Foo>

当我在 <Foo> 附近时,我想去 </Foo>,反之亦然。

简单的要求,但我很难实现。

forward-sexp(不确定它来自哪里)转发正常,但向后不能很好地与 backward-sexp

一起使用

C-c C-f(绑定到 sgml-skip-tag-forward)和 C-c C-b(绑定到 sgml-skip-tag-backward)似乎在 mhtml-mode 中工作正常。当您编辑 React.js 代码时,您可能处于 js3-mode 中,因此您可以切换到 mhtml-mode(这可能是不可取的)或将上面的命令绑定到 js3-mode 键盘映射:

(define-key js3-mode-map (kbd "C-c C-c C-f") 'sgml-skip-tag-forward)
(define-key js3-mode-map (kbd "C-c C-c C-b") 'sgml-skip-tag-backward)

因为 C-c C-cjs3-mode-map 中的前缀。

编辑:OP 表示他使用的是 rjsx-mode,而不是 js3-mode,这需要对上述内容进行小的改动。主要区别在于需要修改 rjsx-mode-map 而不是 js3-mode-map。另一个区别是 rjsx-mode-map 没有将 C-c C-c 定义为前缀键,因此必须将键绑定更改为其他内容,或者我们也将 C-C C-c 设为此映射中的前缀键- 这是完成后者的一种方法:

(let ((foo (make-sparse-keymap)))
  (define-key rjsx-mode-map (kbd "C-c C-c") foo))

(define-key rjsx-mode-map (kbd "C-c C-c C-f") 'sgml-skip-tag-forward)
(define-key rjsx-mode-map (kbd "C-c C-c C-b") 'sgml-skip-tag-backward)

如果您想将其永久更改,请创建一个执行这三件事的函数并将其添加到您的初始化文件中的 rjsx-mode-hook