emacs使用multi-term作为terminal

emacs 使用multi-term

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

3. 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"))))))

更多见我的multi-term配置

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-13 02:23:02

emacs使用multi-term作为terminal的相关文章

emacs使用本地emacs server模式打开远程文件

使用emacs的用户都知道,一般要打开远程机器上的文件要使用TrampMode模式,调用方式例如以下: C-x C-f /remotehost:filename RET (or /method:[email protected]:filename) 但,这样打开有点麻烦,你必要输入username和机器ip等 emacs提供了一种client/server的模式,当我们在本地打开一个emacs,能够将它作为server执行 然后,在本地机器的其它都方要用emacs的时候,如在terminal中要

WebSocket最简易理解,term.js插件的使用

介绍WebSocket WebSocket我想大家并不陌生,无论你的的工作中是否用到了它,都或多或少听说过,它是h5中新增的,在某些方面可以很好的替代我们一直沿用的ajax技术,甚至更加的出色.但是它究竟和http有什么区别呢.举个最简单的例子吧,我现在需要根据用户不同的输入来获取后端不同的数据,http请求的方式就是每次用户输入我就发送一个http请求.然而websocket的解决是一次连接成功后,每次用户输入都会发送给后台,但是这个发送的数据却是一直处在已经连接的状态,并不是每次想http每

Vim-编辑器之神

几点声明: 作者只是一位小小的 \(OIer\) ,并不会什么过于神仙的东西,我这篇文章只是帮助人入门的而已. 若有人在 OI-Wiki上见过了原文章,原作者是我 \(......\) ,真不是抄 \(......\) 历史与争端 Vim 的前身是 vi,一个简洁但是略有不足的编辑器,但是从 vi 开始,编辑器的模式区分和唯快不破的思想就已经体现的很到位了.Vim 即是 vi improved,是在 vi 原本所有的方式上进行的进一步提升,但是并不会改变 vi 的其他本质,只是增加了更多适应如今

使用Karabiner为Mac内置键盘、HHKB进行映射

使用Karabiner为Mac内置键盘.HHKB进行映射 Table of Contents 1. 引言 2. 什么是Karabiner和配置方法的基本说明 3. 内置键盘设置 4. HHKB设置 5. 通用设置 6. 待完善内容 1 引言 自从使用了Mac后,经过一系列折腾: 买了个HHKB Pro 2 TypeS,感觉手感确实不错,比内置键盘好多了,就是稍微有些硬. 编辑软件从Vim转为了Emacs 使用iTerm2作为常用Terminal 一些常用软件等等 现在使用Mac办公已经毫无压力.

苹果Instruments/Shark性能调试工具概述

在Mac OS X上你可以使用Gprof这样的UNIX工具用于测试程序性能.当然,Apple也有自己的Profiling Tools,用得比较多的是Shark.10.5里还引入了一个基于DTrace的叫Instruments的程序. Instruments 自Xcode 3.0开始,苹果提供了一种非比寻常的方法来调试应用程序,这就是Instruments.就像它的名字一样(Instruments意为乐器),Instruments提供了一种像苹果的音乐创作软件GarageBand一样的带有时间线的

在ASP.NET开发中一些单词的标准缩写

有些词可能共用一些缩写.带星号的缩写或词来源于PeopleSoft标准. The following standard word abbreviations should be used in naming records, fields, and SQRs: Word(s) Abbreviation Description AbbreviateAbbreviation ABRV   Academic ACAD   AcceptAcceptanceAccepted ACPT   Access A

Lucene的分析资料【转】

Lucene 源码剖析 1 目录 2 Lucene是什么 2.1.1 强大特性 2.1.2 API组成- 2.1.3 Hello World! 2.1.4 Lucene roadmap 3 索引文件结构 3.1 索引数据术语和约定 - 3.1.1 术语定义 3.1.2 倒排索引(inverted indexing) 3.1.3 Fields的种类 3.1.4 片断(segments) 3.1.5 文档编号(document numbers) 3.1.6 索引结构概述 3.1.7 索引文件中定义的

Query DSL for elasticsearch Query

Query DSL Query DSL (资料来自: http://www.elasticsearch.cn/guide/reference/query-dsl/) http://elasticsearch.qiniudn.com/ --简介-- elasticsearch 提供基于JSON的完整的Query DSL查询表达式(DSL即领域专用语言). 一般来说, 普通的查询如 term 或者 prefix. 另外还有混合查询如 bool 等. 另外查询表达式(Queries)还能够关联特定的过

BSA NShell系列-nexec命令

# nexec ## 1 说明:nexec是远程命令接口引擎 nexec [-?] [-t term] [-o] [-i] [-l] [-nohup hostname "cmd &"] -e | hostname cmd [args] 如果你不想看下面的臭又长,可以直接看下面示例: ## 2 nexec常用示例 1 在指定主机执行命令 cloudexpress# nexec 10.200.108.92 net user  2 在当前路径所在的主机执行命令执行命令 cloudex

words2

餐具:coffee pot 咖啡壶coffee cup 咖啡杯paper towel 纸巾napkin 餐巾table cloth 桌布tea -pot 茶壶tea set 茶具tea tray 茶盘caddy 茶罐dish 碟plate 盘saucer 小碟子rice bowl 饭碗chopsticks 筷子soup spoon 汤匙knife 餐刀cup 杯子glass 玻璃杯mug 马克杯picnic lunch 便当fruit plate 水果盘toothpick 牙签中餐:bear's