请教一下:能专门打开一个Emacs只能读不能写吗

之前用Vim时候,我习惯一个屏幕只读打开Vim,另一个屏幕正常打开Vim。这样只读的屏幕我即使不小心修改也没事。不知道我能不能打开两个Emacs GUI也走这种流程?或者你们一般都是怎么码代码的?

M-x read-only-mode

这个是Buffer local的吧,有没有全局的?

好比

$ view    # Read only forever for all buffers
$ vim   # Edit

view-mode

我自己写了个类 vim 模式的小扩展

Emacs 自带了一个 view-mode, M-x view-mode, 可以直接在 dired 模式下按 v 也可以。

此外,可以像上面说的那样用 M-x read-only-mode, 或者按快捷键 C-x C-q

可是我试了一下view-mode对于新打开的Buffer并不生效啊,我也暂时不用dired,直接counsel-projectile。你的扩展是怎么work的请教一下?

不知你是怎么打开新的文件的,如果是用find-file,可以设一个hook:

(defun read-only-hook ()
  (read-only-mode 1))

(add-hook 'find-file-hook 'read-only-hook)

可以像上面那样绑定 find-file-hook,或者

(add-hook 'projectile-find-file-hook 'view-mode)

这样就只在使用 projectile 去打开文件的时候自动启动 view-mode 了。

对了,新版 projectile 不需要另外安装 counsel-projectile 了

PS:看你的描述你应该会 vim, 如果你有安装 evil 的话,也可以绑定 evil-mode 或者 Emacs 自带的 viper-mode

PPS: viper-mode 一旦启动好像就在所有 buffer 下有效了,都不知道咋关:joy:

用 Emacs 不用 dired 简直可笑,我的 projectile 默认打开也是 dired

为什么? 其实我还没懂 counsel-pj 用来干嘛。。。

projectile 原本打开项目文件时默认启用自带的 ido,不是太好用。使用了 counsel-projectile 之后,可以像 counsel-find-file 那样打开文件了。

恩,绑定evil-mode这个方法挺好的。谢谢!

➊在自己的配置里写一个enable-global-read-only函数,在它里面给find-file加hook:

➋把一个command line option绑定到这个函数。参考manualstackoverflow

(add-to-list 'command-switch-alist '("--global-readonly" . read-only-hook))