= 编辑命令 ==
= 编译和调试 ==
C-x C-f 查找文件而且在新缓冲区中打开
C-x C-v 读入另外一个文件替换掉用C-x C-f打开的文件
C-x i 把文件插入到光标的当前位置
C-x C-s 保存文件
C-x C-w 把缓冲区内容写入一个文件
C-x C-c 退出Emacs
C-u C-x s 保存所有缓冲区 !!!!!!!!!!!!!!!!!html
C-f 光标前移一个字符(右)
C-b 光标后移一个字符(左)
C-p 光标前移一行(上)
C-n 光标后移一行(下)
M-f 前移一个单词
M-b 后移一个单词
C-a 移动到行首an
C-e 移动到行尾
M-e 前移一个句子
M-a 后移一个句子
M-} 前移一个段落
M-{ 后移一个段落
C-v 屏幕上卷一屏
M-v 屏幕下卷一屏
C-x ] 前移一页
C-x [ 后移一页
M-< 前移到文件头
M->; 后移到文件尾
C-l 从新绘制屏幕,当前行放在画面中心
C-u n 重复执行n次后续命令
按下M-x后在辅助输入区中输入"goto-line"跳到指定的行,输入"goto-char"跳到指定的字符java
C-d 删除光标位置上的字符
DEL 删除光标前面的字符
M-d 删除光标后面的单词
M-DEL 删除光标前面的单词
C-k 从光标位置删除到行尾
M-k 删除光标后面的句子
C-x DEL 删除光标前面的句子
C-y 恢复被删除的文本或者粘贴最近删除或复制的文本
C-w 删除文件块
C-u 0 C-k 删除从光标位置到行首
按下M-x后在辅助输入区中输入"kill-paragraph"删除光标后面的段落,按下"backward-kill-paragraph"删除光标前面的段落linux
C-@ 标记文本块的开始(或结束)位置
C-x C-x 互换插入点和文本标记的位置
C-w 或 SHIFT-DEL 删除文本块
M-w 复制文本块
M-h 标记段落
C-x C-p 标记页面
C-x h 标记整个缓冲区c++
C-t 交换两个字符的位置
M-t 交换两个单词的位置
C-x C-t 交换两个文本行的位置
按下M-x后在辅助输入区中输入"transpose-sentences"交换两个句子的位置,按下"transpose-paragraph"交换两个段落的位置git
M-c 单词首字母改成大写
M-u 单词的字母所有改成大写
M-l 单词的字母所有改成小写github
C-s 向前递增查找
C-r 向后递增查找
C-s C-w 开始递增查找,把光标位置的单词作查找字符串
C-s C-y 开始递增查找,把光标位置到行尾之间的文本作查找字符串
C-s M-y 开始递增查找,将clipboard的内容做为查找字符串
C-s return searchstring return 向前开始非递增查找操做
C-r return searchstring return 向后开始非递增查找操做
C-s return C-w 向前开始单词查找(不受换行符、空格、标点符号影响)
C-r return C-w 向后开始单词查找(不受换行符、空格、标点符号影响)正则表达式
C-x b 若是输入一个新的文件名则新建一个文件而且编辑,不然打开该文件
C-x s 保存所有缓冲区
C-x k 删除缓冲区
M-x rename-buffer 重命名当前缓冲区
C-x C-q 把当前编辑缓冲区设置为只读属性
C-x 0 删除当前所在的窗口
C-x 1 当前缓冲区满屏显示
C-x 2 建立上下排列的窗口
C-x 3 建立左右排列的窗口
C-x o 在窗口之间移动
C-x ^ grow window taller
C-x { shrink window narrower
C-x } grow window widershell
C和C++模式编程
=
指定为C++模式的方法 =
windows
通常根据扩展名自动设定,不用指定,不过有时候若但愿.h文件是C++模式的(缺省是C模式),在文件第一行(或其末尾)上加入
// -*- C++ -*-
=
语法高亮 =
不是C模式专有,M-x global-font-lock-mode RET 或在.emacs中加入(global-font-lock-mode t)。
=
子模式 =
auto-state 输入时自动缩进,自动换行
hungry-state Backspace时,自动删除尽量多的空白和空行
C-c C-t 同时转换(开/关)auto-state和hungry-state子模式
C-c C-a 转换 auto-state 子模式
C-c C-d 转换 hungry-state 子模式
= 编辑命令 ==
C-c . 设置缩进风格(按TAB键可列出可用的风格,缺省的为gnu,其缩进为2个字符;linux为8个;k&r为5个,java为4个)
TAB 从新缩进当前行
C-M-\ 自动补齐(缓冲区中能找获得的串)
M-; 行尾加入注释
C-c C-e 扩展宏
C-c C-c 注释掉整个区域
C-u C-c C-c 取消注释
C-c C-\ 将区域中的每一行结尾都加入一个'\'字符
C-M \ 自动缩进所选区域
C-c \\调出拼音输入法
= 编译和调试 ==
M-x compile RET 编译
M-x gdb RET 调试
C-x ` (出错信息中)下一个错误,一个窗口显示错误信息,另外一个显示源码的出错位置
C-c C-c 转到出错位置
启动gdb调试器后,光标在源码文件缓冲区中时:
C-x SPC 在当前行设置断点
C-x C-a C-s step
C-x C-a C-n next
C-x C-a C-t tbreak
C-x C-a C-r continue
经常使用命令:
m : mark
u : unmark
d : mark delete
D : 当即删除
x : 执行删除
g : refresh
C : copy
R : move
Hideshow minor mode
在编程时能够隐藏函数的实现。M-x hs-minor-mode
(setq hs-minor-mode-prefix [(contrl o)]) 能够改变复杂的命令前缀.
用法:
`C-c @ C-h' : Hide the current block (`hs-hide-block').
`C-c @ C-s' : Show the current block (`hs-show-block').
`C-c @ C-c' : Either hide or show the current block (`hs-toggle-hiding')
`C-c @ C-M-h' : Hide all top-level blocks (`hs-hide-all').
`C-c @ C-M-s' : Show everything in the buffer (`hs-show-all').
十六进制模式
查看文本的十六进制编码
M-x hexl-mode
C-c C-c 退出十六进制模式
C-c . g d 目录列表窗口
C-c . g s 源码窗口
C-c . g m 方法和变量窗口
C-c . g h 历史窗口
C-c . g l 最后选择过的编辑窗口
C-c . g 1 编辑窗口1
C-c . g n 编辑窗口n
C-c . l c 选择版面
C-c . l r 重画版面
C-c . l t 拴牢版面(锁定版面)
C-c . l w 拴牢可见的ecb窗口
C-c . \ 拴牢编绎窗口
find . -name "*.[ch]" -print > cscope.files
find . -name "*.asm" -print -o -name "*.inc" -print | etags -
find . -name "*.[ch]" -print -o -name "*.s" -print | etags -
find c:/msys64/usr/include -name "*.[ch]" -print -o -name "*.s" -print | ctags -
find . -name "*.asm" -print -o -name "*.[sch]" -print > cscope.files
find . -name "*.cpp" -print -o -name "*.cc" -print -o -name "*.[sch]" -print > cscope.files
find . -name "*.asm" -print -o -name "*.[sch]" -print > gtags.files
生成数据索引
cscope -bkq
内核索引命令
find ./block ./certs ./crypto ./drivers ./firmware ./fs ./include ./init ./ipc ./kernel ./lib ./mm ./net ./security ./sound ./usr ./virt ./arch/arm/boot ./arch/arm/common ./arch/arm/configs ./arch/arm/crypto ./arch/arm/ ./arch/arm/firmware ./arch/arm/include ./arch/arm/kernel ./arch/arm/kvm ./arch/arm/lib ./arch/arm/mach-zynq ./arch/arm/mm ./arch/arm/net ./arch/arm/nwfpe ./arch/arm/probes ./arch/arm/vdso ./arch/arm/vfp ./arm/xen -name "*.asm" -print -o -name "*.[sch]" -print > cscope.files
find ./common ./cyclonessl ^
./cyclonecrypto ./cyclonetcp ^
./demo/common/freertos ./demo/common/microchip^
./demo/microchip/iotethernetkit ./demo/microchip/pic32mzefstarterkit^
-name "*.asm" -print -o -name "*.[sch]" -print > gtags.files
//cscope经常使用快捷键
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.
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.
注意:使用gdb时,须要添加相应的头文件。
开启/关闭多窗口
M-x gdb-many-windows
恢复到gdb原窗口布局
M-x gdb-restore-windows
/-—————————————
list
从第一行开始列出源码(默认10行)
l
l 3 (开始行)
/-—————————————
break
设置断点。两可使用“行号”“函数名称”“执行地址”等方式指定断点位置。其中在函数名称前面加“*”符号表示将断点设置在“由编译器生成的prolog代码处”。若是不了解汇编,能够不予理会此用法。
b <行号>
b <函数名称>
b *<函数名称>
b *<代码地址>
/-—————————————
run
开始调试程序
r
/-—————————————
continue
继续执行被调试程序,直至下一个断点或程序结束。
c
/-—————————————
clear
删除特定行的断点
clear <行号>
/-—————————————
delete
删除断点,编号从1开始
d <编号>
/-—————————————
next line
执行一行源程序代码,此行代码中的函数调用也一并执行。
n
/-—————————————
step line
执行一行源程序代码,若是此行代码中有函数调用,则进入该函数 s
/-—————————————
until
结束当前循环
until
/-—————————————
print
能够检查各个变量的值,数组的值,以及函数等
print p (p为变量名)
print $1 ($1为历史记录变量,在之后能够直接引用 $1 的值)
显示数组: p <数组名>
显示数组元素:p <*数组指针>
显示数组int a[N]的特定值:
① p *a@10
② p (int )*10
/-—————————————
whatis
能够显示某个变量的类型
whatis p
/-—————————————
info
用于显示各种信息
如: info b 显示断点信息
info r 寄存器信息
info local 显示当前函数中的局部变量信息
info prog 显示被调试程序的执行状态
quit 退出gdb调试 q
/-—————————————
/-———————————————
/-———————————————
"M-x describe-variable", 快捷键"C-h v", 查看变量的文档
"M-x describe-function", 快捷键"C-h f", 查看命令的文档
"M-x describe-key", 快捷键 "C-h k", 查看快捷键的文档
/-——————————————————
set-buffer-file-coding-system : utf-8 将当前文档的编码方式指定为utf-8编码
describe-coding-system: 显示当前文档的编码格式,及默认格式
/-——————————————————
n比较当前已经打开的2个文件缓冲区A/B中的文件内容。文件内容不一致的行(或不一致的上下行、多行)或做为一个差别区域,高亮显示。
A或B窗口中显示的增量部分,将显示为红色;若是将A的增量替换到B窗口后,B中的替换增长部分会显示为绿色。
A与B窗口同一行或多行有差别时,A与B的窗口都将加上白色高亮背景;同时A窗口中字符颜色为红色,而B窗口字符颜色为蓝色(估计是绿色加上白色背景后的重叠,等于蓝色了)
用按键j或者n/p移动光标至差别区域后,差别区域将显示为黄色背景,在增量窗口的另外一端(实在想不出用啥词语来描述:一个窗口为增量,另外一个窗口即所指),会在缺失行的行首第1字符显示为黄色背景,以做对比、便于查看。
M-x ediff-buffers
首先分别标记A/B缓冲名字,标记好后,在上面窗口中显示为A,下面窗口显示为B
基本操做按键以下:
将显示窗口切换为左右/上下(默认为上下分隔) |
? 对比模式下的帮助窗口
q 退出对比模式
v/V 屏幕上/下滚屏幕(前进/后退)
j 移动至第一个差别区域处
n/p 上/下一个不相同处(快进到上/下一个'差别处')
</> 移动光标到行首/行尾
h 高亮显示差别内容
@ 自动定位光标,移动光标至内容不一致的区域(差别中的某个单词做为高亮显示)
a/b 在差别行:将A/B中的内容替换至B/A中(复制A/B行至B/A,后者被替换)
在a/b行替换时,若是差别仅仅是空白区域不一致,即文字内容一致时,
将不会进行替换。替换后,能够逆操做,以下ra/rb。
ra/rb在上面的行差别替换后的恢复操做(逆操做):
ra 即恢复A窗口中的替换; rb为恢复B窗口中的替换
替换与恢复能够交替、反复操做(互逆)。
从新??????当前差别区域??????
! 更新差别区域
wa/wb 保存a/b窗口的文件
标记有??????的几个地方暂没有搞清楚:-)
//-——————————————————
/–——————————————————
/–——————————————————
“C-c SPC” ⇒ ace-jump-word-mode
enter first char of a word, select the highlight key to move to.
“C-u C-c SPC” ⇒ ace-jump-char-mode
enter a char for query, select the highlight key to move to.
“C-u C-u C-c SPC” ⇒ ace-jump-line-mode
each non-empty line will be marked, select the highlight key to move to.
//-———————————————————————
快捷键 C-= 从选中位置往外扩
C-M-h 选中一个函数
C-M-SPC 日后标记
//-———————————————————————
交换两个buffer的内容
C-9
//–——————————————————————
录制宏 start C-x (
stop C-x )
使用宏 C-x e 利用C-u 重复使用宏的次数 eg: C-u 100 C-x e 重复100次使用的宏 接着输入e 将重复
保存宏
M-x name-last-kbd-macro
插入宏 M-x insert-kbd-macro
//-———————————————————
C-x C-q 切换文件/buffer是只读仍是编辑
//-———————————————————
直接输入字符: 在每行前(或后)都插入这个字符
[M-a]: 将rect中的文字左对齐
[M-b]: 用空格(tabs或者spaces)替换全部rect中的字符
[M-c]: 去掉全部行左侧的空格
[M-f]: 用单个字符替换全部rect中的字符(提示输入一个字符)
[M-i]: 对每行中第一个找到的数字进行加1操做(自动把0x开头的看成十六进制数字)
[M-k]: 剪切rect
[M-l]: 把rect中的内容所有转换为小写
[M-m]: 拷贝rect
[M-n]: 用一串自增的数字替换rect中的每一行(这个功能能够用来给每行编号)
[M-o]: rect的内容右移,选中的rect用空格填充
[M-r]: 用字符串替换符知足正则表达式的字符串
[M-R]: 上下反转
[M-s]: 把rect中的每一行替换为一个字符串(提示输入)
[M-t]: 把rect整个替换为一个字符串(提示输入)
[M-u]: 把rect中的内容所有转换为大写
[M-|]: 对rect执行一个shell命令
默认状况下,grep会在当前文件所属的目录下查找,
grep -nH -e "ngxhttpssl" *.c 会在当前目录的全部.c文件中查找ngxhttpssl出现的地方
grep -nHr -e "iscanLEDDPdynamic" * 在当前目录下递归查找含有该字符串的文件
使用快捷键时,可能会出现无效的状况,注意区分大小写
init.el文件中更新上一次的更改,将鼠标放在该行的末尾,使用eval-last-sexp命令进行更新
git remote remove origin
git remote add origin https://e66:5989488zhang@github.com/e66/.emacs.d.git
有时候不支持中文
与.git 在一样的文件夹下添加.gitignore放置untracked文件
fatal: could not read Username for 'https://github.com': No such file or directo
解决方法:
在.git/config文件中找到[remote "origin"],在URL中作修改
url = https://e66:5989488zhang@github.com/e66/.emacs.d.git
解决方法
先git pull,而后再git push 或者merge
git config –global user.name "e66"
git config –global user.email "e665106@126.com"
鼠标左键操做失灵,重启电脑便可解决。
选中该区域,而后按下该符号便可
1.Call dired to list files in dir, or call find-dired if you need all sub directories;
2.Mark the files you want. You can mark by regex by typing 【% m】.
3.Type Q to call “dired-do-query-replace-regexp”.
4.Type your find regex and replace string.
5.For each occurrence,
astyle –style=allman –recursive /home/user/project/*.cpp /home/user/project/*.h
for /R %f in (.cpp;.c;*.h) do astyle –style=allman -S -p -F -xg -xe "%f"
astyle –options="D:/program files/emacs/bin/AStyle/astylerc.opt" -r *.c *.h
diff -uN test0 test1 >test1.patch
经过比较test0 test1 生成test1的补丁文件,eg:假设test0 是一个旧文件,而后test1是一个新文件
对test0打补丁,让test0的内容变为test1,名字仍是test0
patch -p0 <test1.patch
patch -RE -p0<test1.patch 将打过补丁的test0还原
C-x C-f /e66@remoteip:/home/username
find . -name '.git' -type d | xargs rm -rf
find . -name '.git' | xargs rm -rf
DEFINITION NOT FOUND.