欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

emacs学习笔记

程序员文章站 2024-03-18 13:09:28
...
emacs24
http://kanpe777.github.io/blog/2014/01/12/yum-install-emacs24-on-centos-6-dot-5/
安装

$ cd /etc/yum.repos.d
$ wget http://pj.freefaculty.org/EL/pjku.repo
$ rpm --import http://pj.freefaculty.org/EL/PaulJohnson-BinaryPackageSigningKey
$ yum install emacs
$ emacs -version

m-x list-packages
[url]http://ergoemacs.org/emacs/emacs_package_system.html[/url]


Install Packages

This list is shown in package-menu-mode. In this mode, here's the most useful keys:

【Enter ↵】 Describe the package under cursor. (describe-package)
【i】 mark for installation. (package-menu-mark-install)
【u】 unmark. (package-menu-mark-unmark)
【d】 mark for deletion (removal of a installed package). (package-menu-mark-delete)
【x】 for “execute” (start install/uninstall of marked items). (package-menu-execute)
【r】 refresh the list from server. (package-menu-refresh)


基本

m-x global-linum-mode
行号
m-x linux-mode

m-f m-b

跳到行号
m-g g n
c-u n 重复n次命令


C-h t 调出Emacs Tutorial。
C-h r 调出Emacs Manual。
C-h k (command) ,调出对应command的帮助,比如C-h k C-n 就是查看C-n的帮助。


插入空行,C-o 。删除空行C-x C-o


eclipse:

eclipse:
某些编译错误比如 Unused static function

window----Preferences----C/C++-------Code Analysis

expected ‘)’ before ‘*’ token

编译也编译不对,干嘛要编译
使用
import----C/C++ Executeable
找到编译好的nginx或者redis-server文件就好了
但是编译的时候一定要

make CFLAGS="-g -O0"


----------------
lisp的helloworld,记得加(interactive) 否则报commandp错误
(global-set-key (kbd "C-z t") 'say-hello)
(defun say-hello()(interactive)(print "haoning shuaige "))

常用命令
[img]http://dl2.iteye.com/upload/attachment/0093/5566/e73ca7d8-ff77-30fe-8ed4-69cccda81e0b.jpg[/img]
默认加载el的路径/usr/share/emacs/site-lisp
emacs git
http://www.cnblogs.com/hol*/archive/2012/04/26/2470923.html
重新加载配置文件
M-x load-file
~/.emacs
emacs当前行高亮
(global-hl-line-mode 1)

搜索:
http://front.sjtu.edu.cn/~gwxie/search.html

C-s
自动补全
当你输入了ema,如果发现已经搜索到了定位emacs了,你可以用C-w来不全emacs
重回光标
如果搜索成功了 C-g 如果搜索没有成功 C-g C-g
重新搜索前一次关键字
C-s C-s
选择搜索过的关键字
C-s M-p (M-n) 无论查找还是替换情况下,M-n和M-p都可以用来翻阅查找历史记录


etags
http://linux.chinaunix.net/techdoc/desktop/2008/09/13/1031663.shtml

1).安装etags,一般来讲,这是emacs的内建程式;
2).在当前目录建立tag table:M-! etags *.[ch];
3).使用:
A.M-. :跳至相应的函数定义处;
B.M-* :返回刚才的函数名处;
C.C-u M-. :如果emacs找错了,找下一个;
D.M-Tab :自动补齐函数名;
4).在当前目录将.h和.cpp文件提取出来做成tags文件:
find . -name "*.[chCH]" -print | etags -

find -name "*.cpp" -exec etags -a {} ;
5).将创建好的tag表通知emacs:
M-x visit-tags-table
6).让emacs自动读取tag文件内容:
在~/.emacs文件中类似如下内容:
(setq tags-file-name "~/project/src/TAGS")


[color=red]得到更旧的“剪切”的方法是先输入 C-y,您将看到最近的块。然后,输入 M-y,一步步遍历剪切环。每一步替换前面的粘贴[/color]

在Emacs中画思维导图
http://hi.baidu.com/jiqing0925/item/7f8255cf58625826a0b50a82
http://users.skynet.be/ppareit/projects/graphviz-dot-mode/graphviz-dot-mode.html

1. graphviz-dot-mode.el 的文件,把它放入你的 elisp 路径中。在 .emacs 中加入: (load-file "/path/to/graphviz-dot-mode.el")
2. 学习一点 dot 语法,编辑描述你图形的 dot 文件。
3. 编辑完后, C-c c 编译生成图片, C-c p 可以预览图片
[img]http://dl2.iteye.com/upload/attachment/0093/5552/8fc2c9e5-182d-39f5-b9f1-a7e136f3e3ea.png[/img]



M-x global-set-key RET 交互式的绑定你的键。
C-x Esc Esc 调出上一条“复杂命令”。

http://docs.huihoo.com/homepage/shredderyin/wiki/KeyBinding.html

常用命令http://linux.chinaunix.net/techdoc/system/2007/10/03/969174.shtml
emacs cscope:
C-c s a设定代码根目录,cscope.files必须放在这个设定目录下,否则cscope找不到
RET=Select, SPC=Show, o=SelectOneWin, n=ShowNext, p=ShowPrev, q=Quit, h=Help
http://blog.csdn.net/intrepyd/article/details/4202312

find . -name "*.h" -o -name "*.c" -o -name "*.cc" -o -name "*.cpp" -o -name "*.hpp" > cscope.files

cscope -bkq -i cscope.files
5 在代码中穿梭
查找函数或者变量 c-c s s
查找函数或变量的定义 c-c s g
查找函数在哪里被调用了,c-c s c
查找该函数调用了哪些函数 c-c s C

查找到的函数上次出现的位置 c-c s p
查找到的函数下次出现的位置 c-c s n

yum install cscope
whereis cscope
# whereis cscope
cscope: /usr/bin/cscope /usr/share/cscope /usr/share/man/man1/cscope.1.gz
# cd /usr/share/cscope
# ls
xcscope.el
~/.emacs 配置

add-to-list 'load-path' "/data/haoning/mygit/mynginxmodule/edit/emacs-plugins/cscope-plugin")
(require 'xcscope)
;只在打开c/c++文件的时候才加载xcscope,可以加入
(add-hook 'c-mode-common-hook '(lambda() (require 'xcscope)))
(define-key global-map [(control f3)] 'cscope-set-initial-directory)
(define-key global-map [(control f4)] 'cscope-unset-initial-directory)
(define-key global-map [(control f5)] 'cscope-find-this-symbol)
(define-key global-map [(control f6)] 'cscope-find-global-definition)
(define-key global-map [(control f7)] 'cscope-find-global-definition-no-prompting)
(define-key global-map [(control f8)] 'cscope-pop-mark)
(define-key global-map [(control f9)] 'cscope-next-symbol)
(define-key global-map [(control f10)] 'cscope-next-file)
(define-key global-map [(control f11)] 'cscope-prev-symbol)
(define-key global-map [(control f12)] 'cscope-prev-file)
(define-key global-map [(meta f9)] 'cscope-display-buffer)
(define-key global-map [(meta f10)] 'cscope-display-buffer-toggle)
(setq cscope-do-not-update-database t)

whereis cscope-indexer
vim /usr/bin/cscope-indexer
改cscope-indexer脚本,将
cscope -b -i $LIST_FILE -f $DATABASE_FILE
替换为
cscope -q -b -i $LIST_FILE -f $DATABASE_FILE

附:默认的按键绑定


;; * Keybindings:
;;
;; All keybindings use the "C-c s" prefix, but are usable only while
;; editing a source file, or in the cscope results buffer:
;;
;; C-c s s Find symbol.
;; C-c s d Find global definition.
;; C-c s g Find global definition (alternate binding).
;; C-c s G Find global definition without prompting.
;; C-c s c Find functions calling a function.
;; C-c s C Find called functions (list functions called
;; from a function).
;; C-c s t Find text string.
;; C-c s e Find egrep pattern.
;; C-c s f Find a file.
;; C-c s i Find files #including a file.
;;
;; These pertain to navigation through the search results:
;;
;; C-c s b Display *cscope* buffer.
;; C-c s B Auto display *cscope* buffer toggle.
;; C-c s n Next symbol.
;; C-c s N Next file.
;; C-c s p Previous symbol.
;; C-c s P Previous file.
;; C-c s u Pop mark.
;;
;; These pertain to setting and unsetting the variable,
;; `cscope-initial-directory', (location searched for the cscope database
;; directory):
;;
;; C-c s a Set initial directory.
;; C-c s A Unset initial directory.
;;
;; These pertain to cscope database maintenance:
;;
;; C-c s L Create list of files to index.
;; C-c s I Create list and index.
;; C-c s E Edit list of files to index.
;; C-c s W Locate this buffer's cscope directory
;; ("W" --> "where").
;; C-c s S Locate this buffer's cscope directory.
;; (alternate binding: "S" --> "show").
;; C-c s T Locate this buffer's cscope directory.
;; (alternate binding: "T" --> "tell").
;; C-c s D Dired this buffer's directory.



w3m 文本浏览器
yum install emacs-w3m
M-x w3m

windows的 配置文件在
http://lianghz.blog.51cto.com/4577280/1124989
C:\Users\Administrator\AppData\Roaming

emacs微博 http://emacser.com/weibo.htm

http://www.ibm.com/developerworks/cn/linux/l-cn-emacs-shell/index.html?ca=drs-4
emacs窗口

自动补全
http://emacser.com/emacs-gccsense.htm

配置auto-complete
下载:http://cx4a.org/software/auto-complete/
配置.emacs,我的auto-complete在/mydoc/lib/emacs-plugins/下
?View Code LISP
; auto complete(add-to-list 'load-path "/mydoc/lib/emacs-plugins/auto-complete")
(require 'auto-complete-config)
(add-to-list 'ac-dictionary-directories "/mydoc/lib/emacs-plugins/auto-complete/ac-dict")
(ac-config-default)

gcc-code-assist就是在gcc代码基础上改的,主要用来从代码中提取补全信息
下载:http://cx4a.org/software/gccsense/#Downloads
yum install mpfr-devel gmp-devel
./configure --program-suffix=-code-assist --enable-languages=c,c++ --disable-bootstrap --disable-multilib
make
make install
$ gcc-code-assist --version
$ g++-code-assist --version

安装配置gccsense
gccsense这个包包含一些辅助函数,以及编辑器的插件

1. 解压缩之后,执行:

?View Code BASH
$ cd gccsense-*
$ sudo cp bin/* /usr/local/bin/

2. 执行一下命令,确保安装成功:

?View Code BASH
$ gccrec --version
$ autopch --version

3. emacs的插件文件为etc/gccsense.el,放到插件目录然后,在.emacs里面加入

?View Code LISP
(require 'gccsense)
即可。
由于我的gccsense.el放到了。/mydoc/lib/emacs-plugins/c下,并且把auto-complete的补全命令绑定到了M+/上,所以这部分配置如下:
?View Code LISP
(add-to-list 'load-path "/mydoc/lib/emacs-plugins/c")
(require 'gccsense)
(global-set-key "\257" (quote ac-complete-gccsense))

ok,搞定。
可能遇到ruby和sqlite的依赖
gem i sqlite3-ruby
yum install ruby
yum install rubygems
yum install sqlite3
yum install sqlite3-devel
gem install sqlite3
yum install ruby-devel


---------------------------------------------

设置CentOS 解除自动待机休眠

2011-10-31 12:33:12| 分类: Linux | 标签:linux |举报|字号 订阅
配置 xorg.conf,且不能出错,否则系统可能会起不来,所以配置时要格外小心。

vi /etc/X11/xorg.conf

添加以下内容

Section "ServerFlags"
Option "BlankTime" "0"
Option "StandbyTime" "0"
Option "SuspendTime" "0"
Option "OffTime" "0"
EndSection

Section "Monitor"
Option "DPMS" "false"
EndSection

重启Linux系统即可!



emacs 安装auto-complete 视频
http://www.youtube.com/watch?v=rGVVnDxwJYE

M-x eshell
M-x load-file
Load file: /data/haoning/mygit/mynginxmodule/edit/emacs-plugins/auto-complete/etc/install.el
vim ~/.emacs

(add-to-list 'load-path "~/.emacs.d/")
(require 'auto-complete-config)
(add-to-list 'ac-dictionary-directories "~/.emacs.d//ac-dict")
(ac-config-default)



auto-complete
补全键到M+/,这样,遇到要补全的地方,按下M+/就出现了补全菜单,旁边是提示。
M+p M+n
http://emacser.com/emacs-gccsense.htm
下载
http://cx4a.org/software/auto-complete/


http://blog.sina.com.cn/s/blog_4d90eb6f01000bmy.html
emacs etags

目录树
http://lifegoo.pluskid.org/wiki/EmacsAsFileManger.html

C-x dired


位移

Transposing Text
Ctrl-t (transpose-chars)
游标前後两个字元(character)互调。
ESC-t(transpose-words)
游标前後两个字(word)互调。但两个中间的标点符号 (punctuation)
则不会移动。例如, transposing,text 则互换成 text,transposing 而不是
text transposing,。
Ctrl-x Ctrl-t(transpose-lines)
前後两列互换。将游标所在的列与其上一列互换。
下面得配合[email protected]使用
ESC-l
将一个字的字元改成小写的字元。键入指令 ESC-l 会将游标所在 处之後的
所有字元换成小写的字元,其范围只限於游标所在处的 那一个字。
ESC-u
将一个字的字元改成大写的字元。键入指令 ESC-l 会将游标所在 处之後的
所有字元换成大写的字元,其范围只限於游标所在处的 那一个字。
ESC-c
将游标所在处的字元换成大写的字元(capital),所以如果要使 一个字以
大写为开始可以使用此指令。


文字的勘误△

ESC-x ispell-change-dictionary
ispell 使用了两种不同的字典,一种是由 ispell 所提供的标准字典(standard
dictionary)。另一种是使用者自已 建构的私有字典(private dictionary)


书签,register,[color=red]可以瞬间切换多个文件用[/color]
http://blog.csdn.net/pfanaya/article/details/7068710

Ctrl-x r SPC r 将游标的位置储存於 register r 内
Ctrl-x r j r 跳到r

Ctrl-x r r r 将所设定好的线性文件放入 register r 中
Ctrl-x r i r 将存放於 r 中的资料取出使用
--------书签-----
Ctrl-x r m bookmark 设置这个位置为书签 bookmark
Ctrl-x r b 跳到某个书签
bookmarks-bmenu-list 功能可以列出一个由已设置的所有书签组成的菜单。通过键入 C-x r l 运行该功能
键入 M-x bookmark-delete


搜索

在启动了 nonincremental search之後,在 ``Search:'' 或
``Search backward:''之後键入 ``Ctrl-w'',则表示要执行字的搜寻
Ctrl-r RET string RET
Ctrl-s RET string RET

Ctrl-r RET Ctrl-w words RET
Ctrl-s RET Ctrl-w words RET
---------------------------------------------------
Regexp 的 incremental search
ESC-Ctrl-s(isearch-forward-regexp)
使用Regexp 的搜寻方法: 先按下 ``ESC'' 之後再将其放掉,随後再按下 ``Ctrls'',
echo area 处就会出现 Regexp I-search: 这时就可以输入 Regexp 的表示字串
了。 当然还有若干事与 Regexp 的搜寻有关,讨论如下:
若要继续以 Regexp 的方法搜寻,只需继续键入 ``Ctrl-s'' 就可找到下一笔
相关的资料。
Regexp 的搜寻,也有其独立的 search-ring。 这也意谓著可以再使用
Regexp 的 search ring 。 其使用法与前所讨论的方法一样,就是以 `` ESCp''
与 `` ESC-n'' 来再使用Regexp 的 search-ring。
ESC-Ctrl-r(isearch-backward-regexp)
往回(左)的 Regexp 搜寻,若想继续的往回找寻想要的字串, 只需键入 ``
Ctrl-r'' 即可。当然,也可以 `` ESC-p'' 与 `` ESC-n'' 来再使用其 search-ring。
nonincremental search
以下是以 Regexp 来执行 nonincremental search的方法。
ESC-x re-search-forward
ESC-x re-search-backward

替换


键绑定 操作(命令)
C-s isearch-forward
C-r isearch-backward
<find> search-forward
Esc C-s isearch-forward-regexp
Esc C-r isearch-backward-regexp
n/a replace-string
M-% query-replace

ESC-x replace-string

ESC-x replace-Regexp RET Regexp RETnewstring RET 正则替换

ESC-x query-replace RET string RET newstring RET
Query Replace顾名思义就是在取代时会徵询取代的意见, 使用者可根据需要来取决是
否要进行取代。


http://www.cnblogs.com/coderzh/archive/2009/12/26/commonemacs.html
M-x shell 打开SHELL
  M-! 执行SHELL命令 (shell-command)

1.ESC-!(shell-command)
2.ESC-x shell-command-on-region
3.Ctrl-u ESC-! 与 Ctrl-u ESC- 在 ESC 前加上 Ctrl-u ,可以将 shell 指令执行的结
果,输出到 游标所在的位置
4. ESC-x shell 是唤起 shell mode的指令。

目录操作 看附件中的文档

C-x dired

打开远程文档

C-x C-f
Find file: /[email protected]:~/daxiong.sh


在emacs中使用 gdb ,有eclipse的赶脚了
http://www.cnblogs.com/qlwy/archive/2012/06/04/2535297.html
[img]http://dl2.iteye.com/upload/attachment/0092/6773/1aff933d-b098-3f4a-8dcc-8cf96bb1a663.jpg[/img]

M-x compile
支持C-backspace 修改minibuffer
改成gcc -g -o test test.c
直接M-x gdb
显示gdb –annotate=3 test回车就进入了调试模式
M-x gdb-many-windows 切换单窗格/多窗格模式
M-x gdb-restore-windows 恢复窗格布局


EMACS 提供了四种 debugger,分别为 gdb、dbx、xdb 与 sdb,使用者可根据需来选择合
适的 debugger。此处,只将使用 debugger 的指令列举如下:
ESC-x gdb RET file RET
ESC-x dbx RET file RET
ESC-x xdb RET file RET
ESC-x sdb RET file RET



emacs中文帮助
[color=red]M-x help-with-tutorial-spec-language[/color]

用 ‘C-h t’ 就可以看到了 (按 Control 和 h,同時放開,然後按 t)。
如果不行的話,試試 ‘F1 t’。
如果也不行的話,試試 ‘M-x help-with-tutorial’ (按 Escape,放開,按 x,放開,然後輸入 help-with-tutorial,最後按 Enter)。
哦,這不是因為 Emacs 不可靠--而是我們不知道你現在是在什麼系統上使用 Emacs,是 X , Windows ,是在主控台 (console) 模式,或是模擬終端機 (termial) 模式,我們也不知道你的模擬終端機設定,是不是透過 ssh 來連線……等等。你所使用的環境會影響 C-h 或 F1 的作用的。
如果你想看非英語的使用手冊,請用 M-x help-with-tutorial-spec-language。( 現在可用的有:bg, cn, cs, de, es, fr, it, ja, ko, nl, pl, ro, ru, sk, sl, sv, th, zh)


`Ctrl-h c'' 与 ``Ctrl-h k'' 的功能相似, 二者都是在寻求与 Hotkey
有关的讯息。二者唯一的差别,就在於对指令的解释详细与否而已


emacs显示中文
http://xumingming.sinaapp.com/819/emacs-cn-solution/

(set-language-environment 'utf-8)
(set-keyboard-coding-system 'utf-8)
(set-clipboard-coding-system 'euc-cn)
(set-terminal-coding-system 'utf-8)
(set-buffer-file-coding-system 'euc-cn)
(set-selection-coding-system 'euc-cn)
(modify-coding-system-alist 'process "*" 'utf-8)
(setq default-process-coding-system
'(euc-cn . euc-cn))
(setq-default pathname-coding-system 'utf-8)

ibm的教程,很好
http://www.ibm.com/developerworks/cn/education/linux/l-emacs/section4.html
http://www.ibm.com/developerworks/cn/education/aix/au-emacs3/section2.html


值得注意的一些常用点
undo就是redo
http://hi.baidu.com/skyyjl/item/9043d9b5a2c54c77254b09ab
C-x u
C-x _
C-/
之后随便操作啥,比如C-f 再进行undo就是redo

重复操作:

这里的
C-u = M

插入几个空行:键入 M-4,然后按 Enter 键。
缩进八个空格:输入 M-8,然后按空格键。
使用 M-3 - 插入三个破折号。
使用 C-x z 重复执行一次。
您还可以反复地执行一个命令——通过再次键入 z,以便再次重复执行一次该命令;不断地键入 z 就可以反复地执行该命令。
可以删除一万行 M-10000 C-k


C-x i 插入file
[color=red][email protected](C-space) mark[/color]
交换光标和标记:键入 C-x C-x

缓冲区
C-x C-s save-buffer 将当前的缓冲区保存到磁盘。
C-x s save-some-buffers 要求将所有未保存的缓冲区保存到磁盘。
C-x C-c save-buffers-kill-emacs 要求将所有未保存的缓冲区保存到磁盘,并退出 Emacs。
C-x C-z suspend-emacs 挂起 Emacs 并使之成为一个后台进程。
[color=red]
C-x C-b list-buffers 列出所有缓冲区。
C-x b 切换缓冲区
C-x o 窗口切换 ★
C-x ->(<-):按下C-x后(放开)再按向右(左)方向键可以定位到下(上)一个buffer中。
[/color]
M-x goto-line 跳到指定行
[color=red]行号:
M +x linum-mode[/color]
C-x k kill-buffer 杀死一个缓冲区(缺省情况下为当前的缓冲区)。
[color=blue]C-x C-q vc-toggle-read-only 切换当前缓冲区的可读状态(如果适用还可以执行版本控制)。[/color]
C-x i insert-file 在插入点插入某个文件的内容。

剪切矩形
将光标移动到以 What the hammer 开始的节的开头,并键入 C-space 以设置标记。
移动光标,使其恰好位于单词 terrors 之前,以指定一个包含四行的矩形区块(顺便提一下,该区块中每行包括三个单词)。
剪切您选择的矩形区块:键入 C-x r k。
删除
C-x r d
清除 空格字符替换整个区域
C-x r c
粘贴
C-x r y
打开,插入空格
C-x r o



M-< 到开头
M-> 到最后

键绑定 操作(命令)
C-g (Esc Esc Esc)	keyboard-quit 用来退出已启动的命令
C-Backspace backward-delete-char
Delete (C-d) delete-char
C-x u (C-_) advertised-undo
M-d kill-word
M-Delete backward-kill-word
M-k kill-sentence
C-x Delete backward-kill-sentence
C-k kill-line
C-y yank 等同于粘贴
M-y 遍历剪切环,必须跟 C-y
C-u, C-u N universal-argument,在命令前加上次数前缀

http://www.cnblogs.com/robertzml/archive/2009/09/23/1571942.html

用 Meta 键,可以利用 EMACS completion 的功能。因为 completion 可以让使用者键入最    
少的字,就可使系统唤起所欲执行的命令
TAB 尽可能将其余的字串填满
SPACE 将 puncutation 字元之前的字填满,填充的字不会超过一个字以上
? 将所有可能的 completions 选择都列出来




用 C-u C-v 将本行带到屏幕的最上方。
输入 C-h m,看看 Text 模式与 Fundamental 模式有哪些不同。
输入 C-x 1 关掉文档窗格。

auto-fill-mode 排版 (出自M-x help-with-tutorial-spec-language 690行)


>> 现在输入 M-x auto fill mode<Return>。然后随便敲点什么,直到你看到它
分成两行。你必须敲一些空格,因为 Auto Fill 只在空白处进行断行。
【输入空格对英文来说是必须的,而对中文则不必。】

行边界通常被设定为 70 个字符【这里指英文字符】,你可以用 C-x f 命令配合
数字参数来重新设定它。

>> 输入 C-x f 并传递参数 20: C-u 2 0 C-x f。
然后输入一些文字,观察 Emacs 的自动折行动作
最后再用 C-x f 将边界设回 70。

如果你在段落的中间做了一些修改,那么自动折行模式不会替你把整个段落重新
折行,你需要用 M-q 手动折行。注意,光标必须位于你需要折行的那一段里。

>> 移动光标到前一段中,然后输入 M-q。

搜索(出自M-x help-with-tutorial-spec-language 729行)

看仔细了么?在一次渐进式搜索中,Emacs 会尝试跳到搜索目标出现的位置。要
跳到下一个命中位置,就再按一次 C-s。如果找不到目标,Emacs 会发出“哔”
的一声,告诉你搜索失败。在整个过程中,都可以用 C-g 来终止搜索。【你会发
现 C-g 会让光标回到搜索开始的位置,而 <Return> 则让光标留在搜索结果上,
这是很有用的功能。】

相关标签: emacs