Region = 最后Mark的位置到当前光标位置之间的内容
变量`mark-active`决定了Region是否是Active的
Active Region其实跟Text Selection的概念是一样的
在transient-mark-mode下,会高亮Active Region
把光标移到文本块的一段,按C-@或C-SPACE组合键设置一个文本标记;然后移动光标,文本标记和光标当前位置的文本就构成了一个文本块
默认情况下,Emacs的查找操作是不区分大小写的。但是若输入的单词里有一个以上的大写字母,Emacs就会区分大小写
书签操作所有的函数名都是以bookmark开头,或以C-x r开头
窗格操作大多以C-x 5开头
若通过ssh协议打开文件,则使用如下格式 /ssh:username@host:/filepath
输入要居中的文本,按M-s
光标放于要居中的段落中,按M-S / M-x center-paragraph
把要居中的文本块定义好,按M-x center-region
C-x r k / M-x kill-rectangle
C-x r t / M-x string-rectangle
M-x string-insert-rectangle. 它跟string-rectangle类似但是不会替换选中的矩阵内容
C-x r y / M-x yank-rectangle
C-x r o / M-x open-rectangle
C-x r c / M-x clear-rectangle
C-x r d / M-x delete-rectangle
C-x r N / rectangle-number-lines
默认为从1开始累加, 使用C-u N 则表示从N开始累加
在cua-mode下,按Ctrl-Enter可用切换进入列编辑模式
(add-to-list 'load-path "~/emacs/lisps")
(require 'pluginname)
(global-set-key (kbd "C-j" 'goto-line)
*如果对于比较复杂的快捷键, 比如Control x F3, 改怎么写呢? 按C-h k(describe-key), 然后再按下Control x F3, Emacs会出现一个”C-x “, 这个就是写到kbd宏里面的内容.
(set-background-color "black") ;; 使用黑色背景
(set-foreground-color "white") ;; 使用白色前景
(set-face-foreground 'region "red") ;; 区域前景颜色设为红色
(set-face-background 'region "blue") ;; 区域背景色设为蓝色
设置删除环的尺寸
设置Emacs对文件自动保存的频率
查找操作是否区分字母大小写
是否改变被替换字符串的大小写
窗口大小的上下限
替换用于执行命令的shell
设置句子的定义
设定文件后缀与主编辑模式的关联管理
设置默认的主编辑模式
设置C预处理器命令
它是一个由文件后缀构成的列表,Emacs在补足文件名时将不把以它们为后缀的文件名列出来
它首先查看的是变量explicit-shell-file-name;接着查看ESHELL的环境变量,最后查看SHELL的环境变量
Emacs启动一个交互shell是,它会在shell正常的启动文件之后,再额外运行一个名叫~/.emacs_shell名称 的初始化文件。其中的”shell名称”是打算在Emacs中使用的shell的名字
在查看状态,文件内容只能看,不能改,按下C-c 或 q,将返回目录的文件清单窗口,可以用s键开始一次递增查找,按=键,Emacs会告诉光标在哪一行
先把想包括在查询-替换的文件都选上,然后按下Q键(M-x dired-do-query-replace),接下来先后输入查找字符串和替换字符串。 如果在这次查询-替换操作的过程中另外开始了一次递归编辑,这次查询-替换操作就将到此为止,只能重新回到Dired编辑缓冲区里才能再次继续这个查询-替换操作
这种副模式把什么地方断行的工作交给Emacs去决定。Emacs会在句子接近行尾的时候等待你输入一个空格,然后它会把下一个单词转到下一行。
y 表示继续执行这个宏,执行完毕进入下一次循环 n 表示停止执行这个宏,但进入下一次循环 C-r 开始一次递归编辑 C-l 把光标所在的文本行放到画面中央 C-g 取消整个宏的执行
添加如下配置
(setq ido-enable-flex-matching t)
(setq ido-use-filename-at-point 'guess)
(setq ido-everywhere t)
(ido-mode 1)
输入部分名称,就会自动筛选匹配的文件/buffer.
若候选项是由多个单词用空格分隔组成的,则可用直接输入每个单词的首字母缩写,也能匹配该候选项. 例如输入`cgf`能够匹配”*Customize Group: Foobar *”
使用<-和->在待选项中切换选择.
使用向上,下键切换上次/下次的文件/buffer
直接使用C-f 和C-b 切换文件/buffer选择模式
按回车直接选择第一个匹配项
其他命令
Keybinding | Description | Available In |
C-b | 使用原switch-buffer界面 | Buffers |
C-k | kill第一个匹配的buffer/ 删除第一个匹配的file | Buffers / Files |
C-f | 使用原find-file界面 | Files |
C-d | 打开当前目录的dired mode | Dirs / Files |
C-a | 切换是否显示ignore的文件(see ido-ignore-files) | Files / Buffers |
C-c | 切换匹配时是否忽略大小写(see ido-case-fold) | Dirs / Files / Buffers |
TAB | 自动补全 | Dirs / Files / Buffers |
C-p | 严格从首部进行匹配,而不是任何部分匹配都可以. | Files |
C-s / C-r | 选择下一个/上一个匹配项 | All |
C-t | 却换是否使用Emacs正则表达式来匹配 | All |
Backspace | Deletes characters as usual or goes up one directory if it makes sense to do so. | All (but functionality varies) |
C-SPC / C-@ | Restricts the completion list to anything that matches your current input. | All |
// | 直接跳到根目录,若在windows下则为driver目录 | Files |
~/ | 直接跳到HOME目录 | Files / Dirs |
M-d | Searches for the input in all sub-directories to the directory you’re in. | Files |
C-k | Kills the currently focused buffer or deletes the file depending on the mode. | Files / Buffers |
M-m | Creates a new sub-directory to the directory you’re in | Files |
当用ido-find-file打开一个文件时,会把该文件所在目录的所有文件信息缓存起来,该缓存起来的目录被称为Work Directory. work Directory会被记录在ido-work-directory-list变量中.
当在当前目录下查找不到符合条件的文件时,在等待一段时间后,ido会自动从work directory list中搜索符合条件的文件
键绑定 | 描述 |
---|---|
M-n / M-p | 切换到下一个/上一个work directory |
M-k | 从list中删除当前work directory |
M-s | 在所有的work directory list中搜索匹配当前输入的文件名 |
设为t,则表示,若输入的字符串不能与任何匹配项相匹配,则会把输入的字符串拆分成带顺序的字符序列来看待,即任何按顺序匹配输入字符的匹配项会作匹配.
是否启用正则匹配, 若启用了该选择,则会禁止ido的自动补全功能
根据光标所在值猜测默认要打开的文件名的方法,nil表示不猜测
(setq ido-use-filename-at-point 'guess)
匹配时是否忽略大小写
若为非nil,则若输入的第一个字符为`.`,这个`.`被用来匹配那个以`.`开头的隐藏文件.
变量`ido-file-extensions-order`
;; 空格表示没有扩展名的文件,t表示所有未列出扩展名的其他文件的以默认方法排序
(setq ido-file-extensions-order '(".org" ".txt" ".py" ".emacs" ".xml" ".el" ".ini" ".cfg" ".cnf" "" t))
給ido-make-buffer-list-hook添加排序函数,例如
(add-hook 'ido-make-buffer-list-hook 'ido-summary-buffers-to-end)
Variable Name | Description |
---|---|
ido-ignore-buffers | Takes a list of buffers to ignore in C-x b |
ido-ignore-directories | Takes a list of directories to ignore in C-x d and C-x C-f |
ido-ignore-files | Takes a list of files to ignore in C-x C-f |
ido-ignore-extensions | 是否忽略变量`completion-ignored-extensions`中的文件 |
completion-ignored-extensions | Completion ignores file names ending in any string in this list.It ignores directory names if they match any string in this list which ends in a slash. |
ido-ignore-unc-host-regexps | |
ido-work-directory-list-ignore-regexps | 符合该列表的目录不放入work directory中 |
ido-auto-merge-delay-time | 当在当前目录下查找不到符合条件的文件时,在等待一段时间后,ido会自动从work directory list中搜索符合条件的文件,该等待的时间由该变量决定,单位为秒 |
ido-show-dot-for-dired | 匹配列表是否显示当前目录,若该值为非nil,则总是把`.`作为文件匹配项的第一位. |
该变量指定了最多可以缓存多少个working directory
该变量指定了每个working directory最多能够缓存多少个文件?
是否使用ido face来显示
当匹配项列表中只有唯一一个匹配项时,使用该face
类似变量`ido-use-filename-at-point`,但是把光标所在的值作为是url
当用C-x b输入一个新buffer时,默认情况下ido会提示你再按一次回车确认新建buffer.
该变量的可选值为
若为非nil,则即使是只有一个匹配项,在打开时也需要确认.
若ido-complete不能补全时,会运行该变量所表示的函数名.
提示符的最大长度,若为正整数,表示最多显示N个字符,若为浮点数,表示frame width的比例
是否记录曾经的历史记录
ido被激活,进入minibuffer时执行该hook
该选项指明了一次列出多少个匹配项,0表示全部列出,若有超出的匹配项,用…代替
若为非nil,则Elisp中所有使用read-buffer和read-file-name函数的部分,都使用ido-read-buffer和ido-read-file-name来代替
使用`ido-setup-hook`来进行,例如
(add-hook 'ido-setup-hook 'ido-my-keys)
(defun ido-my-keys ()
"Add my keybindings for Ido."
(define-key ido-completion-map " " 'ido-next-match))
将光标放到要删除的tag上,按C-c C-d,则会把开始和结束标签都删掉. 需要注意的是,如果HTML tag不匹配的话,可能会删错开始/结束tag
C-c C-f(sgml-skip-tag-forward) / C-c C-b (sgml-skip-tag-backward)
Tag | hotkey | command name |
<h1> | 【Ctrl+c 1】 | html-headline-1 |
<h2> | 【Ctrl+c 2】 | html-headline-2 |
<p> | 【Ctrl+c Enter ↵】 | html-paragraph |
<hr> | 【Ctrl+c Ctrl+c -】 | html-horizontal-rule |
<ul> | 【Ctrl+c Ctrl+c u】 | html-unordered-list |
<li> | 【Ctrl+c Ctrl+c l】 | html-list-item |
<a> | C-c C-c h | html-href-anchor |
<img> | C-c C-c i | html-image |
交互式插入tag | C-c C-o | sgml-tag |
交互式插入属性 | C-c C-a | sgml-attributes |
C-c / (sgml-close-tag)
;; sample use of emacs abbreviation feature
(define-abbrev-table 'global-abbrev-table '(
;; math/unicode symbols
("8in" "∈")
("8nin" "∉")
("8inf" "∞")
("8luv" "♥")
("8smly" "☺")
;; email
("8me" "[email protected]")
;; computing tech
("8wp" "Wikipedia")
("8ms" "Microsoft")
("8g" "Google")
("8it" "IntelliType")
("8msw" "Microsoft Windows")
("8win" "Windows")
("8ie" "Internet Explorer")
("8ahk" "AutoHotkey")
;; normal english words
("8alt" "alternative")
("8char" "character")
("8def" "definition")
("8bg" "background")
("8kb" "keyboard")
("8ex" "example")
("8kbd" "keybinding")
("8env" "environment")
("8var" "variable")
("8ev" "environment variable")
("8cp" "computer")
;; signature
("8xl" "Xah Lee")
;; url
("8uxl" "http://xahlee.info/")
;; emacs regex
("8d" "\\([0-9]+?\\)")
("8str" "\\([^\"]+?\\)\"")
;; shell commands
("8ditto" "ditto -ck --sequesterRsrc --keepParent src dest")
("8im" "convert -quality 85% ")
("8f0" "find . -type f -size 0 -exec rm {} ';'")
("8rsync" "rsync -z -r -v -t --exclude=\"*~\" --exclude=\".DS_Store\" --exclude=\".bash_history\" --exclude=\"**/xx_xahlee_info/*\" --exclude=\"*/_curves_robert_yates/*.png\" --exclude=\"logs/*\" --exclude=\"xlogs/*\" --delete --rsh=\"ssh -l xah\" ~/web/ [email protected]:~/")
))
;; stop asking whether to save newly added abbrev when quitting emacs
(setq save-abbrevs nil)
;; turn on abbrev mode globally
(setq-default abbrev-mode t)
开启`electric-pair-mode`这个minor mode后,插入左括号会自动补全右括号, 而删除一方括号不会删除另一个.
(electric-pair-mode 1)
默认补全的括号与各个major-mode的syntax table有关(可用通过describe-syntax查看). 要定义自己的括号列表可用编辑`electric-pair-pairs`
(setq electric-pair-pairs '(
(?\" . ?\")
(?\{ . ?\})
) )
此外也可以定义自己的括号补全函数
(if (region-active-p)
(let (
(p1 (region-beginning))
(p2 (region-end))
)
(goto-char p2)
(insert rightBracket)
(goto-char p1)
(insert leftBracket)
(goto-char (+ p2 2))
)
(progn
(insert leftBracket rightBracket)
(backward-char 1) ) )
)
(defun insert-pair-paren () (interactive) (insert-bracket-pair "(" ")") )
(defun insert-pair-bracket () (interactive) (insert-bracket-pair "[" "]") )
(defun insert-pair-brace () (interactive) (insert-bracket-pair "{" "}") )
(defun insert-pair-double-straight-quote () (interactive) (insert-bracket-pair "\"" "\"") )
(defun insert-pair-single-straight-quote () (interactive) (insert-bracket-pair "'" "'") )
(defun insert-pair-single-angle-quote‹› () (interactive) (insert-bracket-pair "‹" "›") )
(defun insert-pair-double-angle-quote«» () (interactive) (insert-bracket-pair "«" "»") )
(defun insert-pair-double-curly-quote“” () (interactive) (insert-bracket-pair "“" "”") )
(defun insert-pair-single-curly-quote‘’ () (interactive) (insert-bracket-pair "‘" "’") )
(defun insert-pair-corner-bracket「」 () (interactive) (insert-bracket-pair "「" "」") )
(defun insert-pair-white-corner-bracket『』 () (interactive) (insert-bracket-pair "『" "』") )
(defun insert-pair-angle-bracket〈〉 () (interactive) (insert-bracket-pair "〈" "〉") )
(defun insert-pair-double-angle-bracket《》 () (interactive) (insert-bracket-pair "《" "》") )
(defun insert-pair-white-lenticular-bracket〖〗 () (interactive) (insert-bracket-pair "〖" "〗") )
(defun insert-pair-black-lenticular-bracket【】 () (interactive) (insert-bracket-pair "【" "】") )
(defun insert-pair-tortoise-shell-bracket〔〕 () (interactive) (insert-bracket-pair "〔" "〕") )
需要安装名为`autopairs`的package
开启show-paren-mode
(show-paren-mode 1)
show-paren-mode有两种高亮括号的方式:
(setq show-paren-style 'parenthesis) ; 只高亮括号
(setq show-paren-style 'expression) ; 高亮整个括号内的内容
Emacs提供了多个命令在嵌套括号表达式中定位:
Key | Command | Purpose |
【Ctrl+Alt+←】 | backward-sexp | Move to previous sibling (move to the (beginning of) previous sexp unit) |
【Ctrl+Alt+→】 | forward-sexp | Move to next sibling (move to the (end of) next sexp unit) |
【Ctrl+Alt+↑】 | backward-up-list | Move to parent (move to the (beginning of) outer paren pair) |
【Ctrl+Alt+↓】 | down-list | Move to first child (move into the (beginning of) first inner paren pair) |
re-builder是一个可用让你交互式创建正则表达式的工具. 当你在re-builder中修改正则表达式时,会动态的在buffer中用高亮显示出正则表达式的匹配范围.
re-builder支持多种格式的正则(但不支持PCRE).
M-x re-builder
通过设置变量`reb-re-syntax`可用设置re-builder解析的正则表达式的语法类型.
Syntax | Description |
---|---|
read | default. Similar to string but requires “double escaping” of backslashes like you would be required to do in elisp. 例如”\(bar\)”,缺点是太多\了 |
string | recommended. Similar to read but you don’t have the issue of backslash plague that haunts the default settings. 例如”\(bar\)”,推荐这种方法 |
sregex | A symbolic regular expression engine that uses s-expressions instead of strings. |
lisp-re | Yet another regular expression engine that uses s-expressions |
rx | A third, and far more advanced, s-expression regexp engine. Use this and not sregex or lisp-re if you want to use a lisp-style regexp engine. |
C-c TAB
C-c C-e会进入sub-expression mode,随后输入数字0-9表示高亮捕获的哪个分组,q表示退出该mode
C-c C-i
C-c C-s表示下一个匹配的内容
C-c C-w表示上一个匹配的内容
C-c C-w
C-c C-b,更改target-buffer后,在RE-Builder中创建的正则匹配到target buffer中的内容
C-c C-q
Command | Key | Purpose |
enlarge-window | 【Ctrl+x ^】 | increase height |
shrink-window | ◇ | decrease height |
enlarge-window-horizontally | 【Ctrl+x }】 | increase width |
shrink-window-horizontally | 【Ctrl+x {】 | decrease width |
shrink-window-if-larger-than-buffer | 【Ctrl+x -】 | shrink a window to fit its content. |
balance-windows | 【Ctrl+x +】 | make all windows same width/height |
在开启win-mode的情况下,可用用C-c 左方向键(winner-undo)来回退窗口配置, 也可以用C-c 右方向键(winner-redo)来重复窗口配置
使用命令`window-configuration-to-register(C-x r w)`将窗口配置信息保存到Register中
使用命令`jump-to-register(C-x r j)`将窗口配置信息从Register中还原
重启Emacs后Register中的保存的配置信息会丢失,即使已经开始了desktop-save-mode,若要在不同session间保存Split-window Config,需要使用revive.el Package
你可以用两个side-by-side的buffer显示同一份文档,其中左边buffer的最底端链接的是右边buffer的最顶端. 当光标从左边buffer的最低端往下时,它出现在右边buffer的最顶端.
开启winmove-default-keybindings就能用shift+方向键在不同window中跳转了.
;; use Shift+arrow_keys to move cursor around split panes
(windmove-default-keybindings)
;; when cursor is on edge, move to the other side, as in a toroidal space
(setq windmove-wrap-around t )
操作 | 说明 |
---|---|
+ | 新建目录 |
% m | 根据正则mark |
U | 取消所有的mark |
`^` | 上一层目录 |
M-! | 执行shell |
添加如下配置信息
(setq dired-recursive-copies 'always) ; “always” means no asking
(setq dired-recursive-deletes 'top) ; “top” means ask once
添加如下配置信息
(setq dired-dwim-target t)
现在在一个窗口中用C复制或R移动命令时,默认的目的路径为隔壁的窗口目录
添加如下配置信息
(require 'dired )
(define-key dired-mode-map (kbd "<return>") 'dired-find-alternate-file) ; was dired-advertised-find-file
(define-key dired-mode-map (kbd "^") (lambda () (interactive) (find-alternate-file ".."))) ; was dired-up-directory
这里命令`dired-find-alternate-file`在打开新文件的同时会关闭原buffer. 在dired中可用用a来触发该命令
(defun xah-open-in-external-app (&optional file)
"Open the current file or dired marked files in external app.
The app is chosen from your OS's preference."
(interactive)
(let ( doIt
(myFileList
(cond
((string-equal major-mode "dired-mode") (dired-get-marked-files))
((not file) (list (buffer-file-name)))
(file (list file)))))
(setq doIt (if (<= (length myFileList) 5)
t
(y-or-n-p "Open more than 5 files? ") ) )
(when doIt
(cond
((string-equal system-type "windows-nt")
(mapc (lambda (fPath) (w32-shell-execute "open" (replace-regexp-in-string "/" "\\" fPath t t)) ) myFileList))
((string-equal system-type "darwin")
(mapc (lambda (fPath) (shell-command (format "open \"%s\"" fPath)) ) myFileList) )
((string-equal system-type "gnu/linux")
(mapc (lambda (fPath) (let ((process-connection-type nil)) (start-process "" nil "xdg-open" fPath)) ) myFileList) ) ) ) ) )
(defun xah-open-in-desktop ()
"Show current file in desktop (OS's file manager)."
(interactive)
(cond
((string-equal system-type "windows-nt")
(w32-shell-execute "explore" (replace-regexp-in-string "/" "\\" default-directory t t)))
((string-equal system-type "darwin") (shell-command "open ."))
((string-equal system-type "gnu/linux")
(let ((process-connection-type nil)) (start-process "" nil "xdg-open" "."))
;; (shell-command "xdg-open .") ;; 2013-02-10 this sometimes froze emacs till the folder is closed. with nautilus
) ))
在dired中调用`wdired-change-to-wdired-mode`(菜单Immediate->Edit File Names或者C-c C-q),然后就像编辑文本文件一样,可用使用replace find等功能进行修改.
用C-c C-c提交修改,C-c ESC取消修改
使用find-dired命令.
使用dired-do-search(默认快捷键为A),输入搜索的字符串则会打开第一个匹配的文件. 按下M-,(tags-loop-continue)则打开第二个匹配的文件…
用命令find-dired / find-name-dired,这两个命令依赖于外部命令find
用命令find-lisp-find-dired / find-lisp-find-dired-subdirectories,这两个命令使用Emacs内部的find lisp library来查询,而不依赖于外部find命令. 这两个命令可用不等待find命令的返回结果,因此速度更快. 另外需要注意的是,这两个命令接收的是Emacs正则表达式而不是通配符
使用WDired-mode可用像编辑普通文件一样修改Dired buffer
在dired buffer中按C-x C-q则会键入Wdired-mode
C-c C-c
C-c ESC
默认情况下,在WDired-mode下只能编辑文件名. 若要同时可用直接修改文件属性,则需要把变量`wdired-allow-to-change-permissions`为t
是否可用修改链接
若值为t,则每当你对文件进行改名时,都会提示你用C-c C-c提交修改
若值为t,则当有文件要被覆盖时,做出提示
该变量指明了当光标在dired list中上下移动时,光标所处的位置. 若值为nil则跟编辑普通文件一样. 若值为’somtimes,则只有当光标处于文件名之前时,跳到文件名的第一个字符处. 值为t则表示Emacs每次都定位到文件名开始处
comint-mode提供基本的与进程交互的能力,命令历史的功能,input/output hooks.
Emacs会设置变量EMACS和INSIDE_EMACS
在replace string处,填写\,(function name)会将name用function函数处理后作为替换的字符串. 例如
\,(upcase \1) ;将捕获的值转化为大些形式
列出当前文件内容中符合条件正则的文本行
列出所有buffer中符合条件正则的文本行
删除当前文件内容中符合条件正则的文本行
删除当前文件内容中不符合条件正则的文本行
查询当前目录中多个文件中符合/不符合条件的文本行
查询 当前目录及子目录 中多个文件中符合/不符合条件的文本行
在文件名符合正则匹配的文件中查询内容
用find命令先筛选文件名,再进行内容匹配
默认情况下Emacs排序时是大小写敏感的,要让Emacs排序时忽略大小写,需要设置变量`sort-fold-case`为t
按字典顺序对行进行排序
通过该命令,你可以只对一行的某个部分进行排序,而剩下的部分还保留原顺序.
该命令首先提示你输入一个正则表达式用于标明哪些部分的内容参与排序,该正则表达式被称为record regexp,Emacs只对该正则表达式匹配的内容作顺序重排,而一行的其他内容不做变化
然后提示你输入一个正则表达式用于说明根据哪些部分的内容进行排序,该正则表达式被称为key regexp,若该表达式为空,默认为\&,表示record regexp所匹配的所有内容,可用以用\数字来表示record regexp中的分组
根据选定列作为key来对行进行排序,所谓选定列是由mark和光标位置指定的列
所谓field是由空格或TAB分隔的单元.
若直接用调用sort-fields,则表示根据第一个field来排序.
可用使用使用C-u 数字参数来指定根据第几个field来排序(从1开始计算),若数字为负数,则从后往前数
类似sort-fields,但是排序时把指定的field当成数字来排序
Emacs会自动推测指定field的进制,若field以0x开始表示是16进制,以0开头的表示是而进行,默认为十进制(由变量`sort-numeric-base`决定)
根据字段顺序对页进行排序,所谓页是由 form feed character 即^L
根据字典顺序对段落进行排序.
段落的定义不同的mode下定义不同,但默认情况下是由一个或多个换行来划分的. 具体参见变量`paragraph-start`和`paragraph-separate`
查看变量buffer-file-coding-system的值
M-x set-buffer-file-coding-system
C-x r s(copy-to-register)
C-x r i(insert-register)
C-x r w(window-configuration-to-register)
C-x r j(jump-to-register)
In Linux, if copy/paste doesn’t work with other apps, you can add this:
;; after copy Ctrl+c in X11 apps, you can paste by `yank' in emacs
(setq x-select-enable-clipboard t)
;; after mouse selection in X11, you can paste by `yank' in emacs
(setq x-select-enable-primary t)
C-x r SPC
C-x r j
Key binding | Command Name | Description |
M-s h l | highlight-lines-matching-regexp | Highlights all lines matching a regular expression |
M-s h p | highlight-phrase | Highlights everything matching a phrase |
M-s h r | highlight-regexp | Highlights everything matching a regular expression |
M-s h u | unhighlight-regexp | Deletes the highlighter under point |
M-s h w | hi-lock-write-interactive-patterns | Inserts a list of Hi-Lock patterns into the buffer |
M-s h f | hi-lock-find-patterns | Searches for Hi-Lock patterns in the buffer to use. |
使用命令M-s h w会把当前的高亮设置用注释的方式写在当前文件的头部.
当Emacs进入hi-lock-mode后,会自动搜索文件头部的10000个字节(由变量`hi-lock-file-patterns-range`决定)找到高亮信息并执行高亮操作
Emacs进入hi-lock-mode后,若搜索到有高亮设置信息,会提示你是否应用该高亮信息,若想自动应用该高亮信息在.emacs中添加如下配置项
(global-hi-lock-mode 1)
(setq hi-lock-file-patterns-policy #'(lambda (dummy) t))
ielm是一个Emacs自带的elisp REPL环境. 它继承自comint-mode,因此也就拥有了comint-mode的那些特性,比如命令历史,tab补全等等.
M-x ielm
所谓working buffer就是一个特殊的buffer,你在ielm上执行的命令就好像是在该buffer上执行命令一样. 通过绑定working buffer,可用在ielm中修改buffer的buffer-local变量
绑定方法为C-c C-b,然后选择要作为working buffer的buffer名称
默认情况下,ielm是不支持auto complete的. 可用将下面代码放入.emacs中
(defun ielm-auto-complete ()
"Enables `auto-complete' support in \\[ielm]."
(setq ac-sources '(ac-source-functions
ac-source-variables
ac-source-features
ac-source-symbols
ac-source-words-in-same-mode-buffers))
(add-to-list 'ac-modes 'inferior-emacs-lisp-mode)
(auto-complete-mode 1))
(add-hook 'ielm-mode-hook 'ielm-auto-complete)
Command | Description |
ifconfig and ipconfig | Runs ifconfig or ipconfig |
iwconfig | Runs the iwconfig tool |
netstat | Runs the netstat tool |
arp | Runs the arp tool |
route | Runs the route tool |
traceroute | Runs the traceroute tool |
ping | Runs ping, but on most systems it may run indefinitely; adjust ping-program-options. |
nslookup-host | Runs nslookup in non-interactive mode. |
nslookup | Runs nslookup in interactive mode in Emacs as an inferior process |
dns-lookup-host | Look up the DNS information for an IP or host using host. |
run-dig and dig | Invokes the dig in interactive mode as an inferior process |
ftp | Very simple wrapper around the commandline tool ftp. You are probably better off with TRAMP for all but low-level system administration. |
smbclient and smbclient-list-shares | Runs smbclient as an inferior process or list a hosts’ shares. |
finger | Runs the finger tool |
whois and whois-reverse-lookup | Runs the whois tool but tries to guess the correct WHOIS server. You may have to tweak whois-server-tld and whois-server-list or set whois-guess-server to nil |
若只是需要在Emacs所打开的buffer中查询某字段,则occur命令一个对GNU grep的很好的替代.
M-x occur会让你输入一个正则表达式,然后在 当前buffer 中进行内容匹配,在Occur Output buffer中显示匹配正则表达式的行,并对匹配部分进行加亮处理.
M-x multi-occur会让你选择要在哪些buffer中进行内容匹配
M-x multi-occur-in-matching-buffers会在buffer name符合某正则的buffer中进行内容匹配
M-x occur-rename-buffer 对默认的*Occur* outputbuffer进行重命名,命名规则为*Occur:匹配的文件名列表,用/分隔*
在开启Next-Error-Follow minor mode后,可用使用M-n和M-p来代替M-g M-n / M-g M-p
(eval-when-compile
(require 'cl))
(defun get-buffers-matching-mode (mode)
"Returns a list of buffers where their major-mode is equal to MODE"
(let ((buffer-mode-matches '()))
(dolist (buf (buffer-list))
(with-current-buffer buf
(if (eq mode major-mode)
(add-to-list 'buffer-mode-matches buf))))
buffer-mode-matches))
(defun multi-occur-in-this-mode ()
"Show all lines matching REGEXP in buffers with this major mode."
(interactive)
(multi-occur
(get-buffers-matching-mode major-mode)
(car (occur-read-primary-args))))
;; global key for `multi-occur-in-this-mode' - you should change this.
(global-set-key (kbd "C-<f2>") 'multi-occur-in-this-mode)
在info手册中查找关键字
若调用的shell命令输出不多,则直接输出在echo area,否则会输出到*Shell Command Output* buffer
shell命令stderr输出默认被重定向到stdout输出到*Shell Command Output* buffer. 你也可以通过设定变量`shell-command-default-error-buffer`的值将stderr的输出重定向到指定的buffer
若shell命令执行失败(返回值不会0),则会在mode-line显示shell命令的返回值
默认情况下Emacs会同步等待shell命令执行完成,若要Emacs异步等待shell命令,在shell命令后加&表示后台运行
若在执行该命令前用C-u传递了universal参数,则会将结果插入到当前buffer的光标处
异步处理shell命令,命令输出到*Async Shell Command* buffer
若在执行该命令前用C-u传递了universal参数,则会将结果插入到当前buffer的光标处
该变量值为t,则当要在minibuffer中输入某个参数时,可用用M-!执行一个shell命令,则会将该shell命令的输出作为minibuffer的待输入参数.
你也可以通过设定变量`shell-command-default-error-buffer`的值将stderr的输出重定向到指定的buffer
将所选区域通过stdin传递到shell命令中,并在echo area或output buffer中显示命令的输出
若在执行该命令前用C-u传递了universal参数,则会将结果替代该region
C-u C-h i 用emacs info打开外部info文件
启用visual-line-mode / global-visual-line-mode,具体来说有几个
假设有下面一些代码:
a = 1; bc = 2; cde = 3;
要让它们在=处对齐,则可用先选中这几行,然后调用`align-regexp`,然后输入=,则排列结果为
a = 1; bc = 2; cde = 3;
调用tmm-menubar(M-`)
在编辑文件路径前加上`/sudo::`. 例如
/sudo::/etc/bashrc
M-x repeat-complex-command. 该命令执行最后一个命令的elisp code. 它会显示执行最后一个命令时实际上执行的elisp code.
打开一个文件时,Emacs依据如下顺序来决定应该进入的Major Mode
第一行包含类似_*_ mode: xyz_*_,则emacs自动进入xyz-mode
(add-to-list 'magic-mode-alist '("<!DOCTYPE html .+DTD XHTML .+>" . nxml-mode) )
;; setup files ending in “.js” to open in js2-mode
(add-to-list 'auto-mode-alist '("\\.js\\'" . js2-mode))
minibuffer的prompt部分是不能被修改的,这样允许光标进入是没有意义的,可用加入如下配置信息达到阻止光标进入minibuffer的prompt部分.
;; don't let the cursor go into minibuffer prompt
(setq minibuffer-prompt-properties (quote (read-only t point-entered minibuffer-avoid-prompt face minibuffer-prompt)))
你可以为每个打开的文件记录下光标所在的位置,这样下次你打开这个文件,光标会处于上次关闭时的位置.
;; turn on save place so that when opening a file, the cursor will be at the last position.
(require 'saveplace)
(setq save-place-file (concat user-emacs-directory "saveplace.el") ) ; use standard emacs dir
(setq-default save-place t)
查看关于变量`default-frame-alist`的描述.
;; 配置大小
(add-to-list 'default-frame-alist '(width . 100)) ; character
(add-to-list 'default-frame-alist '(height . 52)) ; lines
;; 配置背景色
(add-to-list 'default-frame-alist '(background-color . "cornsilk"))
;; 配置字体
(add-to-list 'default-frame-alist '(font . "DejaVu Sans Mono-10"))
也可以通过函数`set-frame-parameter`来配置
M-x variable-pitch-mode
;; Creating a new menu pane in the menu bar to the right of “Tools” menu
(define-key-after
global-map
[menu-bar mymenu]
(cons "MyMenu" (make-sparse-keymap "hoot hoot"))
'tools )
;; Creating a menu item, under the menu by the id “[menu-bar mymenu]”
(define-key
global-map
[menu-bar mymenu nl]
'("Next Line" . next-line))
;; creating another menu item
(define-key
global-map
[menu-bar mymenu pl]
'("Previous Line" . previous-line))
;; code to remove the whole menu panel
;; (global-unset-key [menu-bar mymenu])
C-x 8 RET然后输入Unicode名称或者16进制代码,可用用C-x 8 C-h来查看其他的特殊字符
在linux下可用带–maximized或–mm参数
在windows下,把下列代码放入初始化文件中
(defun maximize-frame ()
"Maximizes the active frame in Windows"
(interactive)
;; Send a `WM_SYSCOMMAND' message to the active frame with the
;; `SC_MAXIMIZE' parameter.
(when (eq system-type 'windows-nt)
(w32-send-sys-command 61488)))
(add-hook 'window-setup-hook 'maximize-frame t)
使用tabify和untabify命令可用使文件的空格和tab相互转换,但是要注意的是,tabify和untabify在转换时 也会转换字符串中的空格和tab,这在编程时需要注意
Emacs若在文件的第一行找到#!声明,则认为该文件为script文件. 通过下面设置可用让Emacs自动給script文件加上可执行文件
(add-hook 'after-save-hook 'executable-make-buffer-file-executable-if-script-p)
M-~(M-x not-modified)
在替换的地方输入格式\,(Lisp代码),则会执行Lisp代码并将结果作为替换的内容
Lisp代码中可用用\1…\N的方法替换分组内容. 默认分组内容是作为字符串看待的,若要作为数字看待,则用\#1…\#N
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。