有什么方法可以在创建文件后,打开文件前,插入点内容

react项目里用了js后缀,结果每次新文件打开都识别成 js2-mode

看了看是根据有没有import React 这行来决定是不是rsjx-mode 的

现在每次都得手动调

有没有什么方法可以打开前,就加入import 这行呢?


可能没说明白,再详细说一下

操作步骤:

  • 想要一个react文件abc.js ,创建 => 打开 => 被识别是 js2-mode, :x:错误

  • 想要一个js文件,bcd.js, 创建 => 打开 => 被识别是 js2-mode :white_check_mark:正确

因为rjsx-mode 是根据 文件第一行 import React 来匹配的

所以,看起来关键就是,创建文件后,打开前,能插入一段代码就好了,还不能每次都插入,需要要能选择


试试use-package的magic handler?

https://www.emacswiki.org/emacs/AutoInsertMode

这个?

这个不就是识别mode吗? 现在问题是,要识别的内容还不存在,所以识别的不是想要的

设置auto-mode-alist不可以吗?

如果用了auto insert,那打开其它其它项目或者其它人写的文件都会自动插入内容了,不是很好吧

这个是 based on file extension or the major mode ,现在问题就是 从extension 识别到的major mode,不是想要的major mode

不是很理解你的需求,如果要在创建文件时自动插入内容,auto insert mode是可以的

我又编辑了一下,

auto insert mode 也是根据mode来的,而mode本身有歧义的地方,有时候对,有时候不对,所以不灵

操作步骤: 新建一个文件, abc.js ,打开后,被识别是 js2-mode 但是,实际上,想要一个react文件,应该是 rjsx-mode, 而rjsx-mode 是根据 文件第一行 import React 来匹配的(空文件,没有这一行,所以识别是js2-mode)

可以写个函数专门创建特殊的js文件,创建完后调用(insert “import …”)即可。

这样就有了第一行,可以自动进入rjsx-mode了。

起来应该行,我去查查insert,还不太会写elisp

insert是当前buffer啊,还是要打开,有什么方法是后台insert的吗?

(defun create-react-js-file ()
  (interactive)
  (let ((file-path (read-file-name "Create react js file:")))
	(when file-path
	  (find-file file-path)
	  (insert "import React"))))

(global-set-key (kbd "<f3>") #'create-react-js-file)

获取新文件路径 => 打开文件 => 添加文件头 => 绑定快捷键

这样应该可以用了。

好吧是我理解错了 :joy: :joy: :joy: :joy:

另一种方法是根据路径来匹配mode,可以参考下这个 https://www.emacswiki.org/emacs/AutoModeAlist

不行,应该是打开就判断了,

不过我改了一下,可以用了

直接把最后那个insert 改成 设mode

对,自己写的函数,就用不着再让插件去自动判断了

应该有规则能 自动 区分这两种 Mode,比如默认用 js2-mode,只有在特殊条件下(比如特定项目目录或者包含特定文件名)使用 rsjx-mode。没有的话自己定一个。

每次都需要手动选择的话,照样很烦人吧,跟 M-x rsjx-mode 差不多烦人吧?

话说现在Emacs自带的js-mode就很好用了啊,自带jsx-mode

js文件里面如果有import React就会自动转换成jsx-mode

还是差一些的,一口气敲完 vs 敲-等待-再敲,感受还是不一样的

有些不解,楼主是怎么创建文件的,我用默认的c-x c-f创建文件时文件直接就打开了,这是一步操作,是怎么分开两步的,实际我基本不用c-x c-f,用的是counsel-find-file,这个创建文件成功后文件就直接打开了,也没有“ 创建文件后,打开文件前”这个情况,emacs里我还没遇到过,还是说楼主是在其它地方创建的文件,然后在emacs里面打开?

用 treemacs, 创建了不会打开