您好,欢迎来到好走旅游网。
搜索
您的当前位置:首页Emacs简易操作指南

Emacs简易操作指南

来源:好走旅游网
Emacs简易操作指南

Emacs的命令通常包括控制键(就是上面标有Ctrl或Ctl的那个)或者是META键(上面标有EDIT或ALT)。为了方便起见我们将用下面的缩写来代替这些键的全称:

C-意思是当敲入字符时同时按住控制键,因此,C-f表示:按住控制键并且按f。 M-表示当键入时按住META或ALT或EDIT键。如果没有META或ALT或EDIT键,则用ESC键代替。表示ESC键,

注意:退出Emacs,按C-xC-c(两个字符)。在文本左边区域的“>>”符号表示让你试着使用一个命令。比如:

>>现在键入C-v(观看下一屏)移动到下一屏。(就象前面说的,按v的同时也按住控制键)。从现在开始,每当你读完一屏的时候都可以用它来翻屏。

注意在翻屏后会保留上屏的最后一行;这是为你继续阅读文本提供某些连贯性。

你所需要知道的第一件事是如何把光标从一个地方移动到另一个地方。你已经知道了如何向前翻一屏--用C-v。要向后翻一屏,键入M-v。 >>试着键入M-v和C-v几次。

*摘要(SUMMARY)

下面几个命令对整屏观看时有用: C-v向前翻一整屏。 M-v向后翻一整屏。

C-l清除屏幕并重新显示所有的文本,然后把光标移动到屏幕的中央。(注意是Control-L,而不是Control-1)。

>>寻找光标,并且注意它在文本里的位置。然后键入C-l。再寻找光标你会注意到光标现在会出现在同样的文本附近。

*基本光标控制(BASIC CURSOR CONTROL)

整屏整屏的移动是很有用的,可是如何把光标移动到屏幕上文本里的一个指定的地方呢?

有好几个方法可以实现。最基本的方法是用命令C-p,C-b,C-f,和C-n。这些命令每个都使光标在屏幕上往特定的方向移动一行或者一列。下面是一个图表显示了这四个命令和它们所移动的方向:

上一行,C-p

向前,C-b......当前光标的位置......向后,C-f 下一行,C-n

>>用C-n或C-p把光标移动到图表中间。然后键入C-l会看到整个图表出现在屏幕的中央。 你也许会发现这些字母很容易记住:P代表上面的(previous),N代表下一个(next),B代表向前(backward),F代表向后(forward)。这些是基本的光标位置命令,你将经常会用到它们。所以现在学习它们很有好处〕 >>用几次C-n把光标向下移动到这一行。

>>用C-f把光标移动到行里,再用C-p把光标上移。观察当光标在行的中间时C-p做了些什么。

每一个文本行都以一个换行符结尾,它用来当作行与行之间的分格。你的文件的最后一行的尾部应该有一个换行符(但Emacs并不要求一定要有一个)。

>>试着在行的开头使用C-b。它将会把光标移到上一行的末尾。这是因为它向后移的时候穿过了换行符。

C-f也能象C-b一样穿过换行符。

>>使用几次C-b,使您能知道光标在哪。然后用C-f移动到行的末尾。然后再用一次C-f,使光标移动到下一行。

当你移动超过屏幕的顶部或底部,光标回移动到下一屏的中间,这叫做“滚屏(scrolling)”。它使得Emacs滚屏移动到文本上指定的部位而不是移出屏幕。 >>试着用C-n把光标移过屏幕的底部,看看回发生什么。

如果觉得一个一个字符的移动太缓慢,可以一个单词一个单词的移动。M-f(Meta-f)向前移一个单词,M-b向后移一个单词。 >>键入几个M-f和M-b。

当光标在一个单词的中间,M-f移动到单词的末尾。当光标在两个单词间的空白部分M-f移动到后一个单词的末尾。M-b与M-f一样,只是移动的方向相反。

>>键入M-f和M-b几次,中间穿插一些C-f和C-b以使你能观察到M-f和M-b在单词中和单词间的不同行为。

注意比较C-f,C-b与M-f,M-b。通常情况下Meta键用于有关语言单位(词,句,段落)的操作;而控制键用于编辑时的基本单位(字符,行等)。

这是句与行的比较:C-a和C-e移动到一行的开头和末尾,M-a和M-e移动到一个句子的开头和末尾。

>>键入一对C-a,再键入一对C-e。键入一对M-a,再键入一对M-e。

你会看到重复键入的C-a什么也不做,而重复键入的M-a则会移动一个以上的句子。 光标在文本中的位置也叫“点(point)”。在段落里,光标标示出了点在屏幕上文本里的位置。

下面是简单的光标移动命令的总结,包括单词和句子的移动命令: C-f向前移动一个字符。 C-b向后移动一个字符。 M-f向前移动一个单词。 M-b向后移动一个单词。 C-n移动到下一行。 C-p移动到上一行。 C-a移动到行首。 C-e移动到行尾。

M-a向前移动到句子的开头。 M-e向后移动到句子的末尾。

>>试着对每一个命令都实践几次,它们都是经常要用到的命令。

另外两个重要的光标移动命令是M-<(Meta小于),它移动光标到整个文本的开头,M->(Meta大于)它移动光标到整个文本的末尾。

在多数终端上,“<”在逗号的上面,所以你必须用Shift键来输入它。在这些终端上,你也必须用Shift键来输入M-<;没有Shift键,你可以输入M-逗号。

>>现在就试试M-<,移动到本教程的开头,然后再用C-v移回这里。现在就试试M->,移动到本教程的末尾,然后再用M-v移回这里。

你也可以用方向键来移动光标,如果你的终端有方向键的话。我们建议学习C-b,C-f,C-n和C-p有三个原因。第一,它们能在所有类型的终端上工作。第二,你获得了使用Emacs的锻炼,你将会发现输入这些CTRL加字符比按方向键要快(因为你不必把你的手从键盘上移开)。第三,一旦你养成了使用这些CTRL加字符的命令的习惯,你就能一样容易的学习其他高级的光标移动命令。

大多数Emacs命令接收一个数字参数;对大多数命令来说,这表示命令重复的次数。输入重复命令次数的方法是在输入命令之前按C-u和数字。如果你有META(或EDIT或ALT)键,则有另一种方法输入数字参数:在按住META键的时候输入数字,我们建议学习C-u方法,因为它能在任何终端上工作。 例如,C-u8C-f向前移动8个字符。

>>试着使用带数字参数的C-n或C-p,只用一个命令就把光标移动到与本行相邻的行上。 绝大多数命令把数字参数当作重复次数,但也有几个例外。C-v和M-v就是。当给出一个参数,只是上滚或下滚数字指定的行数而不是屏数。比如,C-u4C-v滚动4行屏幕。 >>现在试试C-u8C-v。

这将使屏幕滚动8行,如果你想往回滚动的话,键入一个带参数的M-v。

如果你正在使用X窗口,在Emacs窗口的左手边有一个叫做滚动条的矩形区域。你能通过用鼠标点击滚动条来滚动文本。

>>试着在滚动条顶部的高亮区域点击中键。这将使文本滚动,滚动的位置取决于你点击的长短。

>>试着按住鼠标中键上移或下移鼠标,你将看到当你移动鼠标时文本会上下滚动。

*当EMACS挂起时(WHEN EMACS IS HUNG)

当Emacs停止响应你的命令时,你能用C-g把它安全的停止。当一个命令执行了太长的时间时你可以用C-g把它终止。

你也可以用C-g来取消数字参数和输入后又不想执行的命令。

>>键入C-u100产生一个值为100的数字参数,然后按C-g。再按C-f。它只会移动一个字符,因为你用C-g取消了参数。如果错误地输入了一个,你能用C-g消掉它。

*禁止命令(DISABLED COMMAND)

一些Emacs命令是“禁止”的,所以新手不会因偶然而执行它。

如果你键入了一个禁止命令,Emacs会显示一条消息说明这条命令是干什么的,并且问你是否需要执行它。

如果你真的想要执行,敲空格键继续。通常,如果你不想执行禁止命令,用“n”来回答。 >>输入一条禁止命令),然后用n来回答。

*窗口(WINDOWS)

Emacs能有好几个窗口,每一个显示自己的文本。我们将在后面解释怎样对多窗口操作。现在我们要解释怎?コ嘤嗟拇翱谄粱氐交镜牡ゴ翱诒嗉刺U馐且桓隼樱? C-x1一个窗口(也就是除去其他所有的窗口)。

因为Control-x跟了数字1。C-x1使包含光标的窗口占满整个屏幕,屏删除其他所有窗口。 >>把光标移动本行并输入C-u0C-l。

>>键入Control-hkControl-f。看这个窗口如何缩小,并在按Control-f的时候出现了一个新的文档窗口。

>>键入C-x1并且看到那个文档窗口消失了。

*插入和删除(INSERTING AND DELETING)

如果你要插入文本,只须输入文本。输入的字符你能见到,比如A,7,*等等。Emacs会立即把它们插入。键入(回车键)插入一个换行符。

你能用删除你输入的最后一个字符。就是键盘上标着“Del”的键。 在某些情况下,“Backspace”键作用和一样,但不总是这样! 通常,立即删除光标前面的那个字符。

>>输入几个字符,然后用删除它们。不必担心这个文件回被改变;你不会替换主教程。这只是你的个人拷贝。

当一行文本太长而超过屏幕宽度时,这一行会在屏幕的下一行被“继续”。文本的右边会有一个反斜杠“\\”表示它被继续。

>>插入文本直到最右边,然后再插入。你将看到一个继续了的行。 >>使用删除文本直到行的长度在屏幕的宽度以内。继续的行将会消失。

你能像删除其他任何字符一样删除换行符。删除两个行间的换行符会使它们合并为一行。如果这一行很长屏幕显示不下的话,将会用一个继续的行来表示。 >>把光标移动到一行的开头按这将使本行和上一行合为一行。

>>按重新插入你删除的换行符。

记住大多数的Emacs命令能接收一个重复次数。这包括文本字符,把一个文本字符重复地插入几次。

>>键入这个--C-u8*来插入********

你现在已经学习了Emacs的大多数输入和排错的方法。你也能一样的删除单词或行。这是删除操作的摘要:删除光标前面的字符 C-d删除光标后面的字符 M-除去光标前面的单词 M-d除去光标后面的单词

C-k除去从光标位置到行尾的内容 M-k除去到当前句子的末尾

注意比较,C-d与M,M-d和C-f,M-f(不是一个控制字符,但不用担心)。C-k和M-k就象C-e,M-e。

当你一次除去不止一个字符时,Emacs将保存着这些文本,所以你可以恢复它们。恢复那些被除去的文本称作“拉(yanking)”。你能在除去文本的同一地方拉回它们,或是在文本的其他地方。你能对文本拉上几次以产生它们的多个拷贝,拉的命令是C-y。

注意“除去(killing)”与“删除(Deleting)”之间的区别,被除去的东西能被拉回来,而被删除的不能。通常除去能除去很多的文本屏保存,而删除只能除去一个字符,或是空行或空格,并且不保存。

>>把光标移到一个空行的开头,键入C-k除去这一行。 >>按第二次C-k,你将看到剩下的空行也被除去了。

注意单个的C-k除去行的内容,第二个C-k除去行本身,并且使后面的所有行上移。特别要注意数字参数:它除去很多行和它们的内容,这不仅仅是重复。C-u2C-k除去两行和它们剩下的空行;而按两次C-k并不会这样做。 要在当前光标处找回上次被除去的文本;按C-y >>试一试,用C-y把文本拉回来。

把C-y考虑为你把某人从你这里拿走的东西再拿回来。注意你如果在一行上按了几次C-y,所有被除去的文本是存在一起的,所以按一次C-y将拉回全部的行。

>>现在就试一下,按几次C-k。现在找回被除去的文本;

>>按C-y。然后把光标下移几行再按一次C-y,你现在会看到怎样拷贝这些文本。 当你要拉回一些被除去的文本该怎样做呢?C-y只能拉回最近被除去的文本。但以前的文本并没有消失。你能用M-y来恢复它。当你用C-y拉回最近被除去的文本后,换成M-y可以拉回以前被除去的文本。键入一次又一次的M-y可以拉回更早以前被除去的文本。

当你找到要寻找的文本,不必做任何事来保持它,只须离开拉文本的地方继续你的编辑。 如果你M-y了足够多的次数,你会回到开始点(最近被除去的)。

>>除掉一行,移开,再除掉另一行。然后用C-y拉回第二行。然后换成M-y拉回被除掉的第一行。再按一次M-y看看得到了什么。继续按直到拉回被除去的第二行;然后再做几次。如果原意的话,你可以给M-y加正的或负的数字参数。

*撤销(UNDO)

如果你对文本作了一些改动,然后又发现这样做是错误的,你能用撤销命令,C-xu撤销这些改变。

通常,一次C-xu撤销一个改变;如果你在一行上重复几次C-xu,就会重复几次撤销操作。 但有两个例外:不改变文本的操作(包括光标移动和滚屏命令)不算在内;只能处理20次。 >>用C-k除去这一行,然后按C-xu它将重现出来。

C-_是一个可选择的撤销命令;它所作的工作和C-xu完全一样,只是更容易输入。C-_的缺点是有些键盘上没有它,这就是为什么还提供C-xu的原因。在某些终端上你可以按住CTRL的时候再敲/来输入C-_。C-_或C-xu把数参数字当作重复次数。

*文件(FILES)

为了永久保存你编辑的文本,你必须把它放到一个文件里。否则当你退出Emacs的时候它就会消失。你通过“查找(finding)”文件,把你编辑的内容放到文件里。(也称为“访问(visiting)文件”)。

(译注:为了保持与原文的一致性,把find译为“查找”,但是这里和后面出现的“查找文件”指的都是打开文件的意思。)

查找(finding)一个文件意味着你在Emacs里看文件的内容,在多数情况下,也就是你在编辑它。但是,你用Emacs对它作的改变并不是永久行的,除非你“保存(saving)”它。所以你可以避免把一个改了一半的文件留在系统上。甚至你保存了文件,Emacs也会把原始文件换个名字保留下来,以防过后你发现对文件的改动是错误的。

如果你观察屏幕的你将看见一个开始和结尾都是破折号的行,并且以“--:**--TUTORIAL”或之类的东西开始。屏幕的这部分通常显示你正在访问的文件的名字。现在,一个叫做“TUTORAL”的文件,它是你的Emacs教程的个人拷贝。当你用Emacs查找一个文件,文件名会出现在同样的位置。

查找和保存文件命令不像前面学的那些命令。它们都以字符Control-x开始。以Control-x起头的是一个完整的命令系列;它们中的许多都是对文件,缓冲,和相关的东西进行操作的。这些命令有两个,三个或四个字符长。

关于查找文件命令的另一件事是你必须给出你需要的文件的文件名。我们说这个命令“从终端读取一个参数”。(在这种情况下,参数是文件的名字);当你键入命令C-xC-f后,Emacs会提示你输入文件的名字。你输入的文件名会出现在屏幕底部的行上。这个底部的行称为微型缓冲(minibuffer)用于这类较短的输入。你能用Emacs本身的编辑命令来编辑文件名。 当你正在输入文件名(或其他任何微型缓冲区输入),你能用命令C-g来取消。

>>键入命令C-xC-f,然后输入C-g。这将取消微型缓冲,也取消了C-xC-f命令所使用的微型缓冲,所以你不查找任何文件。

当你输完文件名后用来结束。然后C-xC-f开始工作,并开始寻找你所选择的文件。当C-xC-f命令结束后微型缓冲区也消失了。

过一小会儿文件的内容就会显示在屏幕上,然后你就能对它进行编辑了。当想永久保留你的改动时用命令:C-xC-s保存文件(save the file)。

这个操作会把Emacs里的文本拷贝到文件里。在你第一次作的时候,Emacs把原始文件改为一个新名字以使它不至于丢失。新名字是在原来名字的后面加一个“~”。

保存结束后,Emacs打印出被写的文件的文件名。你应当经常的保存,万一系统崩溃的话你不至于丢失太多的工作。

>>键入C-xC-s来保存你的教程的拷贝。屏幕的底部会打印出“Wrote.....TUTORIAL”。 注意:在某些系统上,输入C-xC-s会把屏幕冻结住使你从Emacs看不到更多的输出。这表示这个操作系统的“特性”叫做“控制流程”,它拦截了C-x不让它到达Emacs那里。 要使屏幕解冻,输入C-q,然后看Emacs手册里的“Spontaneous Entry to Incremental Search”一节,按上面的建议来对付这种“特性”。

你能查找一个已存在的文件,来查看它或编辑它。你也可以查找一个尚未存在的文件。 这是Emacs:里创建文件的方法:查找文件,将会出现一个空白,然后插入文件的文本。当你“保存(saving)”的时候,Emacs将会用你插入的文本创建文件。从那时候起,你可以认为你在编辑一个存在的文件了。

*(缓冲)BUFFERS

如果你用C-xC-f查找第二个文件,第一个文件仍然留在Emacs里。你可以再用C-xC-f查找一次来切换回去。用这种方法你在Emacs里有很多文件。

>>输入C-xC-ffoo来建立一个名为foo的文件。然后插入一些文本,编辑它,并用C-xC-s来保存“foo”。最后输入C-xC-fTUTORIAL以回到本教程。

Emacs把每个文件的文本都保存在一个叫“缓冲(buffer)”的东西里。查找(打开)一个文件就会在Emacs里产生一个新的缓冲。要看你当前运行的Emacs里存在的缓冲列表,输入: C-xC-b列出缓冲(listbuffers) >>输入C-xC-b

观察每个缓冲都有一个名字,它可能也有一个它所保存的文件的文件名。一些缓冲不对应文件。比如,叫“*BuffersList*”的缓冲没有任何文件。这个缓冲只包含由C-xC-b产生的缓冲列表。你在Emacs窗口里看到的任何文本都是某个缓冲的一部分。 >>输入C-x1消除缓冲列表。

如果你对一个文件的文本作了改动,然后查找另一个文件,第一个文件并不保存。它的改变保存在Emacs里,在那个文件的缓冲里。被建立或编辑的第二个文件的缓冲并不影响第一个的。这一点很有用,但这也意味着要有一个便捷的方法来保存第一个文件的缓冲。如果要用C-xC-f切换回去只是为了按C-xC-s保存它将会是一件令人讨厌的事。所以我们用C-xs保存缓冲(save the buffer)

C-xs向你询问每个改动过但未存盘的缓冲,对每个这样的缓冲都询问是否保存。 >>插入一行文本,然后按C-xs。将会问你是否保存叫TUTORIAL的缓冲。输入“y”来回答是。

*扩展命令集(EXTENDING THE COMMAND SET)

有太多的Emacs命令,大大超过了Contorl和meta加上字符所能表示的数量。Emacs用X(扩展eXtand)命令来解决这个问题。有两种风格: C-x字符扩展,后跟一个字符。 M-x名字命令扩展,后跟一个长名字。

这些命令通常有用,但不如你已经学过的那些命令使用的频繁。你已经见过了它们中的两个:文件命令C-xC-f用于查找和C-xC-s用于保存。

另一个例子是结束Emacs的命令C-xC-c(不必担心你所作的改动会丢失,在退出Emacs之前,C-xC-c会提示你保存每一个改动过的文件)。

C-z命令用于*临时*退出Emacs,所以你能回到原来运行的Emacs里。在允许这样做的系统上,C-z把Emacs“挂起”;就是说回到外壳(shell)下,但并不破坏运行的Emacs。在大多数外壳上,你能用‘fg’命令或‘%emacs’来继续Emacs。

在不支持挂起的系统上,C-z建立一个子外壳(subshell)运行于Emacs下以使你能运行其他程序然后回到Emacs;这并不是真正的“退出”Emacs。在这种情况下,通常从子外壳回到Emacs的外壳命令是‘exit’。有很多C-x命令,这是已学过的一个列表: C-xC-f查找文件 C-xC-s保存文件 C-xC-b缓冲列表 C-xC-c退出Emacs C-xu撤销操作

被称作扩展命令的命令的使用频率都不太高。或者是只在某些模式下使用。一个例子是替换字符串的命令,它在全文里把字符串替换为其他的。当你键入M-x,Emacs会在屏幕的底部提示你输入命令;在这种情况下,是“replace-string”。比如输入“repls”,Emacs会把命令补全。用来结束命令。

替换字符串命令要求两个参数--要被替换的字符串和用来替换的字符串。你必须用urn>来结束两个参数。

>>把光标移上两行,然后输入M-xreplschangedalteredturn>。注意现在这一行改变了:你把光标初始位置后的所有单词c-h-a-n-g-e-d替换为了“altered”

*自动保存(AUTOSAVE)

当你改动了一个文件还未存盘的话,所作的改动也许会由于系统崩溃而丢失。为防止这种情况发生,Emacs在编辑时为每个文件提供了“自动保存(autosave)”。自动保存的文件的文件名前后都有一个#号;例如,如果你编辑的文件名叫“hello.c”,自动保存的文件的文件名就叫“#hello.c#”。当你正常的保存了文件后,Emacs会删除这个自动保存的文件。如果遇到死机,你能打开那个文件后按M-xrecoverfile来恢复你的编辑,(是你编辑的文件而不是自动保存的文件)。当提示确认时,输入yes n>来继续恢复自动保存的数据。

*回显区域(ECHO AREA)

如果Emacs发现你输入命令的速度很慢的话它会在屏幕底部为你显示出来,这个区域叫“回显区域”。

*模式行(MODE LINE)

回显区域上面的一行称为“模式行(mode line)”。模式行显示与下面类似的东西:

--**-Emacs:TUTORIAL(Fundamental)--L670--58%---------------- 这一行给出了有关你在编辑的文件和Emacs状态的有用信息。

你已经知道了文件名意味着什么。--NN%--指出你现在在文本里的位置;它意味着上面还有NN%的文本。如果是在文件的开头,会用--Top--来代替--0%--。如果是在行的末尾,会显示--Bot--。如果你正在看的文本内容很少,可以全部显示在屏幕上,模式行会说--All--。 前面的星号表示你已经改动过文本了。一旦你保存了文件或打开了一个新文件,模式行的这部分就不是星号而是破折号了。

模式行上括号里的部分是现在的编辑模式。现在是缺省的基本(Fundamental)模式。它是“主模式(major mode)”的一种。

Emacs有很多不同的主模式。有些意味着不同的语言或不同的文本。如Lisp模式(Lisp mode),文本模式(text mode)等等。在任何时候有且只能有一种主模式被激活。并且它的名字会出现在现在显示“Fundamental”的位置上。

每一个主模式都有些自己的命令。就象不同的编程语言的注释看起来不同一样。每种主模式插入的注释也不同。可以用扩展命令切换进某种主模式。例如,M-x fundamental -mode是切换进基本模式。 >>输入M-xtext-mode

不必担心,没有命令会给Emacs带来很大改变。但是你可以看到现在M-f和M-b把省略号当作单词的一部分。而先前,在基本模式里,M-f和M-b把省略号当成当成分隔符。 主模式通常作诸如此类微小的变化:大多数命令在每个主模式里作“同样的工作”,但又有些微小的不同。

要观看关于你现在的主模式的文档,按C-hm。 >>键入C-uC-v一次和多次使本行接近屏幕的顶端。 >>输入C-hm,看看文本模式和基本模式有些什么不同。 >>按C-x1从屏幕上关掉这个文档。

主模式之所以叫做主模式是因为也存在从模式,从模式与主模式完全不同。每个从模式可以自己打开或者关闭,独立于所有其他从模式,也独立于你的主模式。所以你可以不用从模式或者同时用很多种从模式。

有一种从模式很有用,特别是在编辑英文文本时。它是自动填充模式(auto fill mode)。当这个模式打开的时候,当输入的文本过宽的时候就会自动折行。

你能用M-x auto-fill-mode来打开自动填充模式。如果此模式已经打开M-xauto-fill-mode则把它关闭。我们把这叫做切换开关。

>>输入M-xauto-fill-mode。然后插入一些“asdf”直到看到这行被分为两行。你必须在中间放一些空格,只有到空格的时候才会换行。

通常边界宽度是70,但你能用带数字参数的C-xf命令来改变它。

>>键入带参数20的C-x。(C-u20C-xf)然后输入一些文本看现在每行只有20个字符了。然后用C-xf把它改回70。

如果你在一个段落的中间产生了改变,自动填充模式将不会重新填充。要想重新填充段落,当光标在段落里的时候按M-q。 >>把光标移到上一段按M-q。

*搜索(SEARCHING)

Emacs能朝前和朝后搜索字符串(指相邻的一些字符或单词)。搜索是一个移动光标的操作,它把光标移动到字符串出现的下一个地方。

Emacs的搜索命令和其他大多数编辑器不同,它是“增量式(incremental)”的,这意味着搜索在你键入字符串时就开始了。

开始一个向前搜索的命令是C-s,C-r是往回搜索。但等等,先别忙。

当你输入C-s是你将注意到在回显区域会出现一个字符串“I-search”。这告诉你Emacs开始了一个增量搜索,并在等待你输入要搜索的东西。结束查询。

>>现在键入C-s开始一个搜索。慢慢的输入单词‘cousor’,在输入每一个字母的时候停顿一下,注意看光标发生了什么。

>>再输入一次C-s,来搜索“cursor”出现的下一个地方。 >>现在输入四次看看光标移到了哪里。 >>输入结束搜索。

看到发生什么了吗?在Emacs的增量搜索里,你输入多少字符串它就试着搜索这些字符出现的地方。到字符串出现的下一个地方,只须再按一次C-s。要搜索的字符串不存在的话,Emacs会发出蜂鸣并告诉你当前的搜索“失败(failing)”,按C-g也是终止搜索。

注意:在某些系统上,输入C-s会把屏幕冻结住使你从Emacs看不到更多的输出。这表示这个操作系统的“特性”叫做“控制流程”,它拦截了C-s不让它?酱顴macs那里。要使屏幕解冻,输入C-q,然后看Emacs手册里的“Spontaneous Entry to Incremental Search”一节,按上面的建议来对付这种“特性”。

如果你在搜索的过程里按了,你将注意到要搜索的字符串的最后一个字符会被删除并且光标会回到上一个被搜索到的地方。比如,假设你键入了“c”,将会搜索“c”第一次出现的地方。然后如果你键入“u”,光标将移到“cu”第一次出现的地方。现在键入。这将从搜索的字符串里把“u”删掉,这时光标回到“c”第一次出现的地方。

如果你在搜索时按了Control或meta键加字符(少数几个少数命令例外,如C-s和C-r),搜索将被终止。

C-s向当前光标的后面搜索字符串出现的地方。如果你需要搜索前面文本里的东西,用C-r来代替。我们所介绍的C-s的每个特性C-r也支持,除了方向相反。

*多窗口(MULTIPLE WINDOWS)

Emacs有一个非常好的特性是能同时在屏幕上显示不止一个的窗口。 >>把光标移到本行上按C-u0C-l。

>>现在按C-x2,它把屏幕分裂成两个窗口,每个窗口都显示本教程。光标在上面的窗口里。 >>按C-M-v滚动到下面的窗口里。(如果你没有一个真正的Meta键,那么按ESCC-v) >>按C-xo(“o”指“其他(other)”)把光标移到到下面的窗口里。 >>用C-v和M-v滚动下面窗口里的文本。在上面的窗口里看本教程。

>>再次按C-xo使光标回到上面的窗口里。现在光标象以前一样在上面的窗口里了。 你能一直用C-xo在窗口间切换。每个窗口都有它自己的光标位置,但仅有一个窗口能显示活动的光标。所有的编辑命令都发生在那个显示光标的窗口上。我们把这个窗口叫做“选中窗口(selected window)”。

当你在一个窗口里编辑文本,而用另一个窗口作参考时命令C-M-v非常有用。你总是能把光标留在所编辑的地方,而用C-M-v来翻阅另一窗口。

C-M-v是CONTROL-META加字符的一个例子。如果你有一个真正的META键,你能同时按住CTRL和META再按“v”来输入C-M-v。CTRL和META谁先按谁后按无所谓。

如果你没有一个真正的META键,你可以用ESC来代替。这时候次序是有关系的:你必须让ESC跟在CTRL-v后面;否则CTRL-ESCv将不工作。这是因为ESC是一个有意义的字符而不是一个修饰字符。

>>输入C-x1(在上面的窗口里)以消除下面的窗口。

(如果你在下面的窗口里键入C-x1,将会把上面的窗口去掉。可以把这个命令看作是“只保留你现在在的那个窗口。)

你不必一定要在两个窗口里显示同样的缓冲。如果你在一个窗口里键入C-xC-f查找文件,另一个窗口的内容不会改变。你能独立的在每个窗口里查找文件。 这是让两个窗口显示不同内容的另一种方法:

>>在你输入的文件名后再输入C-x4C-f,然后用结束。会看到指定的文件出现在下面的窗口里。光标也在那里面。

>>键入C-xo回到上面的窗口,然后输入C-x1删掉下面的窗口。

*递归编辑层(RECURSIVE EDITING LEVELS)

有时候你会进入“递归编辑层(recursive editing level)”。由模式行上的方括号指示。它在主模式名的括号外面。例如你也许会看到(Fundamental)变成了[(Fundamental)]。 要退出递归编辑层,按ESCESCESC。这是一个通用的退出命令,你也可以用它除去额外的窗口,或者退出微型缓冲。

>>输入M-x进入一个微型缓冲;然后用ESCESCESC离开。

你不能用C-g来退出递归编辑层。这是因为C-g只能取消在递归编辑层里面的命令。

*获取更多的帮助(GETTING MORE HELP)

在本教程里我们试着为你开始使用Emacs提供了足够多的信息。但是有关Emacs的信息实在是太多以至于不能全部都在这里说明。但是,你还应该学习更多有关Emacs的东西,因为它另外还有很多有用的特性。Emacs提供了很多读取有关命令的文档的命令。这些“帮助”命令都以Control-h开头,叫做“帮助字符”。

为了使用帮助特性,输入字符C-h,然后再输入一个字符来说明你需要哪种帮助。如果你真的不知道,输入C-h?然后Emacs会告诉你它能给你什么样的帮助。如果你输入了C-h又觉得不需要任何帮助,你可以用C-g来取消它。

(在有的地方,C-h的作用被改变了。如果按C-h在屏幕的底部没有出现有关帮助的信息的话,试试用F1和M-xhelpRET来代替。) 最基本的帮助特性是C-hc。输入C-h,然后是字符c,然后输入一个命令字符和序列; 然后Emacs会显示这个命令的简洁的描述。 >>输入C-hcControl-p. 显示的消息看起来会象这样:

C-p runs the command previous-line

这告诉你“功能的名字”。功能的名字主要用于对Emacs的功能扩充和定制。但因为功能的名字指出了命令的用途,所以最好不要改动它。

C-hc后面可跟多字符命令,比如C-xC-s和(如果你没有META或者EDIT或者ALT键)v。 要获取有关命令的更多信息,用C-hk代替C-hc。 >>输入C-hkControl-p.

这将在一个Emacs窗口里显示命令的文档。当你读完后可以用C-x1除去帮助文本。如果不想马上离开,你可以一边编辑一边参考帮助文本,然后再按C-x1。 这是一些有用的C-h选项:

C-hf描述一个功能,在你输入了这个功能的名字后。

>>输入C-hfprevious-line。将打印出C-p命令所实现的所有功能。

C-ha命令查找。输入一个关键字,Emacs将列出所有名字里有这个关键字的命令。包括所有以Meta-x开始的命令。对有些命令,C-ha也将列出实现同一功能的几个命令序列。 >>输入C-hafile.

这将在窗口里显示所有名字里有单词“file”的M-x命令。 >>输入C-M-v来滚动帮助窗口,做上几次。 >>输入C-x1来删除帮助窗口。

*总结(CONCLUSION)

记住,永远都用C-xC-c来退出Emacs。用C-z来退到一个临时的外壳里,以使你过后还能回到Emacs。

Emacs上的info帮助

前已略述 info 的使用法,现在就更进一步详述之。在 EMACS的线上辅助说明功能中,info 的内容可说是最为丰富的。因为,任何线上辅助说明的文件都可在 info 模式中找到。因为,info就是用来放置整个 EMACS 手册。

info 对於 EMACS 文件的安排是采取树状的结构,所以是以根部(root)为出发点。info 执行 info program,使用 info program 的方法有二: * Ctrl-h i

* ESC-x info

info 对於档案的编排,是以 Hypertext 的方法来处理所有的相关文件。当键入 ``Ctrl-h i'' 或 ``ESC-x info'' 後,会先进入 info树状(tree)结构的最顶端。如下就是进入 info 时的第一个画面:

-*- Text -*-

This is the file .../info/dir, which contains the topmost node of the Info hierarchy. The first time you invoke Info you start off looking at that node, which is (dir)Top.

File: dir Node: Top This is the top of the INFO tree This (the Directory node) gives a menu of major topics.

Typing \"d\" returns here, \"q\" exits, \"?\" lists all INFO commands, \"h\" gives a primer for first-timers, \"mTexinfo\" visits Texinfo topic, etc.

--- PLEASE ADD DOCUMENTATION TO THIS TREE. (See INFO topic first.) ---

* Menu: The list of major topics begins on the next line. * Info: (info). Documentation browsing system.

* Emacs: (emacs). The extensible self-documenting text editor. * VIP: (vip). A VI-emulation for Emacs. * Texinfo: (texi.info).

With one source file, make either a printed manual (through TeX) or an Info file

(through texinfo).

Full documentation in this menu item.

* Termcap: (termcap).

The termcap library, which enables application programs to handle all types of character-display terminals.

* Regex: (regex).

The GNU regular expression library. * Cpp: (cpp.info). C pre-processor.

* Gcc: (gcc.info).

GNU C Compiler --- an ANSI C Compiler developed by FSF. * Gzip: (gzip.info).

GNU zip program --- an compress package developed by FSF. * Ispell: (ispell.info). A spelling checker. * Libg++: (libg++.info).

G++ libraries.

* Gmake: (make.info).

A make utility developed by FSF. * Bison: (bison.info). GNU Yacc.

* Gawk: (gawk.info).

GNU awk --- pattern scanning and processing language. * Gdb: (gdb.info). GNU debugger.

* Info-stnd: (info-stnd.info). Stand along GNU info. * Makeinfo: (makeinfo.info).

Program for producing *.info file from *.texi file. * Graphics: (graphics.info).

A set programs for producing plot files and display them on Tektronix 4010, PostScript, and X window system compatible output devices.

* m4: (m4.info).

m4 is macro processor, in the sense that it copies its input to the output, expending macros as it goes. GNU m4 is mostly compatible with system V, Release 3 version.

* Hyperbole: (hypb.info).

GNU Emacs-based everyday information management system.

Use {C-h h d d} for a demo. Include Smart Key context-sensitive mouse or keyboard key support, a powerful rolodex, and extensible hypertext facilities including hyper-links in mail and news messages.

* Standards Coding Style:(standards.info).

GNU Coding Style.

此时,出现在萤幕的第一列是标头(header),它包含此结点(node)的基本讯息。表头所提供的讯息,最多可有五件事情: 1. 结点所在的档案(File) 2. 结点的名称(node)

3. 此结点的下一个结点(Next) 4. 此结点的上一个结点(Prev)

5. 此结点的上一层结点(up)

此时的画面,只显示了二件事情,是因为此画面为 info 树状结构 的最上层。 在表头之下的资讯,是用来告知如何用 info 。它提供了五件事情,现一一说明。

* h

不知如何使用 info 模式者,可在进入 info 模式後,使用 info 的线上 辅助说明。欲使用 info 的线上辅助说明,只要在进入 info 模式後,键入 ``h'' 即可。此不只是一个线上辅助说明,还是一个教学指引。跟随著它的说 明,即可明了如何使用 info 模式.

* d

``Ctrl-h i'' 指令,会先进入 info 树状结构的根部。任何情况下, 可键入 ``d'' 回到此根部。

* ?

想知所有与 info 有关的指令,只要键入 ``?'',就可以得知所有 指令的全貌。

* q

欲离开 info,只要键入 ``q'' ,就可以离开 info 而回到先前的缓冲区。 * m Texinfo< Return >

这一个指令是用来使用 info 的 Menu Item。使用的方法如下: 1. 键入 ``m'' 。

2. 键入所欲参考的文件名称,也可使用 completion 的功能来简化输入的工作。 3. 键入 RET。

何为 Menu Item 会再解释。 在这五个指令之下的是,此结点可以使用的 Menu Item。使用者可以直接至所要参考的 Menu 之下,键入 ``RET''。此时, info 会将此 Menu 的相关文件显示在萤幕上。

使用 info 除了以上的指令之外,还有几个必需知道的指令。 现介绍如下:

* n

将结点移至下一个与此结点相连的结点。 * p

将结点移至上一个与此结点相连的结点。 * u

将结点移至上一层的结点。 * m

以上结点间移动的指令,必需结点间有相连接的关系。

若想做跨越的移动,这几个指令是无法做到的。此时,必需透过Menu 来做夸越结点的文件阅读。

使用 Menu 的方式有二: o ``mTexinfo''

这种使用 menu 的方法,在进入 info 的第一个画面就可以看到了。此方法由三件事共同组成:

1. m

键入 m 是使用 menu 的指令。 2. Texinfo

键入 m 时,minibuffer 会出现menu item:

此时,可在其後输入所欲阅□的文件名称。所以,Texinfo 意指文件的名称。此时,就可以键入画面上以 ``*'' 为开头的名称。如果是刚进入 info ,可使用的 Texinfo 名称有: Info、 Emacs、 VIP、 Forms、 GNUS、 CL、 Gcc、 Cpp、Makeinfo、 Info-stnd、 Texi、 Hyperbole、 Octave

3. RET

待文件名称输入完毕後,要按下 RET ,以告知系统文件名称已经输入完成了,可以开始执行的动作了。

o 直接键入 ``RET''

如果在阅□某一个结点时,文件中出现以 ``* Menu:'' 为首的文字,就表示此列以下若有以 ``*'' 为开头的列,均为一个可以使用的 Menu Item 。此时,可以直接键入 ``RET'' 参考另一个结点的文件。

使用 Menu 有些条件,就是所要使用的 Menu,必需在此结点的文件中有明列出来的才可以使用。要使用其它结点的 Menu,必需先到有要使用的 Menu 的结点,才可以使用它的 Menu。

Menu 有其一定的结构。所有 Menu 的第一列,都是以 `` Menu:''为开端。如下所示:

* Menu: The list of major topics begins on the next line.

此列之後的所有列,只要以 `` *'' 为开始的列,就表示一个可以使用的 item。 Menu Item 的表示法如下所述:

* Info: (info). Documentation browsing system. 它主要由四个部份主成:

1. *

每一个 Menu Item 都是以 ``*'' 为开头。 2. Subtopic:

``*'' 之後就是 Subtopic 的名称,再加上一个 ``:''。

info 就是根据此 Subtopic 找到所对应的结点名。此例子的Subtopic 的名称就是 ``Info''。 如果要以指令 ``m'' 的方式,使用Menu Item 所要给予的 Texinfo 的名称就是此 Subtopic的名称。

3. node name

在 Subtopic : 之後就是所使用的结点名。一般为了使用上的方便,会尽可能的使用相同的 Subtopic 和结点的名称。若二者的名字相同时,在Subtopic 後的结点名会省略而以两个 ``:''表示之。如 ``* Info::''。

4. node description

结点後面的内容是选择性,它主要是用来概略描述此结点。 * l

如果想要回到前一个(last)所参考过的结点,可以使用指令 l一步一步的往回走。

* b

指令 b 可以使游标移至文件的最前端。

* SPC

若文件太长可键入空白键( SPC)来卷动萤幕。 * Ctrl-g

任何时候想要取消所键入的指令,可键入 Ctrl-g

在Emacs下用C/C++编程

版权说明和参考文献

按照惯例,我写的文章在最开始处放版权说明和参考文献。

参考文献:

  

hhuu @ newsmth 的《Emacs的日常生活》 emacs 的文档

emacs 相关插件的文档

版权说明:

转载请注明转自曹乐的个人主页 www.caole.net,请保证全文转载,尤其不可省略这一部分。

用emacs写程序也有5个年头了,深切地体会到Emacs的强大。程序员有三种,一种是用vi的,一种是用emacs的,还有一种是其他。或许有些夸张,但也颇能体现出emacs在程序员中的地位。

emacs最大的问题在于入门门槛较高。它看起来和多数人想象中的IDE相差甚远,很多人看到emacs的第一眼就觉得它是个记事本(还是个非常难用的记事本),稍微好些的往往觉得emacs也就是个ultraEditor而已,真是暴殄天物了。

我是个懒人,不喜欢记太多的快捷键,相信很多人和我一样。所以从我后面的叙述可以看出来,除了常用的命令都是快捷键外,其他命令多数都是用M-x执行或者用鼠标点菜单。这仅仅是个人风格问题,先说明一下。 我的基本编程环境是:

   

Debian GNU/Linux sid 操作系统 Gnome 2.10.0 桌面环境 GUN Emacs 23.0.0.1 for debian

使用 Gnu tool chains(gcc,make,gdb等等)

后面的叙述都基于上述环境。另外,本文主要针对C/C++程序开发,对其他语言有些也适用,从难度上说,本文主要针对入门者。 本文肯定会有很多错误,请指正,谢谢。

基本流程

写C++程序基本上是这么几个步骤:

1. 编辑代码 2. 编写Makefile

3. 编译代码,修改编译错误 4. 调试代码,修改逻辑错误 当然,往往还需要阅读别人的代码。

根据上述步骤,本文主要针对以下几个方面:

   

配置Emacs,建立便利的代码编辑环境和Makefile编写环境。 在Emacs中编译代码,并修改编译错误。 在Emacs中配合GDB调试程序。

利用cscope和ecb在emacs中阅读代码。

基本环境设置 编辑环境配置

要写C++程序,当然要用到cc-mode插件。CC-Mode原本是支持C语言的,但现在也能支持很多语言,比如 C++,Java,Objective-C,CORBA,AWK,Pike等等。CC-Mode是gnu-emacs的标准插件。如果您要求不高,那么默认的配置或许就能满足。CC-Mode的各种行为都可以自由地定制,您可以参考这里的文档:CC-Mode参考文档 这里是我的.emacs文件中关于CC-Mode配置的部分,仅供参考:

;;;; CC-mode配置 http://cc-mode.sourceforge.net/ (require 'cc-mode)

(c-set-offset 'inline-open 0)

(c-set-offset 'friend '-)

(c-set-offset 'substatement-open 0) ;;;;我的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 [(f7)] 'compile)

(define-key c-mode-base-map [(meta \\`)] 'c-indent-command) ;; (define-key c-mode-base-map [(tab)] 'hippie-expand) (define-key c-mode-base-map [(tab)] 'my-indent-or-complete) (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) )

(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) )

自动补齐

自动补齐通常用的都是hippie-expand,我也用了很长时间。不过有时候会觉得这个自动补齐“傻”了一点,常会补齐出一些毫不相干的东西,因为hippie-expand是根据你敲过的词和kill-ring等进行判断的,并不对程序语法进行分析。

所以你还需要安装一个代码分析工具,然后把它加进hippie-expand的扩展策略里去。我们可以用semantic。实际上,hippie-expand+semantic是我所发现的最好的选择了,如果您有更好的,请您也告诉我一声:)

Semantic是CEDET中的一个工具,CEDET是Collection of Emacs Development Environment Tools的缩写,它包含了好几个工具,都挺不错的。可惜我只会用其中两个。 您可以在.emacs中对Semantic进行配置,下面是我的.emacs相关的配置,仅供参考: 导入cedet:

(load-file \"~/lib/emacs-lisp/cedet-1.0pre3/common/cedet.el\")

配置Semantic的检索范围:

(setq semanticdb-project-roots

(list

(expand-file-name \"/\")))

自定义自动补齐命令,这部分是抄hhuu的,如果在单词中间就补齐,否则就是tab。

(defun my-indent-or-complete () (interactive)

(if (looking-at \"\\\\>\") )

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

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

(hippie-expand nil) (indent-for-tab-command))

(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 ) )

注意一下我前面CC-Mode配置中有这么两行:

(define-key c-mode-base-map [(tab)] 'my-indent-or-complete) (define-key c-mode-base-map [(meta ?/)] 'semantic-ia-complete-symbol-menu)

这样,我们在CC-Mode中就可以调用自定义的hippie补全了,快捷键是Tab。 另外,我还把快捷键“Alt + / ”绑定到了semantic-ia-complete-symbol-menu命令上,这是semantic的命令,它会根据分析结果弹出补齐的菜单,效果如图显示:

CEDET中还有一个不错的工具是speedbar,你可以用它在多个文件中快速切换。在我的.emacs配置文件里,我把speedbar关联到了F5上:

(global-set-key [(f5)] 'speedbar)

这样用F5就可以调出speedbar,效果如下:

不过说实话,我自己很少用到speedbar,我通常都是用dired配合bookmark使用:)

编译和调试程序

按上面的配置,写完程序和Makefile文件后,在Emacs源代码窗口中按F7就可以进行编译。因为在my-c-mode-common-hook()函数里,有这么一行:

(define-key c-mode-base-map [(f7)] 'compile)

默认情况下,emacs的compile命令是调用make -k,我把它改成了make。你也可以把它改成其他的,比如gcc之类的。改下面的“make”就行了。

'(compile-command \"make\")

Emacs会划分一个窗格显示编译的消息,在编译结束后,emacs会自动将编译器的输出和程序关联起来,告诉你第几行的程序有问题。直接在出错的行号上按Enter,就可以跳转到相应文件的相应行。其实我通常都是用鼠标中键去点出错行号:)

搞定了编译错误后,接着要和逻辑错误斗争了。其实对简单的程序来说,把中间结果打印到终端是最简单好用的调试办法:)不过稍微复杂点的程序就会晕菜了,这时我们就需要拿gdb跟踪程序流程了。

你用下面的命令就可以启动gdb了。

M-x gdb

通常我喜欢进入gdb-many-windows模式,这样就会把一个Frame划分为5个窗格,同时显示:gdb命令窗口,当前局部变量,程序文本,调用栈和断点。

gdb的命令就不在这里说了,它的文档几乎到处都是。emacs把gdb的命令和快捷键做了绑定,对于常用的命令,还是输入快捷键比较方便。比如,C-c C-n是Next line,C-c C-s是step in,其实用的最多的快捷键也就是这两个。 下面是我的gdb效果图:

阅读代码

在emacs下读代码通常有三种工具,最简单的是etags,最复杂的是ecb(emacs code browser),位于中间的是cscope。

etags和ctags一样,只不过前者是用于emacs的,后者是用于vi的。我个人觉得etags功能稍稍显得不够用一点,当然,也可能是我用的不好:) 欢迎大牛指导。

使用tags之前要先对源代码分析建立tags文件,在代码所在目录中运行:etags -R 即可。 我常用的就这几个命令和快捷键:

M-x visit-tags-table FILE 选择tags文件 M-. [TAG] 访问标签 M-* 返回

C-u M-. 寻找标签的下一个定义

ecb据说功能强大,但是太复杂了,我懒得折腾它。谁搞定了教教我吧:) 下面是一张ecb的效果图。

cscope是我感觉比较合适的一个工具。它其实是一个独立的软件,完全可以脱离vi和emacs使用。但是结合emacs的强大功能,cscope就显得更加方便了。GNU Emacs默认自带cscope的支持。在使用之前,cscope也需要对代码进行索引。在emacs中可以这样做:

C-c s a 设定初始化的目录,一般是你代码的根目录 C-s s I 对目录中的相关文件建立列表并进行索引

建完索引之后,你就可以用cscope在代码里游荡了。常用的一些命令如下:

C-c s s 序找符号 C-c s g 寻找全局的定义

C-c s c 看看指定函数被哪些函数所调用 C-c s C 看看指定函数调用了哪些函数 C-c s e 寻找正则表达式 C-c s f 寻找文件

C-c s i 看看指定的文件被哪些文件include

上面这些快捷键其实我自己也常常记不全,没关系,抬头看看上面的菜单栏,有一栏就是Cscope,这些命令里头都有:) 贴一个cscope的效果图吧:

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- haog.cn 版权所有

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务