`
isiqi
  • 浏览: 16050123 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论
阅读更多
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-u n 或 M-n   重复执行n次后继命令

Emacs中的删除

C-d     删除光标上的字符
DEL     删除光标前的字符

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

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

C-y     恢复删除最近的一个
M-y     循环恢复删除上一个

文本块操作

C-@     标记文本块的开始

C-x C-x 互换插入点和文本标记的位置

M-h     标记整个段落
C-x C-p 标记整个页面
C-x h   标记整个缓冲区

查找与替换

简单查找替换

C-s     向前递增查找
C-r     反向递增查找

C-s C-w 向前递增查找,把光标所在的单词作为查找对象
C-r C-w 反向递增查找,把光标所在的单词作为查找对象

replace-string  查找替换光标后所有的内容
M-%     查询替换操作

对于M-%,需要注意的是其相关的一些操作:

SPACE或y    用新字符串替换原来的,并进入下一个位置
DEL或n      不替换,进入下一个位置
.          在当前位置做替换后退出查询-替换操作
,          替换,并显示替换情况(再按空格或y进入下一个位置)
!          对后面的内容全部进行替换,不再提问
^          返回上一个替换了的位置
RETURN或q   退出查询替换操作
C-r        进入递归编辑状态
C-w        删除此处内容并进入递归编辑状态(好进行其他修改)
M-C-c      退出递归编辑状态,继续完成查询-替换操作
C-]        退出递归编辑状态和查询替换操作

正则表达式查找与替换

C-M-s Return      向前查找正则表达式
C-M-r Return      反向查找正则表达式

C-M-s       向前递归查找正则表达式
C-M-r       反向递归查找正则表达式

query-replace-regexp  查询-替换正则表达式
replace-regexp    无条件替换正则表达式(慎用)

正则表达式中的字符:

^          匹配行首
$          匹配行尾
.          匹配任意单个字符
.*         匹配任意个字符
\<         匹配单词的开头
\>         匹配单词的结尾
[]         匹配[]中的任何一个字符,如[a-z]匹配任何一个小写字母

Emacs 的C/C++ 模式

指定为C++模式的方法

一般根据扩展名自动设定,不用指定,不过有时候你希望.h文件是C++模式的(缺省是C模式),在文件第一行(或其末尾)上加入

  // -*- C++ -*-

语法高亮

不是C模式专有,顺便提一下,M-x global-font-lock-mode RET 或在.emacs中加入(global-font-lock-mode t)。在console下,Emacs21才支持语法高亮。(语法高亮,不同关键字用不同的颜色来突出)

编译和调试

M-x compile RET 编译
M-x gdb RET     调试

C-x `           (出错信息中)下一个错误,一个窗口显示错误信息,另一个
                显示源码的出错位置
C-u C-x `       在compile buffer 列出同样的错误。
C-c C-c         转到出错位置

启动gdb调试器后,光标在源码文件缓冲区中时:

C-x SPC         在当前行设置断点
C-c C-c         中断
C-c C-z         中止
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
C-x C-a C-d     删除当前断点
C-x C-a C-l     到达最后一行

显示vector元素值

GDB 在调用成员函数的时候需要首先找到函数的代码才能执行。如果一个成员函数是内联的、并且没有在程序中被使用,那么 GDB 将找不到其代码,也就不能执行此成员函数。

方法1    在源程序的查看之前的位置使用一次  at() 成员函数。
方法2    执行 print vec_obj 可以列出 vector 的内部数据结构,使用这些结构也可以查看各个元素。
        假设列出了如下内容:
        $1 = {<std::_Vector_base<int,std::allocator<int> >> = {
        _M_impl = {<std::allocator<int>> =   {<__gnu_cxx::new_allocator<int>> = {<No data fields>}, 
        < No data fields>}, _M_start = 0x8095040,
        _M_finish = 0x809505c, _M_end_of_storage = 0x8095060}}, <No data fields>}

	可以这样查看第一个元素:print vec_obj._M_impl._M_start[0]

	为方便使用,可以定义一个宏来使用:
	define print_vector
	print $arg0._M_impl._M_start[$arg1]
	end

	这样,print_vector vec_obj 2 就可查看第三个元素。

在C/C++代码中操作

M-a        移动到当前语句的开始
M-e        移动到当前语句的末尾

C-M-a      移动到当前函数的开始
C-M-e      移动到当前函数的结尾

M-q        若光标在注释文本中间,则进行段落重排,保留缩进和前导字符

C-M-h      把光标放在当前函数开头,把文本块标记放在函数结尾, 即把函数整个选作为一个文本块。

C-c C-q    对整个函数进行缩进
C-x h      选定整个buffer,  然后C-M-\可以对代码进行重新排版

C-c C-u    移动到当前预处理条件的开始位置
C-c C-p    移动到上一个预处理条件
C-c C-n    移动到下一个预处理条件

M-;        对当前行进行注释
C-x C-x    快速返回移动前的光标位置

C-c C-c    对一块代码进行注释;取消注释用命令 uncomment-region

子模式

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个…)
TAB           重新缩进当前行

M-/           自动补齐(缓冲区中能找得到的串)
M-;           行尾加入注释

C-c C-e       扩展宏

C-c C-c       注释掉整个区域
C-c C-\       将区域中的每一行结尾都加入一个'\'字符

Emacs中的register

在多个文件中逛的时候,我们常常需要快速切换到先前访问的某个位置。因此,我们需要把文件及其光标位置暂时存放在某个地方。

在Emacs中,我们可以使用register暂时性保存这些信息。

将当前光标所在位置保存入一个register中:

C-x r SPACE + register名(一个字符,比如a吧)

然后我们就可以到处瞎逛,若要回到保存的register a位置,我们可以输入:

C-x r j a

挺好用的吧:)

如果你记性和我一样不好,恐怕会常常想看看自己保存了哪些register,我们可以输入:

M-x view-register    查看某一个register
M-x list-registers   查看所有的register

其实我常用的就是以上功能,为了使笔记稍微完整一点,下面开始Copy 《GNU Emacs Manual》的相关章节:

在下面,我们使用r来命名所有的register:

Save Positions in Registers

C-x r SPC r
    Save position of point in register r (point-to-register). 
C-x r j r
    Jump to the position saved in register r (jump-to-register).

Saving Text in Registers

C-x r s r
    Copy region into register r (copy-to-register). 
C-x r i r
    Insert text from register r (insert-register). 
M-x append-to-register RET r
    Append region to text in register r. 
M-x prepend-to-register RET r
    Prepend region to text in register r.

Saving Rectangles in Registers

C-x r r r
    Copy the region-rectangle into register r (copy-rectangle-to-register). 
    With numeric argument, delete it as well. 
C-x r i r
    Insert the rectangle stored in register r (if it contains a rectangle) (insert-register).

Saving Window Configurations in Registers

C-x r w r
    Save the state of the selected frame's windows in register r (window-configuration-to-register). 
C-x r f r
    Save the state of all frames, including all their windows, 
    in register r (frame-configuration-to-register).

Keeping Numbers in Registers

C-u number C-x r n r
    Store number into register r (number-to-register). 
C-u number C-x r + r
    Increment the number in register r by number (increment-register). 
C-x r g r
    Insert the number from register r into the buffer.
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics