分类目录归档:emacs

emacs 基本操作

http://blog.chinaunix.net/u3/103763/showart_2316875.html
emacs 基本操作:
关于打开关闭:
`C-x C-f 文件名’ — 打开文件
C-x k : 关闭当前buffer
C-x b : 切换到前一个编辑的buffer
C-x C-b : 列出当前所有buffer
C-x C-s : 保存当前buffer
C-x s : 保存所有未保存的buffer,会提示你是否需要保存
C-x C-w : 文件另存为
C-x C-c’ — 退出Emacs
C-x u’ — 取消上一次操作
C-x 0 是将当前缓冲区隐藏(当同时显示多个分区时)
C-x 1 是将当前缓冲区撑满(当同时显示多个分区时)
C-x 2 横向划分编辑区
C-x 3 纵向划分编辑区
C-x 4 f 用新文件分屏

Ctrl+x k 彻底关闭该缓冲区,并释放和缓冲区关联的文件

移动光标:
C-f 光标前进一个字符
C-b 光标后退一个字符
C-p 上移一行
C-n 下移一行

M-f 前进一个单词
M-b 后退一个单词

C-a 行首
C-e 行尾

M-a 句首
M-e 句尾

M-{ 上一个段落
M-} 下一个段落

C-v 屏幕上卷一个屏
M-v 屏幕下卷一个屏

C-M-v 另一个窗口下卷一个屏幕
C-M-V 另一个窗口上卷一个屏幕

M-< 文件头 M-> 文件尾

C-M-p 光标在'{‘上,向上移1个大括号
C-M-n 光标在’}’后,向下移1个大括号

C-M-e 移动到函数尾

C-L 光标所在位置会显示于屏幕/窗格的中央。
M-g-g 跳到指定行
删除命令:
C-d 删除光标上的字符
C-a C-k 删除光标所在行

M-d 删除光标后的单词
M-DEL 删除光标前的单词

C-k 从光标位置删除到行尾
C-S-Backspace 删除当前行

C-g 取消当前要执行的命令
C-x u 恢复更新
C-S-backspace 删除当前行
C-Backspace 删除单词(光标前)

自动对齐:
C-x h 全选
C-M-\ 对齐

复制,剪切:
首先,需要选择想要复制的文本。第一步,标记区域头。假定您的光标已经位于行首,这时按下 Ctrl+ 空格。Emacs 将在小缓冲区提示 Mark set。然后,按Ctrl+a 移动到行首。从标记一直到光标当前位置之间的区域已被选中用于复制或剪切。然后,可以有两种方式:Alt+w (复制) 或者 Ctrl+w (剪切)。
最后,移动到您想要这段文本结束的地方并按下 Ctrl+y。
C-c w 复制行 (向.emacs加入如下代码生效)
;; Function to copy lines
;; “C-c w” copy one line, “C-u 5 C-c w” copy 5 lines
(defun copy-lines(&optional arg)
(interactive “p”)
(save-excursion
(beginning-of-line)
(set-mark (point))
(if arg
(next-line (- arg 1)))
(end-of-line)
(kill-ring-save (mark) (point))
)
)
;; set key
(global-set-key (kbd “C-c w”) ‘copy-lines)

自动补齐:
M-/
前提:
Emacs 自带的hippie-expand
hippie-expand是 Emacs 自带的功能,
把M-/ 绑定到 hippie-expand,在.emacs文件中加入
;;绑定按键
(global-set-key [(meta ?/)] ‘hippie-expand)

hippie-expand 的补全方式。它是一个优先列表, hippie-expand 会优先使用表最前面的函数来补全。通常的设置是:

(setq hippie-expand-try-functions-list
‘(try-expand-dabbrev
try-expand-dabbrev-visible
try-expand-dabbrev-all-buffers
try-expand-dabbrev-from-kill
try-complete-file-name-partially
try-complete-file-name
try-expand-all-abbrevs
try-expand-list
try-expand-line
try-complete-lisp-symbol-partially
try-complete-lisp-symbol))
首先使用当前的buffer补全,如果找不到,就到别的可见的窗口里寻找,
如果还找不到,那么到所有打开的buffer去找,如果还……那么到kill-ring里,
到文件名,到简称列表里,到list,…… 当前使用的匹配方式会在 echo 区域
显示.
确实是非常好用,基本上我M-/就能到达我想要的了.

查找:
C-s C-w 选中, 跳下一个C-s, 跳上一个C-r

窗口切换:
C-x 0 : 关闭当前窗口
C-x 1 : 将当前窗口最大化
C-x 2 : 垂直分割窗口
C-x 3 : 水平分割窗口
M-o (redefined) : 在窗口之间切换; C-x o 是默认命令
C-x 5 1/2/3/0 : 对frame类似的操作
C-x < : 窗口内容右卷 C-x > : 窗口内容左卷(这两个命令在垂直分割窗口后比较有用)
(C-u) C-x ^ : 加高当前窗口,如果有C-u,则每次加高4行
(C-u) C-x } : 加宽当前窗口
(C-u) C-x { : 压窄当前窗口
ESC C-v : 在其它窗口进行卷屏操作

重复次数:
C-u + 次数 + 命令
举例来说, C-u 8 C-f 向前移动 8 个字符。

在emacs中运行shell命令:
M-! cmd:打开一个名为“*Shell Command Output*“的窗口,并把该命令的执行结果显示在其中。按下”C-x 1“组合键可以关闭这个窗口。由于Shell命令的输出是在一个编辑缓冲区里,因此我们可以对它进行编辑、保存等操作。

M-| cmd:运行Shell命令,并使用编辑窗口中选定的区域作为该Shell命令的输入,然后可以选择是否用该Shell命令的输出来替换编辑窗口中选中的区域。
C-u M-! cmd RET:执行一条Shell命令,并将其输出放到编辑区中光标所在的位置处,而不将其输出到”Shell Command Output“窗口。

M-x shell:运行一个子Shell,该子Shell对应于emacs中的一个名为”*Shell*”的缓冲区,此后,我们就可以交互式的运行Shell命令了。

M-x term:运行一个子Shell,该子Shell对应于emacs中的一个名为“*Terminal*”的缓冲区。使用该命令获得的子Shell是一个完整的Shell的模拟,与我们直接在Shell中操作没有什么差别。

M-x eshell:运行emacs shell。该Shell为emacs自己实现的一个shell,而前面运行的shell都为系统中的shell程序(例如:/bin/csh等)。我们可以通过设置变量shell-file-name来设置emacs所使用的默认shell。

emacs 备忘录
http://blog.chinaunix.net/u2/76248/showart_1332462.html

在.emacs中内容:

;;;========================================================================
;;配置emacs基本环境,包括颜色,时间,日历等。需要安装emacs-goodies-el插件

(require ‘color-theme)
(require ‘cc-mode)
;;(color-theme-initialize)
;;(color-theme-tty-dark)
(color-theme-comidia);;设置颜色方案
;;(color-theme-dark-laptop)
;;(set-default-font “10×20”);;设置字体

;;显示行号
(setq column-number-mode t)
(setq line-number-mode t)

;;强制设置yes or no 为y or n
(fset ‘yes-or-no-p ‘y-or-n-p)

;;设置打开文件的缺省路径
(setq default-directory “~/work/ph1_it3_msppt/src”)

;;自动保存模式
(setq auto-save-mode nil)

;;允许emacs和外部其他程序的粘贴
(setq x-select-enable-clipboard t)

;;使用鼠标中键可以粘贴
(setq mouse-yank-at-point t)

;;关闭启动画面
(setq inhibit-startup-message t)

;;===============================================
;;;; CC-mode配置 http://cc-mode.sourceforge.net/

(c-set-offset ‘inline-open 0)
(c-set-offset ‘friend ‘-)
(c-set-offset ‘substatement-open 0)

;;;;根据后缀判断所用的mode
;;;;注意:我在这里把.h关联到了c++-mode
(setq auto-mode-alist
(append ‘((“\\.h$” . c++-mode)) auto-mode-alist))

;;;;我的C/C++语言编辑策略

(defun my-c-mode-common-hook()
(setq tab-width 4 indent-tabs-mode nil)
;;; hungry-delete and auto-newline
(c-toggle-auto-hungry-state 1)
;;按键定义
(define-key c-mode-base-map [(control \`)] ‘hs-toggle-hiding)
(define-key c-mode-base-map [(return)] ‘newline-and-indent)
(define-key c-mode-base-map [(f8)] ‘ff-get-other-file)
(define-key c-mode-base-map [(meta \`)] ‘c-indent-command)
(define-key c-mode-base-map [(tab)] ‘my-indent-or-complete)
(define-key c-mode-base-map [(f7)] ‘compile)
(setq compile-command “make -C /home/ben/work/ph1_it3_msppt/build/”)

;; (define-key c-mode-base-map [(tab)] ‘hippie-expand)
(define-key c-mode-base-map [(meta ?/)] ‘semantic-ia-complete-symbol-menu)
;;预处理设置
(setq c-macro-shrink-window-flag t)
(setq c-macro-preprocessor “cpp”)
(setq c-macro-cppflags ” “)
(setq c-macro-prompt-flag t)
(setq hs-minor-mode t)
(setq abbrev-mode t)
(setq tab-width 4 indent-tabs-mode nil)
)
(add-hook ‘c-mode-common-hook ‘my-c-mode-common-hook)

;;;;我的C++语言编辑策略
(defun my-c++-mode-hook()
(setq tab-width 4 indent-tabs-mode nil)
(c-set-style “stroustrup”)
;; (define-key c++-mode-map [f3] ‘replace-regexp)
)

(add-hook ‘c++-mode-hook ‘my-c++-mode-hook)

;;;;C/C++语言启动时自动加载semantic对/usr/include的索引数据库
(setq semanticdb-search-system-databases t)
(add-hook ‘c-mode-common-hook
(lambda ()
(setq semanticdb-project-system-databases
(list (semanticdb-create-database
semanticdb-new-database-class
“/usr/include”)))))

;;自动补齐策略
(defun my-indent-or-complete ()
(interactive)
(if (looking-at “\\>”)
(hippie-expand nil)
(indent-for-tab-command))
)

(global-set-key [(control tab)] ‘my-indent-or-complete)

;;hippie的自动补齐策略,优先调用了senator的分析结果:

(autoload ‘senator-try-expand-semantic “senator”)

(setq hippie-expand-try-functions-list
‘(
senator-try-expand-semantic
try-expand-dabbrev
try-expand-dabbrev-visible
try-expand-dabbrev-all-buffers
try-expand-dabbrev-from-kill
try-expand-list
try-expand-list-all-buffers
try-expand-line
try-expand-line-all-buffers
try-complete-file-name-partially
try-complete-file-name
try-expand-whole-kill
)
)
;;=============自动补齐==========================

(require ‘ecb);;加载ecb
;;ecb中使用鼠标,只要用鼠标中间的滚轮点击就可以打开相应的文件夹或者文档

(global-set-key [(f12)] ‘ecb-activate) ;;定义F12键为激活ecb
(global-set-key [(C-f12)] ‘ecb-deactivate) ;;定义Ctrl+F12为停止ecb
(global-set-key [(f11)] ‘gdb) ;;定义F11为启动gdb
(global-set-key [(C-f11)] ‘gdb-many-windows);;定义Ctrl+F11为激活多窗口
(global-set-key [(C-f10)] ‘ecb-show-ecb-windows);; 显示ecb windows
(global-set-key [(f10)] ‘ecb-hide-ecb-windows);;隐藏ecb windows

(setq auto-mode-alist
(append
‘((“CMakeLists\\.txt\\'” . cmake-mode))
‘((“\\.cmake\\'” . cmake-mode))
auto-mode-alist))

(autoload ‘cmake-mode “/usr/share/emacs/site-lisp/emacs-goodies-el/cmake-mode.el” t)

;;;日历设置========================================================

;;显示时间
(display-time-mode 1)
(setq display-time-24hr-format t)
(setq display-time-day-and-data t)

;; 让emacs能计算日出日落的时间,在 calendar 上用 S 即可看到
(setq calendar-latitude +39.54)
(setq calendar-longitude +116.28)
(setq calendar-location-name “北京”)

;; 设置阴历显示,在 calendar 上用 pC 显示阴历
(setq chinese-calendar-celestial-stem
[“甲” “乙” “丙” “丁” “戊” “己” “庚” “辛” “壬” “癸”])
(setq chinese-calendar-terrestrial-branch
[“子” “丑” “寅” “卯” “辰” “巳” “戊” “未” “申” “酉” “戌” “亥”])

;; 设置 calendar 的显示
(setq calendar-remove-frame-by-deleting t)
(setq calendar-week-start-day 1) ; 设置星期一为每周的第一天
(setq mark-diary-entries-in-calendar t) ; 标记calendar上有diary的日期
(setq mark-holidays-in-calendar nil) ; 为了突出有diary的日期,calendar上不标记节日
(setq view-calendar-holidays-initially nil) ; 打开calendar的时候不显示一堆节日

;; 去掉不关心的节日,设定自己在意的节日,在 calendar 上用 h 显示节日
(setq christian-holidays nil)
(setq hebrew-holidays nil)
(setq islamic-holidays nil)
(setq solar-holidays nil)
(setq general-holidays ‘((holiday-fixed 1 1 “元旦”)
(holiday-fixed 2 14 “情人节”)
(holiday-fixed 3 14 “白色情人节”)
(holiday-fixed 4 1 “愚人节”)
(holiday-fixed 5 1 “劳动节”)
(holiday-float 5 0 2 “母亲节”)
(holiday-fixed 6 1 “儿童节”)
(holiday-float 6 0 3 “父亲节”)
(holiday-fixed 7 1 “建党节”)
(holiday-fixed 8 1 “建军节”)
(holiday-fixed 9 10 “教师节”)
(holiday-fixed 10 1 “国庆节”)
(holiday-fixed 12 25 “圣诞节”)))
;;Calendar模式支持各种方式来更改当前日期
;;(这里的“前”是指还没有到来的那一天,“后”是指已经过去的日子)
;; q 退出calendar模式
;; C-f 让当前日期向前一天
;; C-b 让当前日期向后一天
;; C-n 让当前日期向前一周
;; C-p 让当前日期向后一周
;; M-} 让当前日期向前一个月
;; M-{ 让当前日期向后一个月
;; C-x ] 让当前日期向前一年
;; C-x [ 让当前日期向后一年
;; C-a 移动到当前周的第一天
;; C-e 移动到当前周的最后一天
;; M-a 移动到当前月的第一天
;; M-e 多动到当前月的最后一天
;; M-< 移动到当前年的第一天 ;; M-> 移动到当前年的最后一天

;;Calendar模式支持移动多种移动到特珠日期的方式
;; g d 移动到一个特别的日期
;; o 使某个特殊的月分作为中间的月分
;; . 移动到当天的日期
;; p d 显示某一天在一年中的位置,也显示本年度还有多少天。
;; C-c C-l 刷新Calendar窗口

;; Calendar支持生成LATEX代码。
;; t m 按月生成日历
;; t M 按月生成一个美化的日历
;; t d 按当天日期生成一个当天日历
;; t w 1 在一页上生成这个周的日历
;; t w 2 在两页上生成这个周的日历
;; t w 3 生成一个ISO-SYTLE风格的当前周日历
;; t w 4 生成一个从周一开始的当前周日历
;; t y 生成当前年的日历

;;EMACS Calendar支持配置节日:
;; h 显示当前的节日
;; x 定义当天为某个节日
;; u 取消当天已被定义的节日
;; e 显示所有这前后共三个月的节日。
;; M-x holiday 在另外的窗口的显示这前后三个月的节日。

;; 另外,还有一些特殊的,有意思的命令:
;; S 显示当天的日出日落时间(是大写的S)
;; p C 显示农历可以使用
;; g C 使用农历移动日期可以使用

;;———–日历设置结束—————-

;;w3m set
(require ‘w3m-load)
(setq w3m-use-favicon nil)
(setq w3m-command-arguments ‘(“-cookie” “-F”))
(setq w3m-use-cookies t)
(setq w3m-home-page “http://forum.ubuntu.org.cn”)

常用命令:

文件操作

C-x C-f 打开文件,出现提示时输入/username@host:filepath可编辑FTP文件
C-x C-v 打开一个文件,取代当前缓冲区
C-x C-s 保存文件
C-x C-w 存为新文件

C-x C-b 打开缓冲区列表
C-x i 插入文件
C-x C-q 切换为只读或者读写模式
C-x C-c 退出Emacs

编辑操作

C-f 前进一个字符
C-b 后退一个字符
M-f 前进一个字
M-b 后退一个字
C-a 移到行首
C-e 移到行尾
M-a 移到句首
M-e 移到句尾
C-p 后退一行
C-n 前进一行
M-x goto-line 跳到指定行
C-v 向下翻页
M-v 向上翻页
M-< 缓冲区头部 M-> 缓冲区尾部

C-d 删除一个字符
M-d 删除一个字
C-k 删除一行
M-k 删除一句
C-w 删除标记区域

M-w 复制标记区域

C-_ or C-x u 撤消操作

C-space 标记set mark,可以选作矩形区域的开始。

窗口操作
C-x 0 关闭本窗口
C-x 1 只留下一个窗口
C-x o 切换到别的窗口
C-x 2 垂直均分窗口
C-x 3 水平均分窗口
C-x s 保存所有窗口的缓冲
C-x b 选择当前窗口的缓冲区
C-x ^ 纵向扩大窗口
C-x } 横向扩大窗口

执行SHELL命令
M-x shell 打开SHELL
M-! 执行SHELL命令 (shell-command)
C-x C-right(left)下一个buffer

程序编译

M-x compile 执行编译操作
M-x gdb GDB排错
M-x dbx DBX排错
M-x xdb XDB排错
M-x sdb SDB排错

搜索模式

C-s key 向前搜索
C-s 查找下一个
ENTER 停止搜索
C-r key 反向搜索
C-s C-w 以光标所在位置的字为关键字搜索
C-s C-s 重复上次搜索
C-r C-r 重复上次反向搜索
C-s ENTER C-w 进入单词搜索模式
C-r ENTER C-w 进入反向单词搜索模式
M-x replace-string ENTER search-string ENTER 替换
M-% search-string ENTER replace-string ENTER 交互替换
C-r 在进入查找/替换模式后,该命令进入迭代编辑模式
C-M-x 退出迭代编辑模式,返回到查找/替换模式
C-M-s 向前正则搜索
C-M-r 向后正则搜索
C-M-% 正则交互替换

SHELL模式

C-c C-c 相当于Bash下的C-c
C-c C-z 相当于Bash下的C-z
C-c C-d 相当于Bash下的C-d
M-p 执行前一条命令
C-n 执行下一条命令
C-c C-o 删除最后一条命令产生的输出
C-c C-r 屏幕滚动到最后一条命令输出的开头
C-c C-e 屏幕滚动到最后一套命令输出的结尾
C-c C-p 查看前一条命令的输出
C-c C-n 查看后一条命令的输出

打印资料

M-x print-buffer 先使用pr,然后使用lpr
M-x lpr-buffer 直接使用lpr
M-x print-region
M-x lpr-region

收发邮件

M-x mail 发送邮件, C-c C-s 发送,C-c C-c 发送并退出
M-x rmail 接受邮件
请问在emacs中如何设置字体和背景的颜色? A:设置背景颜色 M-x set-background-color
可以写到 .emacs里打开emacs就设置:
(set-face-background ‘default “azure”) ; azure或者别的颜色
如果只想在window模式下设置背景,终端下不需要,就加上判断:
(if window-system
(set-face-background ‘default “azure”))