美文网首页
emacs 使用multi-term

emacs 使用multi-term

作者: 齐格Insight | 来源:发表于2015-06-30 23:03 被阅读1320次

emacs里的multi-term相当于mac下的iterm,是emacs下非常好用的terminal。

载入multi-term.el文件

emacs使用multi-term作为terminal,首先要将multi-term.el文件放到你emacs的load-path里。

配置

;; ------------------------------------------------------------
;; set multi-term
;; ------------------------------------------------------------
(require 'multi-term)
(setq multi-term-program "/bin/zsh")
;; Use Emacs terminfo, not system terminfo, mac系统出现了4m
(setq system-uses-terminfo nil)

下面是几点需要注意的点:

  1. 我用的是zsh,如果你使用的是bash, 将"/bin/zsh"换成你的"/bin/bash"
  2. 如果你使用的是mac系统,发现multi-term每行出出了4m,在shell里运行下:
tic -o ~/.terminfo /Applications/Emacs.app/Contents/Resources/etc/e/eterm-color.ti
  1. zsh在mac下可能会出现中文显示为????的情况,这时候创建一个文件:~/.zshenv,其内容如下:
export LANG='en_US.UTF-8'
export LC_ALL="en_US.UTF-8"

快捷键

打开multi-term的命令是multi-term,你可能发现在multi-term模式下会出现与自己的快捷键冲突的地方。如果想保留自己在其他mode下的快捷键,将快捷键添加到 term-bind-key-alist这个列表中,例如我想把"C-j"保留我其他mode一样,如下:

(add-to-list 'term-bind-key-alist '("C-j"))

解决几个烦人的问题

1. 我开始设置的是zsh,我发现,当我用$cd$命令改变工作目录的时候,emacs里的default-directory这个变量没有改变,使得C-x C-f调用打开文件时目录不是当前工作目录?
解决方法将下列代码放到zsh的配置文件 $~.zshrc$里,使得emacs能跟踪路径的改变,参考1参考2

if [ -n "$INSIDE_EMACS" ]; then
    chpwd() { print -P "\033AnSiTc %d" }
    print -P "\033AnSiTu %n"
    print -P "\033AnSiTc %d"
fi

2. 我希望当光标没处于最后一行时,"C-a"的作用是将光标移动到行首,当光标处于最后一行时,我希望"C-a"的作用是将光标移动到这行命令的开始处。解决方法:将下列 ab/move-beginning-of-line 绑定到快捷键"C-a"即可。

;; 当处于最后一行时 "C-a" 将光标移动到 terminal开始处而不是这个行的头
(defun ab/is-at-end-line () 
   "判断是否在最后一行"
   (equal (line-number-at-pos) (count-lines (point-min)  (point-max))))
(defun ab/is-term-mode () 
   "判断是否为 term 模式"
    (string= major-mode "term-mode"))
(defun ab/move-beginning-of-line () 
   "move begin" 
   (interactive) 
   (if (not (ab/is-term-mode)) 
              (beginning-of-line)
         (if (not (ab/is-at-end-line)) 
                    (beginning-of-line) 
                (term-send-raw))))

3. 有个烦人的问题,你发现使用了"C-b" (backword-char 函数),你想在命令的中间插入新的字符,每次都插入到了这行的最后。解决方法:将下列ab/backword-char函数绑定到"C-b"

;; 只后当是term-mode并且是最后一行时才采用 (term-send-left)
(defun ab/backword-char () 
   "Custom " 
    (interactive) 
    (if (not (ab/is-term-mode)) 
               (backward-char) 
          (progn (if (not (ab/is-at-end-line))
                          (backward-char)
                        (progn (term-send-left)
                                   (message "term-send-left"))))))

4.修改快捷键的map,如果你发你定义自己的快捷键与该major-mode的冲突,可以直接修改它的key-map

(define-key term-raw-map (kbd "M-n") 'ace-jump-mode)

更多见,我的multi-term配置
最近我自己对multi-term做了一些改进,见项目:
https://github.com/aborn/multi-term-plus

相关文章

  • emacs 使用multi-term

    emacs里的multi-term相当于mac下的iterm,是emacs下非常好用的terminal。 载入mu...

  • Ubuntu 16.04 Emacs 安装及使用

    emacs安装 emacs使用 参考链接 Ubuntu 16.04 安装 Emacs[https://www.ji...

  • Emacs Application Framework

    Emacs Application Framework 的折腾之路 用了Emacs将近13年了, Emacs的使用...

  • Emacs资料汇总

    Emacs 官方手册 Emacs Lisp 15 分钟入门 从零开始——Emacs 安装配置使用教程 2015 E...

  • 使用emacs

    0x03 emacs在mac下竟然不能用meta键? 既然用mac写代码,基本上都用iterm2了吧。iterm2...

  • emacs 使用

    date: 2018-10-19最近把报告给写完了,暂时是不想再碰了,突然想起了emscs,这次就学下,网站是em...

  • 关于Linux操作系统下C语言编程注意事项

    1工具的使用 1、学会使用vim/emacs,vim/emacs是linux下最常用的源码编辑具,不光要学会用它们...

  • 关于扩展Emacs插件能力的思考

    平时使用过很多Emacs插件,看过很多插件的源码,也自己写过一些小函数和插件,来提高自己日常使用Emacs的效率。...

  • Emacs Lisp 学习(2)

    昨天, 学习了 Emacs Lisp 的一些基本的概念, 今天学习如何定义函数, 如何使用函数. 在 Emacs ...

  • Spacemacs使用中的FAQ

    最近在lubuntu下使用emacs,但是对与emacs本身不熟悉,所以选择了比较容易上手的spacemacs。下...

网友评论

      本文标题:emacs 使用multi-term

      本文链接:https://www.haomeiwen.com/subject/zvaeqttx.html