我个人之前一直使用 Vim,习惯了 命令行 + Vim + 各种其他小工具(比如 grep, find, ag, sed)等。
然后在一个 Project 下工作时,我会打开一个 Vim 窗口。
如果需要同时在两个 Project 下工作时,我就打开一个新的命令行,再打开另外一个 Vim 窗口。
但是最近在使用 Emacs 时,我遇到了个问题。
由于 Emacs 启动速度稍微有点慢,每次打开一个文件都启动一次比较费时间。所以我先使用 Emacs --daemon
开了一个 Server,然后要用的时候 emacsclient filename
,但是我遇到了这样一个麻烦。
当我在某个命令行窗口中使用 emacsclient 编辑一个文件 A,然后想在另外一个命令行窗口中使用 emacsclient 编辑另外一个文件 B,它不会新建一个 emacs 窗口,而是将文件B放到之前那个文件A的窗口中去打开。
所以问题总的来说是这样的:
- 在只启动一个 Server 的前提下,我能不能打开多个 emacsclient ?
- 如果不启动 daemon 进程,能不能也快速的启动 Emacs?
- 我是应该在 Emacs 开 shell,还是应该在 shell 中开 Emacs ?
有木有这方面的最佳实践?
emacsclient
的 -t
或 -c
会新建一个 TTY 或 GUI 窗口,emacsclient --help
中有说明。
1 个赞
1,一个daemon支持理论无数个client
2,优化配置可以在一秒左右启动emacs,把配置文件放入内存可以再加速好多倍
3,我一般分开使用emacs和shell。 所以我也想问第三个问题
你需要 tmux !
不久前的公司内部分享会,我做了两期终端生存的主题,把自己工作区分配简单总结了一下。工具多了,切换就成了问题:
- i. 工作区之间切换
- ii. 任务/应用之间切换
- iii. 应用窗口(OSX 有多窗口概念)之间切换
- iv. 应用内部多窗口/屏/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都有集成. 写代码的时候基本不碰命令行。
可以用多个 session,而且因为所有的 tmux session 都在一个进程里,所以切换起来特别方便(相对 screen)。