Emacs中使用内置term,个人认为最好用的是vterm
。
内置term有其方便的地方,因为term buffer也是Emacs的buffer,集成性更好。
但这种集成性,也带来一些坏处。
比如: Emacs使用evil mode
,而term中使用vim
,那么你按一个ESC
,就要指定到底是发给evil
还是vim
。
外置的Emacs能够提供最好的兼容性,这是内置term所达不到的。
emacs-tmux-pane是我写的一个包,收录在melpa
中,提供了 Terminal Emacs和tmux
的集成。
使用这个包后,在tmux上使用Emacs,就可以在emacs中方便的打开和关闭新的tmux pane,然后无缝在Emacs的window和tmux的pane之间导航。
11 个赞
有人用我也开心 。
这个package写了几年了,
但是以前我没来这个论坛,
没向大家介绍过。
vterm 能不能做到在 char-mode 下把任何键都直接传给终端,在 copy-mode 再传给 Emacs?
我在用spacemacs (Hybrid-mode,normal-mode 是evil的normal mode,insert-mode 是直接利用Emacs自己的编辑模式)下的 vterm,觉得比较好区别ESC send 给谁啊,利用C-z,切换为emacs模式,跟用直接的terminal 没区别,开vim也一致; C-z 切换为evil 的normal mode,ESC就是整个Emacs 在使用
是的,可以切换。
轻度使用term的时候,我自己也是用的vterm,
像ESC
和C-c
都可以切换是否到vterm上。
重度使用时,还是不合适的:
毕竟冲突的键很多,切换也麻烦。
只限终端emacs?
是啊。tmux本身就是终端啊。在tmux上跑emacs。
hek14
11
打错了呗。。根据前面两行,应该是有一个toggle打成了open,没必要纠结这个
goumao
12
为什么配置两个同样的命令?
应该是这样:
(use-package! tmux-pane
:config
(tmux-pane-mode)
(map! :leader
(:prefix ("v" . "tmux pane")
:desc "Open vpane" :nv "o" #'tmux-pane-open-vertical
:desc "Open hpane" :nv "h" #'tmux-pane-open-horizontal
:desc "Open hpane" :nv "s" #'tmux-pane-open-horizontal
:desc "Open vpane" :nv "v" #'tmux-pane-open-vertical
:desc "Close pane" :nv "c" #'tmux-pane-close
:desc "Rerun last command" :nv "r" #'tmux-pane-rerun))
(map! :leader
(:prefix "t"
:desc "vpane" :nv "v" #'tmux-pane-toggle-vertical
:desc "hpane" :nv "h" #'tmux-pane-toggle-horizontal)))
<leader> v o
和 <leader> v v
都能打开 vertical pane.
<leader> v h
和 <leader> v s
都能打开 horizontal pane.
因为 o
和h
是vim
的习惯,v
和s
是tmux
的习惯。
请问你tmux和emacs的prefix配置的一样吗?是什么啊?
goumao
14
只是说v
和s
的使用方式。
当然前缀不一样啊,要不然在tmux里面跑emacs,可不就产生冲突了。
tmux 我是用的C-a
。
好吧,体验了一下有些问题,而且emacs里面也没必要这样切换吧,两种切换按键模式容易误操作。
好像还是解决不了emacs term里面运行远程ssh,然后在远程ssh里面跑tmux的难题。
goumao
17
好像还是解决不了emacs term里面运行远程ssh,然后在远程ssh里面跑tmux的难题。
@DR_MING 不是这么用的。这个是tmux里面跑emacs,不是emacs里面跑tmux。
- 你本地起一个tmux
- 本地tmux里面跑emacs
- 本地tmux跑ssh
- ssh里面再跑远端的tmux
完全没问题的。
macos里面和linux里面可以用不同的 prefix key
,完全不冲突。
# tmux.conf
if-shell 'test "$(uname -s)" = Darwin' 'source ~/.config/tmux/macos.conf'
if-shell 'test "$(uname -s)" = Linux' 'source ~/.config/tmux/linux.conf'
不用不知道, 用了真的是觉得 tmux
比 screen
更强大好用少不了哦…
但是Emacs的内置 tmux
的好处是什么? 为什么需要内置的? 不会降低了灵活性吗?
goumao
20
内置有内置的好处啊。
如果你以编辑为主,兼顾console
这时可以用GUI的emacs里面嵌入tmux
如果你是console为主,编辑为辅
你当然tmux里面嵌编辑器更好