Emacs 使用习惯的最佳实践?

我个人之前一直使用 Vim,习惯了 命令行 + Vim + 各种其他小工具(比如 grep, find, ag, sed)等。

然后在一个 Project 下工作时,我会打开一个 Vim 窗口。 如果需要同时在两个 Project 下工作时,我就打开一个新的命令行,再打开另外一个 Vim 窗口。

但是最近在使用 Emacs 时,我遇到了个问题。 由于 Emacs 启动速度稍微有点慢,每次打开一个文件都启动一次比较费时间。所以我先使用 Emacs --daemon 开了一个 Server,然后要用的时候 emacsclient filename,但是我遇到了这样一个麻烦。 当我在某个命令行窗口中使用 emacsclient 编辑一个文件 A,然后想在另外一个命令行窗口中使用 emacsclient 编辑另外一个文件 B,它不会新建一个 emacs 窗口,而是将文件B放到之前那个文件A的窗口中去打开。

所以问题总的来说是这样的:

  1. 在只启动一个 Server 的前提下,我能不能打开多个 emacsclient ?
  2. 如果不启动 daemon 进程,能不能也快速的启动 Emacs?
  3. 我是应该在 Emacs 开 shell,还是应该在 shell 中开 Emacs ?

有木有这方面的最佳实践?

emacsclient-t-c 会新建一个 TTY 或 GUI 窗口,emacsclient --help 中有说明。

1 个赞

1,一个daemon支持理论无数个client 2,优化配置可以在一秒左右启动emacs,把配置文件放入内存可以再加速好多倍 3,我一般分开使用emacs和shell。:sweat_smile: 所以我也想问第三个问题

你需要 tmux

不久前的公司内部分享会,我做了两期终端生存的主题,把自己工作区分配简单总结了一下。工具多了,切换就成了问题:

  • i. 工作区之间切换
  • ii. 任务/应用之间切换
  • iii. 应用窗口(OSX 有多窗口概念)之间切换
  • iv. 应用内部多窗口/屏/panel 之间切换

我的基本原则是"二分法":

  • 双显(两个工作区) 避免写作和预览重叠干扰:

    • 屏幕1:效果预览、文档查看
    • 屏幕2:代码编写、调试跟踪
  • 多任务/应用(切换 Cmd + TAB

  • 应用窗口(切换 Cmd + `) 每个应用尽量只开两个窗口,按一次就能到,避免迷失在循环切换中

  • 终端(使用最频繁的应用)

    • 窗口1运行 Emacs
    • 窗口2运行 Tmux Tmux 自身又有窗口概念。开多个窗口,对应多个工作目录。每个窗口,又可以分成多个 Panel,一边监视服务状态,一遍执行命令

有点“函数式”的意思:sweat_smile::

(monitors
 ((laptop ((web-browser ((window1 (tab1 tab2 ...tabN))
                         (window2 ...)))
           (device-simulator)
           ...other-apps))
  (extand ((terminal
            ((window1 Emacs)
             (window2 (Tmux
                       ((tmux-window1 (panel1 panel2 ...panelN))
                        (tmux-window2 ...)
                        ...tmux-windowN)))))
           ...other-apps))))
2 个赞

tmux 确实是神器。 不过在 Mac 下,我感觉 iterm2 比 tmux 还是更方便一点,我只有在 ssh 的时候用 tmux.

感觉 tmux 没有 tab(虽然有 window 的概念),我觉得 tab 可以很好地把各个任务(工作)区分开来。比如一个 tab 写代码,一个 tab 开着那些一直在跑的任务,相当于一个 tab 就是一个工作区。所以我有时也会在一个 tab 内开一个 tmux,tmux 下再开 window,这样子可以把各个工作区完全隔离开来。

不过这好像跑题了…

我的最佳实践是打开的文件从来不关,主要靠切换buffer和projectile-find-file,进行文件之间的跳转。你说的小工具,emacs都有集成. 写代码的时候基本不碰命令行。

我赞成二楼的解决方案

另外,可以看看别人是怎么用Emacs的

可以用多个 session,而且因为所有的 tmux session 都在一个进程里,所以切换起来特别方便(相对 screen)。

写得比较精简,可否整理成博文,给咱学习学习?