<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>益友网 &#187; Linux桌面应用</title>
	<atom:link href="http://www.1uu2.com/archives/category/linuxzhuomian/feed" rel="self" type="application/rss+xml" />
	<link>http://www.1uu2.com</link>
	<description>Linux之友</description>
	<lastBuildDate>Sat, 07 Jan 2012 09:01:06 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2</generator>
		<item>
		<title>Linux桌面环境GNOME的操作技巧</title>
		<link>http://www.1uu2.com/archives/1132</link>
		<comments>http://www.1uu2.com/archives/1132#comments</comments>
		<pubDate>Mon, 09 Nov 2009 01:13:02 +0000</pubDate>
		<dc:creator>Linux之友</dc:creator>
				<category><![CDATA[Linux桌面应用]]></category>
		<category><![CDATA[Gnome]]></category>

		<guid isPermaLink="false">http://www.1uu2.com/?p=1132</guid>
		<description><![CDATA[GNOME是Linux平台上主流的集成桌面环境之一，GNOME桌面以其风格简洁、操作便捷而受到Linux用户的欢迎。下面撷取一些常见的GNOME桌面环境下的操作技巧，这些技巧给我们的操作带来极大便利的同时，也能让我们体验到开源的Linux桌面的强大之处。 窗口置顶　查看与录入两不误 同Windows系统类似，在打开多个窗口时，如果某一当前窗口最大化显示，则打开的其他窗口就看不到了。此时，即使切换到别的窗口，让别的窗 口在前台显示出来，但当在后一窗口中操作时，刚刚在前台显示的窗口就又会被遮住。而在GNOME桌面环境中，想要某一窗口一直在前台显示(即置顶显示)， 只需要在需要置顶的窗口标题栏上点击鼠标右键，在弹出的快捷菜单中选择“常居顶端”项即可，就不会被其他任何窗口遮挡。 这个贴心的小功能，可以解决我们平时工作中的一些特殊需求。例如当我们需要将某一窗口当中的信息作为参考，而另外的最大化的窗口作为主要操作界面的时候，就可以让参考窗口置顶，同时在后面的窗口录入(如图1所示)。 想要取消置顶也很简单，直接关闭或者在置顶窗口标题栏上点击鼠标右键，在弹出的快捷菜单中再次单击“常居顶端”项即可。 启动终端　加入鼠标右键菜单 GNOME终端程序(“gnome-terminal”)是最为常用的执行命令行的工具程序，该程序通常在菜单“应用程序→附件”下。显然，作为常用工具，如果每次启动都要点击“应用程序→附件”就太不方便了。 不用担心，我们可以将它加入鼠标右键菜单，这样任何时候需要启动GNOME终端，只需要点击鼠标右键就可以了。 默认情况下，在GNOME桌面空白区域，点击鼠标右键，在弹出的右键快捷菜单中是没有GNOME终端程序的菜单项的，为了添加这个菜单项，需要 我们手动安装一个名为“nautilus-open-terminal”的软件包。在Ubuntu系统的软件源中包含了该软件包，只要当前系统连接到互联 网，我们就可以使用“apt-get”命令来安装。 让我们最后一次点击菜单“应用程序→附件”并启动“终端”，输入如下命令： “sudo apt-get install nautilus-open-terminal” 命令运行后，将自动在线下载并安装该软件包，安装完毕后，从当前用户注销再重新登录Ubuntu系统，进入GNOME集成桌面环境后，在桌面的空白区域点击鼠标右键，此时在弹出的快捷菜单中就可以看到新增了一项“在终端中打开”(如图2所示)，方便多了吧? 快速注销　妙用组合键 目前，在Linux系统中还没有让登录用户可以从当前环境快速注销的命令，不过不用担心，使用键盘组合键 “Ctrl+Alt+BackSpace”就可以实现。此外，同Windows系统类似，在遇到桌面停止响应时，也可试着按下该组合键，它会“杀死”当前 的X进程(“/usr/X11R6/bin/X”，即图形化窗口的后台服务进程)，并回到Ubuntu系统登录界面，而无需重新启动电脑。这样，在登录成 功后，就又可以进行正常操作了。 来源：http://www.linuxeden.com]]></description>
			<content:encoded><![CDATA[<p>GNOME是Linux平台上主流的集成桌面环境之一，GNOME桌面以其风格简洁、操作便捷而受到Linux用户的欢迎。下面撷取一些常见的GNOME桌面环境下的操作技巧，这些技巧给我们的操作带来极大便利的同时，也能让我们体验到开源的Linux桌面的强大之处。 <span id="more-1132"></span></p>
<p>窗口置顶　查看与录入两不误</p>
<p>同Windows系统类似，在打开多个窗口时，如果某一当前窗口最大化显示，则打开的其他窗口就看不到了。此时，即使切换到别的窗口，让别的窗 口在前台显示出来，但当在后一窗口中操作时，刚刚在前台显示的窗口就又会被遮住。而在GNOME桌面环境中，想要某一窗口一直在前台显示(即置顶显示)， 只需要在需要置顶的窗口标题栏上点击鼠标右键，在弹出的快捷菜单中选择“常居顶端”项即可，就不会被其他任何窗口遮挡。</p>
<p>这个贴心的小功能，可以解决我们平时工作中的一些特殊需求。例如当我们需要将某一窗口当中的信息作为参考，而另外的最大化的窗口作为主要操作界面的时候，就可以让参考窗口置顶，同时在后面的窗口录入(如图1所示)。</p>
<p align="center"><img style="border-color: #000000;" src="http://www.linuxeden.com/upimg/allimg/091109/0ZS91213-0.jpg" border="1" alt="Ubuntu系统桌面环境GNOME的操作技巧" /></p>
<p>想要取消置顶也很简单，直接关闭或者在置顶窗口标题栏上点击鼠标右键，在弹出的快捷菜单中再次单击“常居顶端”项即可。</p>
<p>启动终端　加入鼠标右键菜单</p>
<p>GNOME终端程序(“gnome-terminal”)是最为常用的执行命令行的工具程序，该程序通常在菜单“应用程序→附件”下。显然，作为常用工具，如果每次启动都要点击“应用程序→附件”就太不方便了。</p>
<p>不用担心，我们可以将它加入鼠标右键菜单，这样任何时候需要启动GNOME终端，只需要点击鼠标右键就可以了。</p>
<p>默认情况下，在GNOME桌面空白区域，点击鼠标右键，在弹出的右键快捷菜单中是没有GNOME终端程序的菜单项的，为了添加这个菜单项，需要 我们手动安装一个名为“nautilus-open-terminal”的软件包。在Ubuntu系统的软件源中包含了该软件包，只要当前系统连接到互联 网，我们就可以使用“apt-get”命令来安装。</p>
<p>让我们最后一次点击菜单“应用程序→附件”并启动“终端”，输入如下命令：</p>
<p>“sudo apt-get install nautilus-open-terminal”</p>
<p>命令运行后，将自动在线下载并安装该软件包，安装完毕后，从当前用户注销再重新登录Ubuntu系统，进入GNOME集成桌面环境后，在桌面的空白区域点击鼠标右键，此时在弹出的快捷菜单中就可以看到新增了一项“在终端中打开”(如图2所示)，方便多了吧?</p>
<p align="center"><img style="border-color: #000000;" src="http://www.linuxeden.com/upimg/allimg/091109/0ZS93K8-1.jpg" border="1" alt="Ubuntu系统桌面环境GNOME的操作技巧" /></p>
<p>快速注销　妙用组合键</p>
<p>目前，在Linux系统中还没有让登录用户可以从当前环境快速注销的命令，不过不用担心，使用键盘组合键 “Ctrl+Alt+BackSpace”就可以实现。此外，同Windows系统类似，在遇到桌面停止响应时，也可试着按下该组合键，它会“杀死”当前 的X进程(“/usr/X11R6/bin/X”，即图形化窗口的后台服务进程)，并回到Ubuntu系统登录界面，而无需重新启动电脑。这样，在登录成 功后，就又可以进行正常操作了。</p>
<p>来源：http://www.linuxeden.com</p>
]]></content:encoded>
			<wfw:commentRss>http://www.1uu2.com/archives/1132/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Emacs 3: Advaced Editing</title>
		<link>http://www.1uu2.com/archives/1111</link>
		<comments>http://www.1uu2.com/archives/1111#comments</comments>
		<pubDate>Wed, 04 Nov 2009 15:24:28 +0000</pubDate>
		<dc:creator>Linux之友</dc:creator>
				<category><![CDATA[Linux桌面应用]]></category>
		<category><![CDATA[Advaced Editing]]></category>
		<category><![CDATA[Emacs]]></category>

		<guid isPermaLink="false">http://www.1uu2.com/?p=1111</guid>
		<description><![CDATA[表 1. 使用矩形区块的 Emacs 命令 键盘输入 功能 描述 C-space set-mark-command 标记矩形区块的一个角（光标标记其相对的角）。 C-x r k kill-rectangle 剪切当前的矩形区块，并将其保存在一个特殊的矩形区块缓冲区中。 C-x r d delete-rectangle 删除当前的矩形区块，并不为粘贴而保存它。 C-x r c clear-rectangle 清除当前的矩形区块，使用空白字符替换整个区域。 C-x r o open-rectangle 打开当前的矩形区块，使用空白字符填充整个区域，并将该矩形区块的所有文本移动到右边。 C-x r y yank-rectangle 在光标处，粘贴上一次剪切的矩形区块的内容，将所有的现有文本移动到右边。 表 2. 高级 Emacs 标记和选择命令 键盘输入 功能 描述 C-u C-space 移动到标记环中的前一个标记。 C-x C-x exchange-point-and-mark 交换光标和标记的位置。 M-@ mark-word 标记从光标到当前词尾的所有文本。 M-h [...]]]></description>
			<content:encoded><![CDATA[<p><strong><span style="color: #2970a6;">表 1. 使用矩形区块的 Emacs 命令</span></strong><br />
键盘输入<br />
功能<br />
描述<br />
C-space<br />
set-mark-command<br />
标记矩形区块的一个角（光标标记其相对的角）。<br />
C-x r k<br />
kill-rectangle<br />
剪切当前的矩形区块，并将其保存在一个特殊的矩形区块缓冲区中。<br />
C-x r d<br />
delete-rectangle<br />
删除当前的矩形区块，并不为粘贴而保存它。<br />
C-x r c<br />
clear-rectangle<br />
清除当前的矩形区块，使用空白字符替换整个区域。<br />
C-x r o<br />
open-rectangle<br />
打开当前的矩形区块，使用空白字符填充整个区域，并将该矩形区块的所有文本移动到右边。<br />
C-x r y<br />
yank-rectangle<br />
在光标处，粘贴上一次剪切的矩形区块的内容，将所有的现有文本移动到右边。<span id="more-1111"></span><br />
<strong><span style="color: #2970a6;">表 2. 高级 Emacs 标记和选择命令</span></strong><br />
键盘输入<br />
功能<br />
描述<br />
C-u C-space<br />
移动到标记环中的前一个标记。<br />
C-x C-x<br />
exchange-point-and-mark<br />
交换光标和标记的位置。<br />
M-@<br />
mark-word<br />
标记从光标到当前词尾的所有文本。<br />
M-h<br />
mark-paragraph<br />
标记当前段落，不管光标处在什么位置。<br />
transient-mark-mode<br />
切换临时标记模式。<br />
mark-whole-buffer<br />
标记整个缓冲区，不管光标处在什么位置。<br />
M-B1<br />
设置二次选择的开始，拖曳鼠标以进行二次选择。<br />
M-B3<br />
设置二次选择的结尾。<br />
M-B1-B1<br />
将一个单词标记为二次选择。<br />
M-B1-B1-B1<br />
将一行标记为二次选择。<br />
<strong><span style="color: #2970a6;">表 3. 高级 Emacs 剪切和粘贴命令</span></strong><br />
键盘输入<br />
功能<br />
描述<br />
integer C-k<br />
kill-line<br />
剪切行的整数 数目。如果是 0，剪切从光标到该行开头的全部内容；如果是负数，则反向剪切。<br />
M-k<br />
kill-sentence<br />
剪切从光标到句子的结尾处的内容。<br />
M-z<br />
zap-to-char<br />
删除从光标到指定的字符之间的所有文本。<br />
M-y<br />
yank-pop<br />
移动到剪切环中的下一个槽位。<br />
integer C-y<br />
yank<br />
粘贴剪切环中指定槽位的内容。</p>
<p><strong>本文来自ChinaUnix博客，如果查看原文请点：</strong><a href="http://blog.chinaunix.net/u3/99982/showart_1981965.html" target="_blank">http://blog.chinaunix.net/u3/99982/showart_1981965.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.1uu2.com/archives/1111/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Emacs 2: Fundamental Editing</title>
		<link>http://www.1uu2.com/archives/1109</link>
		<comments>http://www.1uu2.com/archives/1109#comments</comments>
		<pubDate>Wed, 04 Nov 2009 15:22:06 +0000</pubDate>
		<dc:creator>Linux之友</dc:creator>
				<category><![CDATA[Linux桌面应用]]></category>
		<category><![CDATA[Emacs]]></category>
		<category><![CDATA[Fundamental Editing]]></category>

		<guid isPermaLink="false">http://www.1uu2.com/archives/1109</guid>
		<description><![CDATA[表1. Emacs文本操作命令 绑定 命令或者函数 描述 C-x C-i, C-x Tab indent-rigidly 这一命令对区域中的（或光标所在的）行进行缩进。 fill-region 这一命令填充区域里的所有段落。 M-q fill-paragraph 这一命令填充光标所在的单个段落。 M- delete-horizontal-space 这一命令删除光标左右的任何水平间距。 C-o open-line 这一命令以垂直间距在光标下方打开一个新行，而不移动光标。 C-t transpose-chars 这一命令调换光标左右的单个字符。 M-t transpose-words 这一命令调换光标左右的单个单词。 C-x C-t transpose-lines 这一命令调换光标所在的行与光标前面的行。 M-^ delete-indentation 这一命令将光标所在的行和前面的行连接起来。以 C-1作为开始，以连接光标所在的行和下一 行。 M-u uppercase-word 这一命令将光标处到其所在词的词尾之间的文本转换为大写字母。 M-l downcase-word 这一命令将光标处其所在词的词尾之间的文本转换为小写字母。 C-x C-l downcase-region 这一命令将区域中的内容转换为小写字母。 C-x C-u upcase-region 这一命令将区域中的内容转换为大写字母。 表2. Emacs 搜索和替换命令 绑定 [...]]]></description>
			<content:encoded><![CDATA[<p><strong>表1. Emacs文本操作命令</strong><br />
绑定<br />
命令或者函数<br />
描述<br />
C-x C-i, C-x Tab<br />
indent-rigidly<br />
这一命令对区域中的（或光标所在的）行进行缩进。<br />
fill-region<br />
这一命令填充区域里的所有段落。<br />
M-q<br />
fill-paragraph<br />
这一命令填充光标所在的单个段落。<br />
M-<br />
delete-horizontal-space<br />
这一命令删除光标左右的任何水平间距。<br />
C-o<br />
open-line<br />
这一命令以垂直间距在光标下方打开一个新行，而不移动光标。<br />
C-t<br />
transpose-chars<br />
这一命令调换光标左右的单个字符。<br />
M-t<br />
transpose-words<br />
这一命令调换光标左右的单个单词。<br />
C-x C-t<br />
transpose-lines<br />
这一命令调换光标所在的行与光标前面的行。<br />
M-^<br />
delete-indentation<br />
这一命令将光标所在的行和前面的行连接起来。以 C-1作为开始，以连接光标所在的行和下一 行。<br />
M-u<br />
uppercase-word<br />
这一命令将光标处到其所在词的词尾之间的文本转换为大写字母。<br />
M-l<br />
downcase-word<br />
这一命令将光标处其所在词的词尾之间的文本转换为小写字母。<br />
C-x C-l<br />
downcase-region<br />
这一命令将区域中的内容转换为小写字母。<br />
C-x C-u<br />
upcase-region<br />
这一命令将区域中的内容转换为大写字母。<span id="more-1109"></span><br />
<strong>表2. Emacs 搜索和替换命令</strong><br />
绑定<br />
命令或者函数<br />
描述<br />
C-s [string] [C-w] [C-y]<br />
isearch-forward<br />
前向增量地在整个缓冲区中搜索字符串（在缺省情况下，将搜索您上一次给出的搜索字符串，如果存在），C-w使用从光标处到光标所在单词的词尾之间的文本，以及C-y使用从光标处到光标所在行的行尾之间的全部内容。<br />
C-r [string] [C-w] [C-y]<br />
isearch-backward<br />
后向增量地在整个缓冲区中搜索string（在缺省情况下，将搜索您上一次给出的搜索字符串，如果存在），C-w使用从光标处到光标所在单词的词尾之间的文本，C-y使用从光标处到光标所在行的行尾之间的全部内容。<br />
C-s Enter C-w word or phrase<br />
word-search-forward<br />
在整个缓冲区中前向搜索给定的单词或者短语（不管它们之间如何分隔）。<br />
C-r Enter C-w word or phrase<br />
word-search-backward<br />
在整个缓冲区中后向搜索给定的单词或者短语（不管它们之间如何分隔）。<br />
C-M-s<br />
isearch-forward-regexp<br />
在整个缓冲区中前向增量搜索给定的正则表达式。<br />
C-M-r<br />
isearch-backward-regexp<br />
在整个缓冲区中后向增量搜索给定的正则表达式。<br />
replace-string<br />
从光标处到缓冲区末尾搜索给定的字符串，并使用给定的字符串来替换它。<br />
replace-regexp<br />
从光标处到缓冲区末尾搜索给定的正则表达式，并使用给定的字符串来替换它。<br />
M-%<br />
query-replace<br />
从光标处到缓冲区末尾搜索给定的字符串，对于搜索到的每个实例，询问是否使用给定的字符串来进行替换。<br />
C-M-%<br />
query-replace-regexp<br />
从光标处到缓冲区末尾搜索给定的正则表达式，对于搜索到的每个实例，询问是否使用给定的字符串来进行替换。<br />
<strong>表3. Ispell 单词替换命令</strong><br />
键<br />
描述<br />
字符<br />
使用以（字符）开头的替换建议。<br />
空格<br />
在此上下文中接受这个单词作为更正。<br />
i<br />
接受这个单词作为更正并将其插入到个人字典文件。<br />
a<br />
仅对于此次 Emacs 会话接受这个单词作为更正。<br />
A<br />
仅对于此次 Emacs 会话中的缓冲区，接受这个单词作为更正。<br />
r<br />
使用您输入的字符串替换这个单词（Ispell 会再次进行拼写检查）。<br />
R<br />
使用您输入的字符串替换这个单词（Ispell 会再次进行拼写检查），并对整个缓冲区的剩余部分运行query-replace。<br />
l<br />
使用给定的字符串替换这个单词，并在给定的字典文件中查找这个新的字符串。<br />
u<br />
将这个单词的小写形式插入到个人字典文件。<br />
m<br />
使用给定的字符串替代这个单词，将其保存到个人字典，然后再次对该单词进行拼写检查。<br />
C-l<br />
使当前行位于屏幕中心位置。<br />
C-r<br />
进入一个递归编辑。<br />
C-z<br />
挂起 Emacs。（In X 窗口系统中，这个操作将对 Emacs 客户端窗口进行图标化。）<br />
x<br />
退出拼写检查，并将光标移回到它的原始位置。<br />
X<br />
退出拼写检查，并使光标位于它当前所在的位置。<br />
q<br />
立刻结束拼写检查。<br />
?<br />
显示选项菜单。<br />
<strong>表4. Flyspell 模式的键绑定</strong><br />
函数或绑定<br />
描述<br />
M-$<br />
使用 Ispell 纠正最近一个拼写错误的单词。<br />
flyspell-auto-correct-word, M-Tab<br />
根据 Ispell 给出的修改建议，自动地纠正最近一个拼写错误的单词。<br />
M-x flyspell-auto-correct-previous-word<br />
根据 Ispell 给出的修改建议，自动地纠正前面拼写错误的单词。<br />
M-x flyspell-correct-word, B2<br />
显示单词建议的弹出菜单。<br />
<strong>表5. Emacs 的拼写命令</strong><br />
绑定<br />
命令或者函数<br />
描述<br />
M-$<br />
ispell-word<br />
调用 Ispell 以检查光标处单词的拼写。<br />
ispell-region<br />
调用 Ispell 以检查某一区域中的拼写。<br />
ispell-buffer<br />
调用 Ispell 以检查从光标处到缓冲区末尾的所有单词的拼写。<br />
flyspell-mode<br />
在您输入内容的同时，调用 Ispell 以便在后台检查缓冲区中所有单词的拼写，突出显示所有的拼写错误。</p>
<p><strong>本文来自ChinaUnix博客，如果查看原文请点：</strong><a href="http://blog.chinaunix.net/u3/99982/showart_1981958.html" target="_blank">http://blog.chinaunix.net/u3/99982/showart_1981958.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.1uu2.com/archives/1109/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Emacs 1: Basics</title>
		<link>http://www.1uu2.com/archives/1107</link>
		<comments>http://www.1uu2.com/archives/1107#comments</comments>
		<pubDate>Wed, 04 Nov 2009 15:20:52 +0000</pubDate>
		<dc:creator>Linux之友</dc:creator>
				<category><![CDATA[Linux桌面应用]]></category>
		<category><![CDATA[Basics]]></category>
		<category><![CDATA[Emacs]]></category>

		<guid isPermaLink="false">http://www.1uu2.com/?p=1107</guid>
		<description><![CDATA[表 1. 常用的缺省 Emacs 按键前缀 按键前缀 描述 C-c 当前编辑模式特有的命令 C-x 文件和缓冲区命令 C-h 帮助命令 M-x 函数名称 表 2. 常用的 Emacs 缓冲区和文件函数 绑定 函数名 描述 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 并使之成为一个后台进程。 C-x C-b list-buffers 列出所有缓冲区。 C-x k kill-buffer 杀死一个缓冲区（缺省情况下为当前的缓冲区）。 C-x C-q vc-toggle-read-only 切换当前缓冲区的可读状态（如果适用还可以执行版本控制）。 C-x [...]]]></description>
			<content:encoded><![CDATA[<p><strong><span style="color: #2970a6;">表 1. 常用的缺省 Emacs 按键前缀</span></strong><br />
按键前缀<br />
描述<br />
C-c<br />
当前编辑模式特有的命令<br />
C-x<br />
文件和缓冲区命令<br />
C-h<br />
帮助命令<br />
M-x<br />
函数名称<span id="more-1107"></span><br />
<strong><span style="color: #2970a6;">表 2. 常用的 Emacs 缓冲区和文件函数</span></strong><br />
绑定<br />
函数名<br />
描述<br />
C-x C-s<br />
save-buffer<br />
将当前的缓冲区保存到磁盘。<br />
C-x s<br />
save-some-buffers<br />
要求将所有未保存的缓冲区保存到磁盘。<br />
C-x C-c<br />
save-buffers-kill-emacs<br />
要求将所有未保存的缓冲区保存到磁盘，并退出 Emacs。<br />
C-x C-z<br />
suspend-emacs<br />
挂起 Emacs 并使之成为一个后台进程。<br />
C-x C-b<br />
list-buffers<br />
列出所有缓冲区。<br />
C-x k<br />
kill-buffer<br />
杀死一个缓冲区（缺省情况下为当前的缓冲区）。<br />
C-x C-q<br />
vc-toggle-read-only<br />
切换当前缓冲区的可读状态（如果适用还可以执行版本控制）。<br />
C-x i<br />
insert-file<br />
在<br />
<a href="http://gosubi.me/adow/archives/category/reprint/page/section4.html#point" target="_blank"><span style="color: #2970a6;">插入点</span></a><br />
插入某个文件的内容。<br />
<strong><span style="color: #2970a6;">表 3. 有用的 Emacs 键盘输入（用于移动和导航）</span></strong><br />
键盘输入<br />
函数<br />
描述<br />
C-p, ↑<br />
previous-line<br />
将插入点向上移动到上一行。<br />
C-n, ↓<br />
next-line<br />
将插入点向下移动到下一行。<br />
C-f, →<br />
forward-char<br />
将插入点移动到下一个字符。<br />
C-b, ←<br />
back-char<br />
将插入点移动到上一个字符。<br />
M-f<br />
forward-word<br />
将插入点移动到下一个单词。<br />
M-b<br />
backward-word<br />
将插入点移动到上一个单词。<br />
C-v, PgDn<br />
scroll-up<br />
将文本向上滚动一屏。<br />
M-v, PgUp<br />
scroll-down<br />
将文本向下滚动一屏。<br />
Home<br />
beginning-of-buffer<br />
将插入点移到缓冲区的开始处。（在某些版本中，这个键被缺省定义为移动到当前行的开始处。）<br />
End<br />
end-of-buffer<br />
将插入点移到缓冲区的末尾。（在某些版本中，这个键被缺省定义为移动到当前行的末尾。）<br />
C-a<br />
beginning-of-line<br />
将插入点移到本行的开始处。<br />
C-e<br />
end-of-line<br />
将插入点移到本行的结尾。<br />
M-a<br />
beginning-of-sentence<br />
将插入点移到句子的开始处。<br />
M-e<br />
end-of-sentence<br />
将插入点移到句子的结尾处。<br />
C-{<br />
beginning-of-paragraph<br />
将插入点移到段落的开始处。<br />
C-}<br />
end-of-paragraph<br />
将插入点移到段落的结尾处。<br />
<strong><span style="color: #2970a6;">表 4. 常用 Emacs 编辑命令</span></strong><br />
键盘输入<br />
函数<br />
描述<br />
Ins<br />
overwrite-mode<br />
切换改写模式（缺省为关闭）。<br />
Backspace<br />
Del<br />
delete-backward-char<br />
删除插入点前的字符。<br />
C-d<br />
delete-char<br />
删除插入点处的字符。<br />
M-d<br />
kill-word<br />
从插入点开始向前删除字符，直到单词末尾。<br />
M-Backspace, M-Del<br />
backward-kill-word<br />
从插入点开始向回删除字符，直至单词的开始处。<br />
C-_<br />
undo<br />
撤消您的上一次键入或操作<br />
C-q 字符 或 XXX<br />
quoted-insert<br />
在插入点插入按键本身代表的字符或由八进制数字（XXX）表示的字符。<br />
C-u 次数 命令<br />
universal-argument<br />
按总的次数（缺省为 4 次）连续执行命令。<br />
<strong><span style="color: #2970a6;">表 5. 用来标记和删除文本的 Emacs函数</span></strong><br />
键盘输入<br />
函数<br />
描述<br />
C-Space<br />
set-mark-command<br />
在插入点设置标记。<br />
C-k<br />
kill-line<br />
删除从插入点到行末的所有文本。<br />
C-w<br />
kill-region<br />
删除区域。<br />
M-w<br />
kill-ring-save<br />
将区域保存在 kill ring 中，但不删除它。<br />
C-y<br />
yank<br />
恢复来自 kill ring 的文本。<br />
<strong><span style="color: #2970a6;">表 6. Emacs 中的鼠标操作</span></strong><br />
鼠标命令<br />
描述<br />
B1<br />
这一命令将设置插入点位置；拖动鼠标左键以设置区域。<br />
B1-B1<br />
这一命令标记一个单词。<br />
B1-B1-B1<br />
这一命令标记一行。<br />
B2<br />
这一命令插入最近被杀死的内容，并把光标移动到插入内容的末尾。<br />
B3<br />
这一命令会设置并突出显示区域，然后无需删除就将其放在 kill 缓冲区中。如果某个区域已经被突出显示并设置，该区域的末尾将移动到您单击的位置。<br />
B3-B3<br />
这个命令将突出显示区域，然后删除它。如果某个区域已经被突出显示并设置，该区域的末尾将移动到您单击的位置，此后该区域将被删除。</p>
<p><strong>本文来自ChinaUnix博客，如果查看原文请点：</strong><a href="http://blog.chinaunix.net/u3/99982/showart_1981950.html" target="_blank">http://blog.chinaunix.net/u3/99982/showart_1981950.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.1uu2.com/archives/1107/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Emacs快捷键</title>
		<link>http://www.1uu2.com/archives/1105</link>
		<comments>http://www.1uu2.com/archives/1105#comments</comments>
		<pubDate>Wed, 04 Nov 2009 15:19:25 +0000</pubDate>
		<dc:creator>Linux之友</dc:creator>
				<category><![CDATA[Linux桌面应用]]></category>
		<category><![CDATA[Emacs]]></category>

		<guid isPermaLink="false">http://www.1uu2.com/?p=1105</guid>
		<description><![CDATA[基本命令 C-x C-c : 退出Emacs C-x C-f : 打开一个文件，如果文件不存在，则创建一个文件 C-g : 取消未完成的命令 编辑 C-z (redefined): Undo；原来C-z是挂起Emacs（然后用fg命令调出）；C-x u 是默认的命令； 移动一下光标，再C-z就可以redo M-d : 删除光标后的词语 移动光标 C-v : 向前翻页 M-v : 向后翻页 M-r : 将光标移动到屏幕中间那行 C-a : 移到行首 M-a : 移到句首，从行首到句首之间可能有空格 C-e : 移到行尾 M-e : 移到句尾 M-{ : 向上移动一段 M-} : 向下移动一段 C-right : 向前移动一个单词 C-left : [...]]]></description>
			<content:encoded><![CDATA[<p><strong>基本命令</strong><br />
C-x C-c : 退出Emacs<br />
C-x C-f : 打开一个文件，如果文件不存在，则创建一个文件<br />
C-g : 取消未完成的命令 <span id="more-1105"></span></p>
<p><strong>编辑</strong><br />
C-z (redefined): Undo；原来C-z是挂起Emacs（然后用fg命令调出）；C-x u 是默认的命令； 移动一下光标，再C-z就可以redo<br />
M-d : 删除光标后的词语<br />
移动光标<br />
C-v : 向前翻页<br />
M-v : 向后翻页<br />
M-r : 将光标移动到屏幕中间那行<br />
C-a : 移到行首<br />
M-a : 移到句首，从行首到句首之间可能有空格<br />
C-e : 移到行尾<br />
M-e : 移到句尾<br />
M-{ : 向上移动一段<br />
M-} : 向下移动一段<br />
C-right : 向前移动一个单词<br />
C-left : 向后移动一个单词<br />
C-up : 向前移动一段<br />
C-down : 向后移动一段<br />
M- : 移到整个文本末尾<br />
C-u 数字 命令 : 执行多次(数字表示次数)该命令；“M-数字 命令” 也可以<br />
M-x goto-line : 移动到某一行<br />
C-l : 重绘屏幕，效果就是当前编辑行移动窗口中央<br />
Buffer 相关<br />
C-x k : 关闭当前buffer<br />
C-x b : 切换到前一个编辑的buffer<br />
C-x C-b : 列出当前所有buffer<br />
C-x C-s : 保存当前buffer<br />
C-x s : 保存所有未保存的buffer，会提示你是否需要保存<br />
C-x C-w : 文件另存为</p>
<p><strong>拷贝与粘贴</strong><br />
M-space (redefined): 设置mark; C-@ 是默认命令<br />
C-w (redefined) : 剪切一块区域；如果没有设置mark，则是剪切一行<br />
M-w (redefined) : 拷贝一块区域；如果没有设置mark, 则是拷贝一行<br />
C-k : 从当前位置剪切到行尾<br />
C-y : 粘贴<br />
M-y : 用C-y拉回最近被除去的文本后，换成 M-y可以拉回以前被除去的文本。键入多次的M-y可以拉回更早以前被除去的文本。<br />
C-x r k : 执行矩形区域的剪切<br />
C-x r y : 执行矩形区域的粘贴</p>
<p><strong>窗口操作</strong><br />
C-x 0 : 关闭当前窗口<br />
C-x 1 : 将当前窗口最大化<br />
C-x 2 : 垂直分割窗口<br />
C-x 3 : 水平分割窗口<br />
M-o (redefined) : 在窗口之间切换; C-x o 是默认命令<br />
C-x 5 1/2/3/0 : 对frame类似的操作<br />
C-x  : 窗口内容左卷（这两个命令在垂直分割窗口后比较有用）<br />
(C-u) C-x ^ : 加高当前窗口，如果有C-u，则每次加高4行<br />
(C-u) C-x } : 加宽当前窗口<br />
(C-u) C-x { : 压窄当前窗口<br />
ESC C-v : 在其它窗口进行卷屏操作</p>
<p><strong>搜索和替换</strong><br />
C-s : 向前搜索（增量式搜索）；连续C-s，跳到下一个搜索到的目标<br />
C-s RET : 普通搜索<br />
C-r : 向前搜索<br />
C-s RET C-w : 按单词查询<br />
M-% : 查询替换，也就是替换前会询问一下<br />
M-x replace-string : 普通替换</p>
<p><strong>Tags</strong><br />
M-! etags .c .h : 创建TAGS文件<br />
M-. : 跳到tag所在位置<br />
M-x list-tags : 列出tags</p>
<p><strong>Bookmark</strong><br />
C-x r m : 设置书签bookmark<br />
C-x r b : 跳到bookmark处</p>
<p><strong>帮助</strong><br />
C-h ? : 查看帮助信息<br />
C-h f : 查看一个函数<br />
C-h v : 查看一个变量<br />
C-h k : 查看一个键绑定 (C－h c 也是查看键绑定，但是信息较简略)<br />
C-h C-f : 查看一个函数的Info，非常有用<br />
C-h i : 看Info</p>
<p><strong>其它</strong><br />
C-M-\ : 对选中区域，按照某种格式(比如C程序)进行格式化<br />
C-x h : 全部选中<br />
M-! : 执行外部shell命令<br />
M-x shell : 模拟shell的buffer<br />
M-x term : 模拟terminal, C-c k 关闭terminal<br />
C-x C-q : 修改buffer的只读属性</p>
<p><strong>本文来自ChinaUnix博客，如果查看原文请点：</strong><a href="http://blog.chinaunix.net/u3/99982/showart_1981547.html" target="_blank">http://blog.chinaunix.net/u3/99982/showart_1981547.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.1uu2.com/archives/1105/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>EMACS使用</title>
		<link>http://www.1uu2.com/archives/1103</link>
		<comments>http://www.1uu2.com/archives/1103#comments</comments>
		<pubDate>Wed, 04 Nov 2009 15:18:20 +0000</pubDate>
		<dc:creator>Linux之友</dc:creator>
				<category><![CDATA[Linux桌面应用]]></category>
		<category><![CDATA[Emacs]]></category>

		<guid isPermaLink="false">http://www.1uu2.com/?p=1103</guid>
		<description><![CDATA[通过前一段时间ＥＭＡＣＳ的使用，我深深的被这个编辑器所吸引，ＥＭＡＣＳ实在是太强大了，无论是代码编辑、自 动插入、自动补全、代码阅读，实在是太好用了，现将我的ＥＭＡＣＳ配置文件分享给大家http://sites.google.com/site /ideaofanima/附件里是我的全部配置文件 EMACS常用快捷键 M-x replace-string C-q C-m 去掉文件中的^M C-c C-n是Next line，C-c C-s是step in C-f9 启动shell C-X h全选 C-M-\ : 对选中区域，按照某种格式(比如C程序)进行格式化 M-跳转到文件尾 C-M-f和C-M-b在匹配括号间跳转 M-g-g跳转到指定行 跳转到其他窗口M－o C-/             撤销 C-.             重做 C-x } 调整窗口大小 C-x r m 添加书签 C-x r b 跳到某个书签 M-x list-bookmarks 显示所有书签，在里面d标记删除，u取消，r重命名，x执行操作 常用EMACS编辑命令 C-f        [...]]]></description>
			<content:encoded><![CDATA[<p>通过前一段时间ＥＭＡＣＳ的使用，我深深的被这个编辑器所吸引，ＥＭＡＣＳ实在是太强大了，无论是代码编辑、自 动插入、自动补全、代码阅读，实在是太好用了，现将我的ＥＭＡＣＳ配置文件分享给大家http://sites.google.com/site /ideaofanima/附件里是我的全部配置文件<br />
EMACS常用快捷键<br />
M-x replace-string<br />
C-q<br />
C-m<br />
去掉文件中的^M<br />
C-c C-n是Next line，C-c C-s是step in<br />
C-f9 启动shell<br />
C-X h全选<br />
C-M-\ : 对选中区域，按照某种格式(比如C程序)进行格式化<br />
M-跳转到文件尾<br />
C-M-f和C-M-b在匹配括号间跳转<br />
M-g-g跳转到指定行<br />
跳转到其他窗口M－o<br />
C-/             撤销<br />
C-.             重做<br />
C-x } 调整窗口大小<br />
C-x r m 添加书签<br />
C-x r b 跳到某个书签<br />
M-x list-bookmarks 显示所有书签，在里面d标记删除，u取消，r重命名，x执行操作<br />
常用EMACS编辑命令<br />
C-f             向右移动一个字符<br />
C-b             向左移动一个字符<br />
M-f             向右移动一个词【对中文是移动到下一个标点符号】<br />
M-b             向左移动一个词【对中文是移动到上一个标点符号】<br />
C-n             移动到下一行<br />
C-p             移动到上一行<br />
C-a             移动到行首<br />
C-e             移动到行尾<br />
C-g             退出当前命令<br />
C-s             增量向前搜索<br />
C-,             复制当前单词<br />
C-k             删除光标至行末<br />
C-S-backspace   删除当前行<br />
C-Backspace     删除单词<br />
C-d             删除字符<br />
C-y             粘贴<br />
C-w             剪切<br />
M-w             复制<br />
C-x r k         删除矩形区块<br />
C-x r t         用指定字符填充矩形区块<br />
C-c s a 设定初始化的目录，一般是你代码的根目录<br />
C-s s I 对目录中的相关文件建立列表并进行索引<br />
C-c s C-h 查看所有的 cscope 相关的按键<br />
C-c s a 设定索引文件所在目录<br />
C-c s c 查找调用该函数的地方<br />
C-c s g 查找该符号的全局定义<br />
C-c s f 查找该符号对应的文件<br />
我的EMACS配置文件<br />
(add-to-list &#8216;load-path &#8220;~/.emacs.d/&#8221;)<br />
(setq x-select-enable-clipboard t);<br />
;;set the color-theme<br />
(require &#8216;color-theme)<br />
(color-theme-deep-blue)<br />
(global-set-key &#8220;\M-&#8217;&#8221; &#8216;set-mark-command)<br />
(global-set-key &#8220;\M-r&#8221; &#8216;replace-string)<br />
(add-hook &#8216;c-mode-common-hook<br />
&#8216;(lambda()<br />
(require &#8216;xcscope)))<br />
;;auto add code<br />
(load &#8220;~/.emacs.d/smart-edit/auto-insert.el&#8221;)<br />
;;auto redo<br />
(load &#8220;~/.emacs.d/redo.el&#8221;)<br />
(global-set-key (kbd &#8220;C-.&#8221;) &#8216;redo);重做<br />
;;smart-compile<br />
(load &#8220;~/.emacs.d/smart-compile/c-compile.el&#8221;)</p>
<p>(global-set-key (kbd &#8220;C-x C-b&#8221;) &#8216;electric-buffer-list)<br />
(global-set-key (kbd &#8220;M-o&#8221;) &#8216;other-window)<br />
;(global-set-key (&#8220;M-n&#8221;) &#8216;gnus)<br />
;; 启动新闻组客户端 gnus。<br />
(setq-default kill-whole-line t)<br />
;; 在行首 C-k 时，同时删除该行。<br />
(show-paren-mode 1)                     ; 高亮显示匹配的括号。<br />
(require &#8216;saveplace)<br />
(setq-default save-place t)<br />
(desktop-save-mode 1)<br />
(load-library &#8220;multi-gud.el&#8221;)<br />
(load-library &#8220;multi-gdb-ui.el&#8221;)<br />
;; 给每行显示行号<br />
(require &#8216;linum)<br />
(global-linum-mode t)<br />
;;自动补全括号<br />
(defun my-c-mode-auto-pair ()<br />
(interactive)<br />
(make-local-variable &#8216;skeleton-pair-alist)<br />
(setq skeleton-pair-alist  &#8217;(<br />
(?` ?` _ &#8220;&#8221;&#8221;)<br />
(?\( ?  _ &#8221; )&#8221;)<br />
(?\[ ?  _ " ]&#8220;)<br />
(?{ \n &gt; _ \n ?} &gt;)))<br />
(setq skeleton-pair t)<br />
(local-set-key (kbd &#8220;(&#8220;) &#8216;skeleton-pair-insert-maybe)<br />
(local-set-key (kbd &#8220;{&#8220;) &#8216;skeleton-pair-insert-maybe)<br />
(local-set-key (kbd &#8220;`&#8221;) &#8216;skeleton-pair-insert-maybe)<br />
(local-set-key (kbd &#8220;[") 'skeleton-pair-insert-maybe))<br />
(add-hook 'c-mode-hook 'my-c-mode-auto-pair)<br />
(add-hook 'c++-mode-hook 'my-c-mode-auto-pair)<br />
;;输入左边的括号，就会自动补全右边的部分.包括(), "", [] , {} , 等等。<br />
(fset &#8216;yes-or-no-p &#8216;y-or-n-p)<br />
(setq frame-title-format &#8220;%f&#8221;)<br />
(column-number-mode t)<br />
(transient-mark-mode t)<br />
(show-paren-mode t)<br />
(tool-bar-mode -1)<br />
(set-clipboard-coding-system &#8216;ctext)<br />
(set-scroll-bar-mode nil)   ; no scroll bar, even in x-window system<br />
;;;; 关闭启动画面<br />
(setq inhibit-startup-message t)<br />
;; 代码折叠:<br />
(load-library &#8220;hideshow&#8221;)<br />
(add-hook &#8216;c-mode-hook &#8216;hs-minor-mode)<br />
(add-hook &#8216;c++-mode-hook &#8216;hs-minor-mode)<br />
(add-hook &#8216;java-mode-hook &#8216;hs-minor-mode)<br />
(add-hook &#8216;perl-mode-hook &#8216;hs-minor-mode)<br />
(add-hook &#8216;php-mode-hook &#8216;hs-minor-mode)<br />
(add-hook &#8216;emacs-lisp-mode-hook &#8216;hs-minor-mode)<br />
;;  快速切换到 shell 并 cd 到当前 buffer 所在的目录<br />
(defun kid-switch-to-shell ()<br />
(interactive)<br />
(when (null (cdr (window-list)))<br />
(split-window-vertically))<br />
(let ((file buffer-file-name))<br />
(other-window 1)<br />
(shell)<br />
(when file<br />
(end-of-buffer)<br />
(when (looking-back shell-prompt-pattern)<br />
(insert &#8220;cd &#8221; (file-name-directory file))<br />
(call-interactively &#8216;comint-send-input)))))<br />
(global-set-key (kbd &#8220;&#8221;) &#8216;kid-switch-to-shell)<br />
;;auto insert<br />
(global-set-key (kbd &#8220;M-/&#8221;) &#8216;hippie-expand)<br />
(setq hippie-expand-try-functions-list<br />
&#8216;(try-expand-dabbrev                 ; 搜索当前 buffer<br />
try-expand-dabbrev-visible         ; 搜索当前可见窗口<br />
try-expand-dabbrev-all-buffers     ; 搜索所有 buffer<br />
try-expand-dabbrev-from-kill       ; 从 kill-ring 中搜索<br />
try-complete-file-name-partially   ; 文件名部分匹配<br />
try-complete-file-name             ; 文件名匹配<br />
try-expand-all-abbrevs             ; 匹配所有缩写词<br />
try-expand-list                    ; 补全一个列表<br />
try-expand-line                    ; 补全当前行<br />
try-complete-lisp-symbol-partially ; 部分补全 elisp symbol<br />
try-complete-lisp-symbol))         ; 补全 lisp symbol<br />
(require &#8216;uniquify)<br />
(setq uniquify-buffer-name-style &#8216;forward)<br />
;;;;高亮当前行<br />
(require &#8216;hl-line)<br />
(global-hl-line-mode t)<br />
;;;;导入CEDET的各个插件<br />
;; &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
;; Load CEDET<br />
(load-file &#8220;~/.emacs.d/cedet-1.0pre6/common/cedet.el&#8221;)<br />
;; Enabling various SEMANTIC minor modes.  See semantic/INSTALL for more ideas.<br />
;; Select one of the following<br />
(semantic-load-enable-code-helpers)<br />
;; (semantic-load-enable-guady-code-helpers)<br />
;; (semantic-load-enable-excessive-code-helpers)<br />
;; Enable this if you develop in semantic, or develop grammars<br />
;; (semantic-load-enable-semantic-debugging-helpers)<br />
; ctrl+;: 代码折叠<br />
(global-set-key (kbd &#8220;&#8221;) &#8216;hs-toggle-hiding)<br />
;; &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
;;配置session<br />
(add-to-list &#8216;load-path<br />
&#8220;~/.emacs.d/session/lisp&#8221;)<br />
(require &#8216;session)<br />
(add-hook &#8216;after-init-hook &#8216;session-initialize) ;; 启动时初始化session<br />
;; &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
;;;; 配置 Emacs Code Browser<br />
(add-to-list &#8216;load-path<br />
&#8220;~/.emacs.d/ecb-2.40/&#8221;)<br />
(require &#8216;ecb)<br />
;; &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
(global-set-key [f12] &#8216;ecb-activate) ;;定义F12键为激活ecb<br />
(global-set-key [C-f12] &#8216;ecb-deactivate) ;;定义Ctrl+F12为停止ecb<br />
(setq ecb-tip-of-the-day nil)<br />
;; &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
;;;;配置Sementic的检索范围<br />
(setq semanticdb-project-roots<br />
(list<br />
(expand-file-name &#8220;/&#8221;)))<br />
(defun my-indent-or-complete ()<br />
(interactive)<br />
(if (looking-at &#8220;\\&gt;&#8221;)<br />
(hippie-expand nil)<br />
(indent-for-tab-command))<br />
)</p>
<p>;; &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
(global-set-key [(control tab)] &#8216;my-indent-or-complete)<br />
(global-set-key [(tab)] &#8216;my-indent-or-complete)<br />
(global-set-key [(meta ?/)] &#8216;semantic-ia-complete-symbol-menu)<br />
(global-set-key [(meta return)] &#8216;semantic-ia-complete-symbol-menu) ;;设置Alt+Enter为自动补全菜单<br />
;; &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
(custom-set-variables<br />
;; custom-set-variables was added by Custom.<br />
;; If you edit it by hand, you could mess it up, so be careful.<br />
;; Your init file should contain only one such instance.<br />
;; If there is more than one, they won&#8217;t work right.<br />
&#8216;(ecb-options-version &#8220;2.40&#8243;))<br />
(custom-set-faces<br />
;; custom-set-faces was added by Custom.<br />
;; If you edit it by hand, you could mess it up, so be careful.<br />
;; Your init file should contain only one such instance.<br />
;; If there is more than one, they won&#8217;t work right.<br />
)</p>
<p>;; &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
(require &#8216;windmove)<br />
(global-set-key [M-left] &#8216;windmove-left)<br />
(global-set-key [M-right] &#8216;windmove-right)<br />
(global-set-key [M-up] &#8216;windmove-up)<br />
(global-set-key [M-down] &#8216;windmove-down)<br />
;; &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
(add-hook &#8216;c-mode-common-hook ( lambda() ( c-set-style &#8220;k&amp;r&#8221; ) ) ) ;;设置C语言默认格式<br />
(add-hook &#8216;c++-mode-common-hook ( lambda() ( c-set-style &#8220;k&amp;r&#8221; ) ) ) ;;设置C++语言默认格式<br />
(setq c-basic-offset 2)<br />
(setq show-paren-style &#8216;parentheses) ;;<br />
(global-set-key [?\S- ] &#8216;set-mark-command) ;;<br />
(global-set-key [(f4)] &#8216;speedbar)<br />
;shell,gdb退出后，自动关闭该buffer<br />
(add-hook &#8216;shell-mode-hook &#8216;mode-hook-func)<br />
(add-hook &#8216;gdb-mode-hook &#8216;mode-hook-func)<br />
(defun mode-hook-func ()<br />
(set-process-sentinel (get-buffer-process (current-buffer))<br />
#&#8217;kill-buffer-on-exit)<br />
)<br />
(defun kill-buffer-on-exit (process state)<br />
(message &#8220;%s&#8221; state)<br />
(if (or<br />
(string-match &#8220;exited abnormally with code.*&#8221; state)<br />
(string-match &#8220;finished&#8221; state))<br />
(kill-buffer (current-buffer))))<br />
(global-set-key [(f6)] &#8216;gdb)<br />
(setq gdb-many-windows t)<br />
;;Calendar 中显示农历节日<br />
(load &#8220;~/.emacs.d/chinese-calendar.el&#8221;)</p>
<p><strong>本文来自ChinaUnix博客，如果查看原文请点：</strong><a href="http://blog.chinaunix.net/u3/99841/showart_1981496.html" target="_blank">http://blog.chinaunix.net/u3/99841/showart_1981496.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.1uu2.com/archives/1103/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Emacs快速指南</title>
		<link>http://www.1uu2.com/archives/1101</link>
		<comments>http://www.1uu2.com/archives/1101#comments</comments>
		<pubDate>Wed, 04 Nov 2009 15:17:11 +0000</pubDate>
		<dc:creator>Linux之友</dc:creator>
				<category><![CDATA[Linux桌面应用]]></category>
		<category><![CDATA[Emacs]]></category>

		<guid isPermaLink="false">http://www.1uu2.com/?p=1101</guid>
		<description><![CDATA[Emacs 快速指南.（查看版权声明请至本文末尾） 【注意：位于【】之间的内容是译注，比如本行，下同。】 Emacs 键盘命令通常包含 CONTROL 键（有时候以 CTRL 或 CTL 来标示）和 META 键（有时候用 EDIT 或 ALT 来标示）。为了避免每次都要写出全名，我们 约定使用下述缩写： C-  表示当输入字符  时按住 CONTROL 键。 因此 C-f 就表示：按住 CONTROL 键再输入 f。 M-  表示当输入字符  时按住 META（或 EDIT 或 ALT）键。 如果你的键盘上没有 META 、EDIT 或 ALT 键，用下述方法也等效： 先按一下 ESC 键然后放开，再输入 。我们用  来表示 ESC 键。 重要提示：要退出 Emacs，请用 C-x C-c（两个连续的组合键）。下文中左边顶 行的“&#62;&#62;”字样用来提示你尝试键盘命令。比如： [本页当中特意留出一些空白是出于教学目的，请继续往后阅读] &#62;&#62; 现在输入 C-v （查看下一屏文字）移动到下一屏。 （别紧张，在输入字符 [...]]]></description>
			<content:encoded><![CDATA[<p>Emacs 快速指南.（查看版权声明请至本文末尾）<br />
【注意：位于【】之间的内容是译注，比如本行，下同。】<br />
Emacs 键盘命令通常包含 CONTROL 键（有时候以 CTRL 或 CTL 来标示）和<br />
META 键（有时候用 EDIT 或 ALT 来标示）。为了避免每次都要写出全名，我们<br />
约定使用下述缩写：<br />
C-  表示当输入字符  时按住 CONTROL 键。<br />
因此 C-f 就表示：按住 CONTROL 键再输入 f。<br />
M-  表示当输入字符  时按住 META（或 EDIT 或 ALT）键。<br />
如果你的键盘上没有 META 、EDIT 或 ALT 键，用下述方法也等效：<br />
先按一下 ESC 键然后放开，再输入 。我们用  来表示<br />
ESC 键。<br />
重要提示：要退出 Emacs，请用 C-x C-c（两个连续的组合键）。下文中左边顶<br />
行的“&gt;&gt;”字样用来提示你尝试键盘命令。比如：</p>
<p>[本页当中特意留出一些空白是出于教学目的，请继续往后阅读]</p>
<p>&gt;&gt; 现在输入 C-v （查看下一屏文字）移动到下一屏。<br />
（别紧张，在输入字符 v 的同时注意要按住 CONTROL 键）<br />
从现在开始，每读完当前一屏你都需要这样做一次。<br />
值得注意的是，当你从上一屏滚到下一屏时，中间会有两行的重复；这样做是为<br />
了维持滚屏的连续性，方便你顺畅、连续地阅读。<br />
用编辑器，开门第一件事就是学会在文字中移动。你已经知道了 C-v 可以向下移<br />
动一屏，要往上移，请用 M-v （也就是按住 META 键，然后输入v，如果你没有<br />
META、EDIT 或 ALT 键那么就先按  再按 v）。<br />
&gt;&gt;  试试 M-v，然后再试试 C-v，来回遛几次。<br />
* 小结（SUMMARY）<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
以下命令在翻页浏览时相当有用：<br />
C-v     向前移动一屏<br />
M-v     向后移动一屏<br />
C-l     重绘屏幕，并将光标所在行置于屏幕的中央<br />
（注意是 CONTROL-L，不是 CONTROL-1）<br />
&gt;&gt; 找到光标，留意其附近的文字，然后输入 C-l。<br />
找找光标在哪里，你会发现其附近的文字并没有变化。<br />
如果你的键盘上有 PageUp 和 PageDn，也可以用这两个键来滚屏。不过使用<br />
C-v 和 M-v 的效率要更高一些。<br />
* 基本的光标控制（BASIC CURSOR CONTROL）<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
整屏的移动很有用，但是如何在文字中精确定位呢？<br />
有几种方式可以选择。用方向键当然可以，不过更有效率的方法是保持双手位于<br />
主键盘区，然后使用 C-p 、 C-b 、 C-f 和 C-n 这四个命令。它们的功能和方<br />
向键是一样的，如下图所示：<br />
上一行 C-p<br />
:<br />
:<br />
向左移 C-b &#8230;. 目前光标位置 &#8230;. 向右移 C-f<br />
:<br />
:<br />
下一行 C-n<br />
&gt;&gt; 用 C-n 或 C-p 将光标移到上图的中央。<br />
按 C-l，整幅图会被显示在屏幕的中央。<br />
“P N B F”四个字母分别代表了四个词，用这四个词记忆这些组合键会更容易：<br />
P 代表 previous（上一行），N 代表 next（下一行），B 代表 backward（回<br />
退），而 F 则代表 forward（前进）。这些组合键今后将与你形影不离。<br />
&gt;&gt; 按几次 C-n 把光标往下挪到这里。<br />
&gt;&gt; 用 C-f 把光标移动到这一行，然后再用 C-p 往上挪。<br />
注意观察当光标在一行的中央时 C-p 命令的行为。<br />
每行文字都以一个“换行符”结束，“换行符”把行与行区分开来。文件的最后<br />
一行也应该也有一个换行符（不过 Emacs 并不强制要求这一点）。<br />
&gt;&gt; 在一行的行头输入 C-b。<br />
光标应该会移动到前一行的行尾，因为光标在回退过程中越过了换行符。<br />
同样 C-f 也可以像 C-b 一样越过换行符。<br />
&gt;&gt; 连按几次 C-b，感受一下光标的移动。<br />
然后按几次 C-f 回到本行的行尾。<br />
再按一次 C-f，光标会移动到下一行。<br />
当你移动光标穿越屏幕的上下边界时，在边界外的文字会移动到屏幕内，这称为<br />
“滚动”（scrolling）。滚动使得光标可以被移动到文字中的任何位置，并且还<br />
不会让光标跑到屏幕外边去。<br />
&gt;&gt; 用 C-n 将光标下移，一直越过屏幕边界，同时观察发生了什么变化。<br />
如果你嫌一个字符一个字符地挪光标太慢，你还可以一个词一个词地跳。M-f<br />
(META-f) 可以将光标往前移动一个词，而 M-b 则是往后移。【这里的“词”指<br />
英文单词，对中文来说，则是指移动到下一个标点符号。】<br />
&gt;&gt; 试试 M-f 和 M-b。<br />
如果光标停在一个词的中间，M-f 会移动到这个词的末尾。如果光标处于词与词<br />
之间的空白处，M-f 会移动到下一个词的末尾。M-b 的功能类似，只是方向相反。<br />
&gt;&gt; 按几次 M-f 和 M-b，中间夹杂一些 C-f 和 C-b。<br />
你可以观察到 M-f 和 M-b 在不同位置上所表现出来的不同行为。<br />
请注意 C-f 、C-b 和 M-f 、M-b 两对之间的类比关系。通常的惯例是：META 系<br />
列组合键用来操作“由语言定义的单位（比如词、句子、段落）”，而 CONTROL<br />
系列组合键用来操作“与语言无关的基本单位（比如字符、行等等）”。<br />
类似的惯例在“行”与“句子”之间也同样适用：C-a 和 C-e 可以将光标移动到<br />
“一行”的头部和尾部；而 M-a 和 M-e 则将光标移动到“一句”的头部和尾部。<br />
&gt;&gt; 按两次 C-a，再按两次 C-e。<br />
按两次 M-a，再按两次 M-e。<br />
想一想为什么重复的 C-a 命令会没有作用，而重复的 M-a 命令则会让光标不断<br />
地回退到上一个句子。虽然这个类比规律并不严格，但是很自然。<br />
光标停留的位置也可以称作“点位”（point）。或者干脆说，光标指示出了屏幕<br />
上“点位”在文本中的位置。<br />
这里对简单的光标移动命令做一个总结，其中也包括了整词和整句的移动：<br />
C-f     向右移动一个字符<br />
C-b     向左移动一个字符<br />
M-f     向右移动一个词【对中文是移动到下一个标点符号】<br />
M-b     向左移动一个词【对中文是移动到上一个标点符号】<br />
C-n     移动到下一行<br />
C-p     移动到上一行<br />
C-a     移动到行首<br />
C-e     移动到行尾<br />
M-a     移动到句首<br />
M-e     移动到句尾<br />
&gt;&gt; 把上面所有的命令都练习几次，这些可都是最常用的命令。<br />
这里还要介绍两个重要的光标移动命令：M- （META 大于号）可以将光标移动到所有文字的最末尾。<br />
注意，在大部分键盘上，小于号（<br />
&gt;&gt; 试一试 M-<br />
&gt;&gt; 试一试 M-&gt; ，移到本快速指南的最末尾。<br />
然后再按几次 M-v 回到这里。<br />
如果你的键盘上有方向键的话，也可以用它们来移动光标。不过我们有三个理由<br />
推荐你学习 C-b 、C-f 、C-n 、和 C-p：（1）它们在任何键盘上都能用。（2）<br />
当你熟练使用 Emacs 之后，你会发现用这些组合键比用方向键要快得多，因为你<br />
的手不需要离开打字区。（3）一旦你习惯了使用这些组合键，你也可以很容易地<br />
适应其它更高级的光标移动命令。<br />
大部分的 Emacs 命令接受数字参数，并且对于多数命令而言，这些数字参数的作<br />
用是指定命令的重复次数。为一个命令指定数字参数（也就是重复次数）的方法<br />
是：先输入 C-u，然后输入数字作为参数，最后再输入命令。如果你有META （或<br />
EDIT 或 ALT）键，那么还有另一种办法：按住 META 键不放，然后输入数字。不<br />
过我们还是建议你用 C-u，因为它在任何终端机上都能用。这种数字参数也称为<br />
“前缀参数”，意思是说这个参数是先于使用它的命令而输入的。<br />
举例来说， C-u 8 C-f 会向前移动 8 个字符。<br />
&gt;&gt; 为 C-n 或者 C-p 指定一个数字参数，这样你可以只用一个命令就把光标移动<br />
到本行的附近。<br />
虽然大部分命令把数字参数解释为其重复次数，但是也有些命令例外，它们将数<br />
字参数另做它用。比如有些命令（我们目前还没学到）仅仅将前缀参数作为一个<br />
标志――只要给出有一个前缀参数，不管其值为何，它都会改变命令的功能。<br />
而 C-v 和 M-v 则属于另一种类型的例外。当给定一个参数时，它们将滚动你指<br />
定的“行数”，而不是“屏数”。举例来说，C-u 8 C-v 将屏幕向下滚动 8 行，<br />
而不是 8 屏。<br />
&gt;&gt; 现在试试看，输入 C-u 8 C-v。<br />
这个命令应该已经将文字向上滚动了 8 行。如果你想将它再次地向下滚动，你可<br />
以给定一个参数然后执行 M-v。<br />
如果你正在使用一个窗口系统，比如 X11 或者微软的 Windows，那么在 Emacs<br />
窗口的边缘应该有一个长方形的区域叫“滚动条”，你可以用鼠标操纵滚动条来<br />
滚动文字。<br />
&gt;&gt; 试着在“滚动条内的反白区域”上按一下鼠标中键。<br />
文字应该会滚动到鼠标所指示的位置。<br />
&gt;&gt; 当按住中键时，试着将鼠标上下移动。<br />
你会看到文字随着鼠标的移动而上下滚动。<br />
【Windows 版本符合 Windows 程序的传统操作习惯，上述操作不适用。】<br />
* 在 EMACS 失去响应的时候（WHEN EMACS IS HUNG）<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
如果 Emacs 对你的命令失去响应，你可以用 C-g 来安全地终止这条命令。C-g<br />
也可以终止一条执行过久的命令。<br />
C-g 还可以取消数字参数和只输入到一半的命令。<br />
&gt;&gt; 输入 C-u 100 设定一个值为 100 的数字参数，然后按 C-g。<br />
现在再按 C-f，光标应该只会移动一个字符，因为你已经用 C-g 取消了参数。<br />
如果你不小心按了一下 ，你也可以用 C-g 来取消它。<br />
【这个说法似乎有问题，因为按照这个按键顺序输入的应该是 C-M-g。<br />
取消  的正确做法是再连按两次 。】<br />
* 被禁用的命令（DISABLED COMMANDS）<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
有一些 Emacs 命令被“禁用”了，以避免初学者在不了解其确切功能的情况下误<br />
用而造成麻烦。<br />
如果你用到了一个被禁用的命令，Emacs 会显示一个提示消息，告诉你这个命令<br />
到底是干什么的，询问你是否要继续，并在得到你的肯定之后再执行这命令。<br />
如果你真的想用这条命令，在 Emacs 询问你的时候应该按空格。一般来说，如果<br />
你不想用，就按“n”。<br />
&gt;&gt; 试试 C-x C-l （这是一个被禁用的命令）<br />
然后用 n 来回答询问。<br />
* 窗格（WINDOWS）<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
Emacs 可以有多个窗格，每个窗格显示不同的文字。后面会介绍怎么对付多个窗<br />
格，现在我们先学会如何关掉多余的窗格。其实也很简单：<br />
C-x 1   只保留一个窗格（也就是关掉其它所有窗格）。<br />
也就是先按 CONTROL-x 然后再按 1。C-x 1 会保留光标所在的窗格，并将其扩大<br />
到整个屏幕，同时关掉所有其它的窗格。<br />
&gt;&gt; 把光标移到本行然后输入 C-u 0 C-l。<br />
&gt;&gt; 输入 CONTROL-h k CONTROL-f。观察当一个新窗格出现时当前窗格（用来显示<br />
CONTROL-f 命令的文档）是如何缩小的。<br />
&gt;&gt; 输入 C-x 1 关掉文档窗格。<br />
这个命令跟先前学过的命令不太一样，因为它包含了两个字符，以 CONTROL-x 开<br />
始。有一系列命令都是以 CONTROL-x 开始的，这些命令许多都跟“窗格、文件、<br />
缓冲区【缓冲区（buffer）会在后文详细介绍】”等等诸如此类的东西有关，其<br />
中有些命令可能包含了 2 个、3 个或者 4 个字符。<br />
* 插入与删除（INSERTING AND DELETING）<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
插入文字很简单，直接敲键盘就可以了。你能看到的字符，比如 A、7、* 等等，<br />
都被 Emacs 视为文字并且可以直接插入。敲 （回车键）会插入一个换<br />
行符。<br />
你可以用  来删除最后输入的一个字符，这个跟你在 Emacs 之外的用<br />
法应该一样。一般来说  就是位于  键上方某处的一个大块头<br />
的键，通常被标示为“Delete”、“Del”或者“Backspace”。<br />
如果你找到了“Backspace”键，那么它应该就是 ；这时哪怕你又在别<br />
的地方找到了一个“Del”键，那么它也应该不是 。<br />
一种更通用的说法是， 将删除位于光标前的一个字符。<br />
&gt;&gt; 现在就来试试――敲点字，然后按几下  删除它们。<br />
不用担心文件被修改，你做什么都没关系，这里就是专给你练习用的。<br />
如果一行文字很长、超出了窗格的宽度，显示不下的部分会在紧邻的下一行继续<br />
显示。这时会有一个反斜线（在控制台下是反斜线，如果你用图形窗口系统，则<br />
应该是一个小小的转弯箭头）显示在右边沿，表明这是某一行的接续显示。<br />
&gt;&gt; 输入文字，一直到屏幕的右边界，然后继续，你会看到一个接续行出现。<br />
&gt;&gt; 用  删掉一些文字，直到此行长度小于窗格宽度，接续行就消失了。<br />
换行符跟其它字符一样可以被删除。两行中间的换行符被删除后，这两行将会合<br />
并成一行。如果合并后的这一行太长，超出了窗格宽度，它就会以一个接续行来<br />
显示。<br />
&gt;&gt; 移动光标到某行的开头并输入 。<br />
这时该行将与其前一行一起被合并为一行。<br />
&gt;&gt; 输入  重新插入你刚才删除的换行符。<br />
前面讲过，大部分的 Emacs 命令都可以指定重复次数，这其中也包括输入字符的<br />
命令。重复执行输入字符的命令实际上就是输入多个相同的字符。<br />
&gt;&gt;  试试 C-u 8 *，这将会插入 ********。<br />
好，现在你应该已经掌握了最基本的的文本插入和修改功能，其实删除还可以<br />
“以词为单位”进行，下面是一个关于“删除”操作的小结：<br />
删除光标前的一个字符<br />
C-d          删除光标后的一个字符<br />
M-  移除光标前的一个词<br />
M-d          移除光标后的一个词<br />
C-k          移除从光标到“行尾”间的字符<br />
M-k          移除从光标到“句尾”间的字符<br />
【可能你已经注意到了“删除（delete）”和“移除（kill）”的用词区别，后<br />
文会有详细说明。】<br />
注意“ 和 C-d”还有“M- 和 M-d”是根据前述惯例从 C-f<br />
和 M-f 衍生出来的（其实不是控制字符，我们先忽略这一点）。C-k<br />
和 M-k 的关系在某种程度上与 C-e 和 M-e 一样――如果把“一行”和“一句”<br />
作一个类比的话。<br />
你也可以用一种通用的办法来移除缓冲区里的任何一部分：首先把光标移动到你<br />
想要移除的区域的一端，然后按 C-@ 或 C-SPC（任一即可，SPC指空格）【注意，<br />
C-SPC 往往被中文用户设定成输入法热键，如果这样，C-SPC 就被系统拦截而无<br />
法传递给 Emacs 了，因此这里还是推荐使用C-@。】，然后将光标移动到另一端，<br />
再按 C-w 就可以把位于这两点之间的所有文字移除了。<br />
&gt;&gt; 移动光标到上一段开头的“你”字。<br />
&gt;&gt; 输入 C-@ 。Emacs 应该会在屏幕的下方显示一个“Mark set”的消息。<br />
&gt;&gt; 移动光标到第二行中的“端”字。<br />
&gt;&gt; 输入 C-w，从“你”开始到“端”之前的文字被全部移除。<br />
注意,“移除（kill）”和“删除（delete）”的不同在于被移除的东西可以找回<br />
来，而被删除的就不行了。【实际上，移除掉的东西虽然看起来“消失”了，但<br />
实际上被 Emacs 记录了下来，因此还可以找回来；而删除掉的东西虽然也可能还<br />
在内存里，但是已经被 Emacs“抛弃”了，所以就找不回来了。】重新插入被移<br />
除的文字称为“召回（yank）”。一般而言，那些可能消除很多文字的命令会把<br />
消除掉的文字记录下来（它们被设定成了“可召回”），而那些只消除一个字符<br />
或者只消除空白的命令就不会记录被消除的内容（自然你也就无法召回了）。<br />
&gt;&gt; 移动光标到一非空白行的行头，然后输入 C-k 移除那一行上的文字。<br />
&gt;&gt; 再次 C-k，你可以看到它移除了跟在那一行后面的换行符。<br />
注意，单独的 C-k 会把一行的内容移除，而第二个 C-k 则会移除换行符，并使<br />
其后所有的行都向上移动。C-k 处理数字参数的方式很特别，它会把参数指定的<br />
那么多行连同其后的换行符一起移除，而不仅仅是重复 C-k 而已。比如 C-u 2<br />
C-k 会把两行以及它们的换行符移除；而如果只是输入 C-k 两次显然不是这个结<br />
果。<br />
将被移除的文字恢复的动作称为“召回（yanking）”。（就好像把别人从你身边<br />
移走的东西又猛力地拉回来。）你可以在你删除文字的地方召回，也可以在别的<br />
地方召回，还可以多次召回同样的文字以得到它的多个拷贝。<br />
召回的命令是 C-y。它会在光标所在处插入你最后移除的文字。<br />
&gt;&gt; 试试看，输入 C-y 将文字召回。<br />
如果你一次连按了好几下 C-k，那么所有被移除的行会被存储在一起，只要一个<br />
C-y 就可以把它们都召回。<br />
&gt;&gt; 在这里试试，连续按几次 C-k。<br />
现在再来恢复刚刚被我们移除的文字：<br />
&gt;&gt; 按 C-y。然后把光标往下移动几行，再按一次 C-y。<br />
现在你应该知道怎么复制文字了。<br />
C-y 可以召回最近一次移除的内容，那如何召回前几次移除的内容呢？它们当然<br />
没有丢，你可以用 M-y 来召回它们。在用 C-y 召回最近移除的文字之后，紧接<br />
着再按 M-y 就可以召回再前一次被移除的内容，再按一次 M-y 又可以召回再上<br />
一次的……连续使用 M-y 直到找到你想要召回的东西，然后什么也不用做，继续<br />
编辑就行了。<br />
如果连续按 M-y 很多次，你可能会回到起始点，也就是最近移除的文字。<br />
【看得出这实际上是一个环。】<br />
&gt;&gt; 移除一行，移动一下光标，然后再移除另外一行。<br />
按 C-y 将第二次移除的那行召回来。<br />
紧接着再按 M-y，它将会被第一次移除的那行取代。<br />
试着再按几下 M-y 看看会发生什么。<br />
再继续，直到第二行被召回来，然后再做个几次。<br />
如果感兴趣，你可以试着给 M-y 指定一个正的或负的参数。<br />
* 撤销（UNDO）<br />
&#8212;&#8212;&#8212;&#8212;&#8211;<br />
如果你修改了一段文字，又觉得改得不好，可以用 undo 命令进行撤销：<br />
C-x u。<br />
通常 C-x u 会消除一个命令所造成的所有改变；如果你在一行中连续多次地使用<br />
C-x u，你会把以前的命令也依次撤销。<br />
但是有两个例外：<br />
1） 没有改变文字的命令不算（包括光标移动命令和滚动命令）<br />
2） 从键盘输入的字符以组为单位――每组 20 个字符――来进行处理。<br />
（这是为了减少你在撤销“插入文字”动作时需要输入 C-x u 的次数）<br />
&gt;&gt; 用 C-k 将这一行移除，然后输入 C-x u ，它会再次出现。<br />
C-_ 也是撤销命令；它的作用跟 C-x u 一样，但是它比较容易多次输入。C-_ 的<br />
缺点是在某些键盘上可能不太容易按，这也正是我们同时提供 C-x u 的原因。在<br />
某些终端上，你可以按住 CONTROL 再按“/”来输入 C-_。<br />
数字参数对于 C-_ 和 C-x u 的意义是执行撤销的重复次数。<br />
* 文件（FILE）<br />
&#8212;&#8212;&#8212;&#8212;&#8211;<br />
想保存工作成果就要记得存盘，否则一旦退出 Emacs 你编辑的文字就会丢失。要<br />
存盘，就要在编辑前“寻找”到一个存盘文件。（这个过程通常也被称为“访问”<br />
文件。）<br />
寻找到一个文件意味着你可以在 Emacs 里查看这个文件的内容。从许多角度看，<br />
这就等于你在直接编辑这个文件，只是你所做的修改只有在“存盘”的时候才会<br />
被写入文件。也正因为如此，你可以丢弃一个写到一半的文件而不必把这个残缺<br />
文件也保存到计算机上。在存盘的时候，Emacs 会把存盘前的文件重命名保存，<br />
以防你改完之后又想反悔。<br />
在屏幕的下方，你应该能够看到头尾都是短线“-”的一行，行首通常是一些诸如<br />
“&#8211;:&#8211; TUTORIAL.cn”的文字，这些文字代表了你当前正在访问的文件。比如你<br />
现在正在访问的文件叫“TUTORIAL.cn”，它只是一个给你临时使用的拷贝。每当<br />
Emacs 寻找到一个文件，文件名就会出现在这个位置。<br />
寻找文件的命令有一个特点，那就是你必须给出文件名。我们称这个命令“从终<br />
端读入了一个参数”（在这里，这个参数显然就是文件名）。在你输入这条命令<br />
之后：<br />
C-x C-f   寻找一个文件<br />
Emacs 会提示你输入文件名。你输入的文件名会出现在屏幕最底端的一行，这一<br />
行被称为小缓冲（minibuffer），在小缓冲里你可以使用通常的 Emacs 编辑命令<br />
来编辑文件名。<br />
在小缓冲里输入文件名（其实输入其它东西也一样）时可以用 C-g 取消。<br />
&gt;&gt; 输入 C-x C-f，然后输入 C-g<br />
这会关掉小缓冲，同时也会取消使用小缓冲的 C-x C-f 命令。<br />
当然了，你也没有找任何文件。<br />
用  结束文件名的输入。这之后 C-x C-f 命令开始工作并找到你指定的<br />
文件。小缓冲在 C-x C-f 命令结束之后也会消失。<br />
眨眼间文件就被显示在屏幕上，你可以开始编辑了。存盘用这条命令：<br />
C-x C-s   储存这个文件<br />
这条命令把 Emacs 中的文字存储到文件中。第一次存盘的时候 Emacs 会将原文<br />
件重命名以备份。重命名的规则通常是在原文件名之后添加一个“~”字符。<br />
【对许多人来说，这是一个烦人的特性，关掉文件备份可以用如下命令：<br />
M-x customize-variable  make-backup-files 】<br />
存盘结束后，Emacs 会显示写入文件的文件名。你最好养成经常存盘的习惯，这<br />
可以减少系统崩溃和死机给你带来的损失。<br />
&gt;&gt; 输入 C-x C-s 把本快速指南存下来。<br />
你会在屏幕的下方看到一条消息：“Wrote &#8230;TUTORIAL.cn”。<br />
你不但可以寻找一个已有的文件来查看或编辑，还可以寻找一个不存在的文件。<br />
实际上这正是 Emacs 创建新文件的方法：找到不存在的新文件。只有在存盘的时<br />
候，Emacs 才会真正创建这个文件。而在这之后的一切就跟编辑一个已有文件没<br />
有区别了。<br />
* 缓冲区（BUFFER）<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
你可以用 C-x C-f 找到并打开第二个文件，但第一个文件仍然在 Emacs 中。要<br />
切回第一个文件，一种办法是再用一次 C-x C-f。这样，你就可以在 Emacs 中同<br />
时打开多个文件。<br />
&gt;&gt; 用 C-x C-f foo  的方式建立一个名为“foo”的文件。<br />
输入一些文字，再用 C-x C-s 保存文件“foo”。<br />
最后，输入 C-x C-f TUTORIAL.cn  回到这里。<br />
Emacs 把每个编辑中的文件都放在一个称为“缓冲区（buffer）”的地方。每寻<br />
找到一个文件，Emacs 就在其内部开辟一个缓冲区。用下面的命令可以列出当前<br />
所有的缓冲区：<br />
C-x C-b   列出缓冲区<br />
&gt;&gt; 现在就试一下 C-x C-b<br />
观察一下缓冲区是如何被命名的，它很可能跟与其对应的文件同名。实际上，一<br />
个 Emacs 窗格里的任何文字都是某个缓冲区的一部分。<br />
&gt;&gt; 输入 C-x 1 离开缓冲区列表<br />
不管存在多少缓冲区，任何时候都只能有一个“当前”缓冲区，也就是你正在编<br />
辑的这个。如果你想编辑其它的缓冲区，就必须“切换”过去。上面讲过，用<br />
C-x C-f 是一种办法。不过还有一个更简单的办法，那就是用 C-x b。用这条命<br />
令，你必须输入缓冲区的名称。<br />
&gt;&gt; 输入 C-x b foo  以回到文件“foo”的缓冲区。<br />
然后输入 C-x b TUTORIAL.cn  回到这里。<br />
大多数情况下，缓冲区与跟其对应的文件是同名的（不包括目录名），不过这也<br />
不是绝对的。用 C-x C-b 得到的缓冲区列表总是显示缓冲区名。<br />
你在 Emacs 窗格里看到的“任何”文字都一定属于某个缓冲区。然而，缓冲区未<br />
必有对应文件：比如显示缓冲区列表的缓冲区就是这样。再比如“*Messages*”<br />
缓冲区也没有对应文件，这个缓冲区里存放的都是在 Emacs 底部出现的消息。<br />
&gt;&gt; 输入 C-x b *Messages*  瞅瞅消息缓冲区里都有什么东西。<br />
然后再输入 C-x b TUTORIAL.cn  回到这里。<br />
如果你对某个文件做了些修改，然后切换到另一个文件，这个动作并不会帮你把<br />
前一个文件存盘。对第一个文件的修改仍然仅存在于 Emacs 中，也就是在它对应<br />
的缓冲区里。并且，对第二个文件的修改也不会影响到第一个文件。这很有用，<br />
但是也挺麻烦：因为如果你想要存储第一个文件，还需要先 C-x C-f 切换回去再<br />
用 C-x C-s 存盘。你需要一个更简便的方法，而 Emacs 已经为你准备好了：<br />
C-x s   保存多个缓冲区<br />
C-x s 会找出所有已被修改但尚未存盘的缓冲区，然后向你逐个询问：是否需要<br />
存盘？<br />
&gt;&gt; 插入一行文字，然后输入 C-x s。<br />
它应该会问你，是否要储存名为 TUTORIAL.cn 的缓冲区？<br />
按“y”告诉它你想存盘。<br />
* 命令集扩展（EXTENDING THE COMMAND SET）<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
Emacs 的命令就像天上的星星，数也数不清。把它们都对应到 CONTROL 和 META<br />
组合键上显然是不可能的。Emacs 用扩展（eXtend）命令来解决这个问题，扩展<br />
命令有两种风格：<br />
C-x     字符扩展。  C-x 之后输入另一个字符或者组合键。<br />
M-x     命令名扩展。M-x 之后输入一个命令名。<br />
很多扩展命令都相当有用，虽然与你已经学过的命令比起来，他们可能不那么常<br />
用。我们早已经见过一些扩展命令了，比如用 C-x C-f 寻找文件和用 C-x C-s<br />
保存文件；退出 Emacs 用的 C-x C-c 也是扩展命令。（不用担心退出 Emacs 会<br />
给你带来什么损失，Emacs 会在退出之前提醒你存盘的）<br />
在控制台下，C-z 可以暂时离开 Emacs――当然，你还可以再回来。<br />
在允许 C-z 的系统中，C-z 会把 Emacs“挂起”，也就是说，它会回到 shell<br />
但不退出 Emacs。在常用的 shell 中，通常可以用“fg”或者“%emacs”命令再<br />
次回到 Emacs 中。<br />
在没有提供挂起功能的系统中，C-z 会在 Emacs 之下创建一个子 shell 来让你<br />
运行其它程序，并且再次“回到”Emacs 中――虽然我们并没有真正离开过。这<br />
种情况下，通常用 shell 命令“exit”从子 shell 回到 Emacs。<br />
你最好在打算退出登陆的时候再用 C-x C-c。在 Emacs 被诸如邮件处理程序之类<br />
的外部程序调用之后，也可以用 C-x C-c 退出。不过一般来讲，如果你不想退出<br />
登录，最好还是把 Emacs 挂起而不是退出。<br />
C-x 的扩展命令有很多，下面列出的是你已经学过的：<br />
C-x C-f         寻找文件。<br />
C-x C-s         保存文件。<br />
C-x C-b         列出缓冲区。<br />
C-x C-c         离开 Emacs。<br />
C-x 1           关掉其它所有窗格，只保留一个。<br />
C-x u           撤销。<br />
用命令名扩展的命令通常并不常用，或只用在部分模式下。比如 replace-string<br />
（字符串替换）这个命令，它会在全文范围内把一个字符串替换成另一个。在输<br />
入 M-x 之后，Emacs 会在屏幕底端向你询问并等待你输入命令名。如果你想输入<br />
“replace-string”，其实只需要敲“repl s”就行了，Emacs 会帮你自动<br />
补齐。输入完之后按  。<br />
字符串替换命令需要两个参数――被替换的字符串和用来替换它的字符串。每个<br />
参数的输入都以换行符来结束。<br />
&gt;&gt; 将光标移到本行下面第二行的空白处，然后输入<br />
M-x repl schangedaltered。<br />
【以下保留一行原文，以应练习之需：】<br />
Notice how this line has changed: you&#8217;ve replaced&#8230;<br />
请注意这一行的变化：在光标之后的范围内，你已经将“changed”这个词――不<br />
论它在哪里出现――全部用“altered”替换掉了。<br />
* 自动保存（AUTO SAVE）<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
如果你已经修改了一个文件，但是还没来得及存盘你的计算机就罢工了，那么你<br />
所做的修改就很可能会丢失。为了避免这样的不幸发生，Emacs 会定期将正在编<br />
辑的文件写入一个“自动保存”文件中。自动保存文件的文件名的头尾各有一个<br />
“#”字符，比如你正在编辑的文件叫“hello.c”，那么它的自动保存文件就叫<br />
“#hello.c#”。这个文件会在正常存盘之后被 Emacs 删除。<br />
所以，假如不幸真的发生了，你大可以从容地打开原来的文件（注意不是自动保<br />
存文件）然后输入 M-x recover file 来恢复你的自动保存文件。在提<br />
示确认的时候，输入 yes。<br />
* 回显区（ECHO AREA）<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
如果 Emacs 发现你输入多字符命令的节奏很慢，它会在窗格的下方称为“回显区”<br />
的地方给你提示。回显区位于屏幕的最下面一行。<br />
* 状态栏（MODE LINE）<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
位于回显区正上方的一行被称为“状态栏”。状态栏上会显示一些信息，比如：<br />
&#8211;:**  TUTORIAL.cn       (Fundamental)&#8211;L670&#8211;54%&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
状态栏显示了 Emacs 的状态和你正在编辑的文字的一些信息。<br />
你应该知道文件名的意思吧？就是你找到的那个文件嘛。-NN%&#8211; 显示的是光标在<br />
全文中的位置。如果位于文件的开头，那么就显示 &#8211;Top&#8211; 而不是 &#8211;00%&#8211;；如<br />
果位于文件的末尾，就显示 &#8211;Bot&#8211;。如果文件很小，一屏就足以显示全部内容，<br />
那么状态栏会显示 &#8211;All&#8211;。<br />
“L” 和其后的数字给出了光标所在行的行号。<br />
最开头的星号（*）表示你已经对文字做过改动。刚刚打开的文件肯定没有被改动<br />
过，所以状态栏上显示的不是星号而是短线（-）。<br />
状态栏上小括号里的内容告诉你当前正在使用的编辑模式。缺省的模式是<br />
Fundamental，就是你现在正在使用的这个。它是一种“主模式”。<br />
Emacs 的主模式林林总总。有用来编辑程序代码的――比如 Lisp 模式；也有用<br />
来编辑各种自然语言文本的――比如 Text 模式。任何情况下只能应用一个主模<br />
式，其名称会显示在状态栏上，也就是现在显示“Fundamental”的地方。<br />
主模式通常会改变一些命令的行为。比方说，不管编辑什么语言的程序代码，你<br />
都可以用一个相同的命令来添加注释。但是在不同的语言中注释的语法往往是不<br />
同的，这时不同的主模式就会用各自不同的语法规则来添加注释。主模式都是可<br />
以用 M-x 启动的扩展命令，M-x fundamental-mode 就可以切换到 Fundamental<br />
模式。<br />
编辑自然语言文本――比如现在――应该用 Text 模式。<br />
&gt;&gt; 输入 M-x text mode。<br />
别担心，什么都没变。不过细心一些可以发现，M-f 和 M-b 现在把单引号（&#8217;）<br />
视为词的一部分了。而在先前的 Fundamental 模式中，M-f 和 M-b 都将单引号<br />
视为分隔单词的符号。<br />
主模式通常都会搞一些类似的小动作，因为很多命令其实完成的是“相同的工<br />
作”，只是在不同环境下会有不同的工作方式而已。【所谓“求同存异”，在<br />
Emacs 里得到了很好的体现】<br />
用 C-h m 可以查看当前主模式的文档。<br />
&gt;&gt; 用 C-u C-v 将本行带到屏幕的最上方。<br />
&gt;&gt; 输入 C-h m，看看 Text 模式与 Fundamental 模式有哪些不同。<br />
&gt;&gt; 输入 C-x 1 关掉文档窗格。<br />
主模式之所以称之为“主（major）”模式，是因为同时还有“辅模式”（minor<br />
mode）存在。辅模式并不能替代主模式，而是提供一些辅助的功能。每个辅模式<br />
都可以独立地开启和关闭，跟其它辅模式无关，跟主模式也无关。所以你可以不<br />
使用辅模式，也可以只使用一个或同时使用多个辅模式。<br />
有一个叫做自动折行（Auto Fill）的辅模式很有用，特别是在编辑自然语言文本<br />
的时候。启用自动折行后，Emacs 会在你打字超出一行边界时自动替你换行。<br />
用 M-x auto fill mode 启动自动折行模式。再用一次这条命令，自动<br />
折行模式会被关闭。也就是说，如果自动折行模式没有被开启，这个命令会开启<br />
它；如果已经开启了，这个命令会关闭它。所以我们说，这个命令可以用来“开<br />
关（toggle）”模式。<br />
&gt;&gt; 现在输入 M-x auto fill mode。然后随便敲点什么，直到你看到它<br />
分成两行。你必须敲一些空格，因为 Auto Fill 只在空白处进行断行。<br />
【输入空格对英文来说是必须的，而对中文则不必。】<br />
行边界通常被设定为 70 个字符【这里指英文字符】，你可以用 C-x f 命令配合<br />
数字参数来重新设定它。<br />
&gt;&gt; 输入 C-x f 并传递参数 20： C-u 2 0 C-x f。<br />
然后输入一些文字，观察 Emacs 的自动折行动作<br />
最后再用 C-x f 将边界设回 70。<br />
如果你在段落的中间做了一些修改，那么自动折行模式不会替你把整个段落重新<br />
折行，你需要用 M-q 手动折行。注意，光标必须位于你需要折行的那一段里。<br />
&gt;&gt; 移动光标到前一段中，然后输入 M-q。<br />
* 搜索（SEARCHING）<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
Emacs 可以向前或向后搜索字符串。搜索命令是一个移动光标的命令：搜索成功<br />
后，光标会停留在搜索目标出现的地方。<br />
Emacs 的搜索命令的独特之处在于，它是“渐进的（incremental）”。意思是搜<br />
索与输入同时进行：你在键盘上一字一句地输入搜索词的过程中，Emacs 就已经<br />
开始替你搜索了。<br />
C-s 是向前搜索，C-r 是向后搜索。不过手别这么快！别着急试。<br />
在按下 C-s 之后，回显区里会有“I-search”字样出现，表明目前 Emacs 正处<br />
于“渐进搜索”状态，并等待你输入搜索字串。按  可以结束搜索。<br />
&gt;&gt; 输入 C-s 开始一个搜索。注意敲慢一点，一次输入一个字符。<br />
慢慢输入“cursor”这个词，每敲一个字都停顿一下并观察光标。<br />
现在你应该已曾经找到“cursor”这个词了。<br />
&gt;&gt; 再按一次 C-s，搜索下一个“cursor”出现的位置。<br />
&gt;&gt; 现在按四次退格键，看看光标是如何移动的。<br />
&gt;&gt; 敲  结束搜索。<br />
看仔细了么？在一次渐进式搜索中，Emacs 会尝试跳到搜索目标出现的位置。要<br />
跳到下一个命中位置，就再按一次 C-s。如果找不到目标，Emacs 会发出“哔”<br />
的一声，告诉你搜索失败。在整个过程中，都可以用 C-g 来终止搜索。【你会发<br />
现 C-g 会让光标回到搜索开始的位置，而  则让光标留在搜索结果上，<br />
这是很有用的功能。】<br />
注意：在某些终端下，输入 C-x C-s 会冻结屏幕【屏幕没有任何输出】，使你看<br />
不到 Emacs 的任何变化。其原因是操作系统的“流量控制”功能拦截了 C-s 并<br />
冻结了屏幕。用 C-q 可以解除屏幕冻结。要解决这个问题，请参考 Emacs 手册<br />
里的“Spontaneous Entry to Incremental Search”一节【Emacs 手册可能还没<br />
有中文翻译】，那里提供了一些有用的建议。<br />
在渐进式搜索中，按退格键会删除目标字符串的最后一个字符，并且光标会回到<br />
最近一次搜索的命中位置。比如你已经输入了“c”，光标就停在“c”第一次出<br />
现的位置，再输入“u”，光标停在“cu”第一次出现的位置，这时再按退格键，<br />
“u”就从搜索字串中消失了，然后光标会回到“c”第一次出现的位置。<br />
另外，如果你在搜索的时候输入了 CONTROL 或者 META 组合键的话，搜索可能会<br />
结束。（也有例外，比如 C-s 和 M-r 这些用于搜索的命令。）<br />
前面说的都是“向下”搜索，如果想“向上”搜索，可以用 C-r。C-r 与 C-s<br />
相比除了搜索方向相反之外，其余的操作都一样。<br />
* 多窗格（MULTIPLE WINDOWS）<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
Emacs 的迷人之处很多，能够在屏幕上同时显示多个窗格就是其中之一。<br />
&gt;&gt; 移动光标到这一行，然后输入 C-u 0 C-l。<br />
&gt;&gt; 现在输入 C-x 2，它会将屏幕划分成两个窗格。<br />
这两个窗格里显示的都是本篇快速指南，而光标则停留在上方的窗格里。<br />
&gt;&gt; 试试用 C-M-v 滚动下方的窗格。<br />
（如果你并没有 META 键，用 ESC C-v 也可以。）<br />
【向上滚动是 C-M-S-v，也就是同时按住 CONTROL、META 和 SHIFT 再按 v】<br />
&gt;&gt; 输入 C-x o（“o”指的是“其它（other）”），<br />
将光标转移到下方的窗格。<br />
&gt;&gt; 在下方的窗格中，用 C-v 和 M-v 来滚动。<br />
同时继续在上方的窗格里阅读这些指导。<br />
&gt;&gt; 再输入 C-x o 将光标移回到上方的窗格里。<br />
光标会回到它在上方窗格中原本所在的位置。<br />
连续使用 C-x o 可以遍历所有窗格。每一个窗格都有它自己的光标位置，但是只<br />
有一个窗格会真正显示这个光标。【其它窗格在控制台下不会显示光标，在图形<br />
窗口下缺省显示为镂空光标。】一般所有的编辑命令都作用于这个光标所在的窗<br />
格，我们称这个窗格为“被选中的窗格”。<br />
当你在一个窗格中编辑，但用另一个窗格作为参考的时候，C-M-v 是很有用的命<br />
令。你可以始终处于编辑窗格中，然后用 C-M-v 命令滚动另外一个窗格。【比如<br />
翻译和校对就很适合用这种方式进行。】<br />
C-M-v 是一个 CONTROL-META 组合键。如果你有 META 键的话，可以同时按住<br />
CONTROL 和 META 键并输入 v。CONTROL 和 META 键先按哪个都可以，因为它们<br />
只是用来“修饰（modify）”你输入的字符的。<br />
如果你并没有 META 键，你也可以用 ESC 来代替，不过这样的话就要注意按键顺<br />
序了：你必须先输入 ESC ，然后再输入 CONTROL-v。CONTROL-ESC v 是没用的，<br />
因为 ESC 本身是一个字符键，而不是一个修饰键（modifier key）。<br />
&gt;&gt; （在上方窗格里）输入 C-x 1 关掉下方窗格。<br />
（如果你在下方的窗格里输入 C-x 1，那么就会关掉上方的窗格。你可以把这个<br />
命令看成是“只保留一个窗格”――就是我们正在编辑的这个。）<br />
不同的窗格可以显示不同的缓冲区。如果你在一个窗格里用 C-x C-f 打开了一个<br />
文件，另一个窗格并不会发生什么变化。任何一个窗格里都可以用来打开文件。<br />
用下面的方法可以在一个新开窗格里打开文件：<br />
&gt;&gt; 输入 C-x 4 C-f，紧跟着输入一个文件名，再用  结束。<br />
可以看到你指定的文件出现在下方的窗格中，同时光标也跳到了那里。<br />
&gt;&gt; 输入 C-x o 回到上方的窗格，然后再用 C-x 1 关掉下方窗格。<br />
* 递归编辑（RECURSIVE EDITING LEVELS）<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
有时候你会进入所谓的“递归编辑”。递归编辑状态由位于状态栏的方括号所指<br />
示，其中包含了用小括号来指明的模式名称。比如说，你有时可能会看到<br />
[(Fundamental)]，而不是 (Fundamental)。【比如在用 M-% 进行交互式替换的<br />
时候你又用了 C-s 进行搜索，这时替换模式并没有结束，但你又进入了搜索模式，<br />
这就是所谓的递归编辑。】<br />
离开递归编辑可以用 ESC ESC ESC。这是一个最通用的“离开”命令，你甚至可<br />
以使用它来关掉多余的窗格，或者离开小缓冲。<br />
&gt;&gt; 输入 M-x 进入小缓冲；然后输入 ESC ESC ESC 离开。<br />
你不能用 C-g 退出递归编辑，因为 C-g 的作用是取消“本层递归编辑之内”的<br />
命令和其参数（arguments）。<br />
* 获得更多帮助（GETTING MORE HELP）<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
本快速指南的目的仅仅是帮助你在 Emacs 的海洋里下水，不至于束手无策望洋兴<br />
叹。有关 Emacs 的话题可谓汗牛充栋，这里自然是难尽万一。不过 Emacs 很理<br />
解你求知若渴的心情，因为它提供的强大功能实在是太多了。为此，Emacs 提供<br />
了一些命令来查看 Emacs 的命令文档，这些命令都以 CONTROL-h 开头，这个字<br />
符也因此被称为“帮助（Help）字符”。<br />
要使用帮助（Help）功能，请先输入 C-h，然后再输入一个字符以说明你需要什<br />
么帮助。如果你连自己到底需要什么帮助都不知道，那么就输入 C-h ?，Emacs<br />
会告诉你它能提供了哪些帮助。如果你按了 C-h 又想反悔，可以用 C-g 取消。<br />
（有些主机改变了 C-h 的意义，这种以己度人外加一刀切的做法确实不太好，不<br />
过倒是让你可以义正辞严地抱怨他们的系统管理员。话说回来，如果你按 C-h 之<br />
后没有任何帮助信息显示出来，那么试试 F1 键或者 M-x help  。）<br />
最基本的帮助功能是 C-h c。输入 C-h c 之后再输入一个组合键，Emacs 会给出<br />
这个命令的简要说明。<br />
&gt;&gt; 输入 C-h c C-p。<br />
显示的消息应该会是这样：<br />
C-p runs the command previous-line<br />
这条消息显示了 C-p 命令对应的函数名，函数名主要用来定制和扩展 Emacs。命<br />
令的功能由函数完成，所以函数名本身也可以被看成是最简单的文档――至少对<br />
于你已经学过的命令来说，它们的函数名足以解释它们的功能了。<br />
多字符命令一样可以用 C-h c 来查看。<br />
想得到更多的信息，请把 C-h c 换成 C-h k 试试看。<br />
&gt;&gt; 输入 C-h k C-p。<br />
上面的命令会新打开一个 Emacs 窗格以显示函数的名称及其文档。你读完之后可<br />
以用 C-x 1 关掉这个帮助窗格。当然你并不需要立即这样做，你完全可以先在编<br />
辑窗格里做点别的事情，然后再关掉帮助窗格。<br />
还有一些其它有用的 C-h 命令：<br />
C-h f        解释一个函数。需要输入函数名。<br />
&gt;&gt; 试试看，输入 C-h f previous-line。<br />
Emacs 会给出它所知道的所有有关“实现 C-p 命令功能的函数”的信息。<br />
C-h v 用来显示 Emacs 变量的文档。Emacs 变量可以被用来“定制 Emacs 的行<br />
为”。同样，你需要输入变量的名称。<br />
C-h a        相关命令搜索（Command Apropos）。<br />
输入一个关键词然后 Emacs 会列出所有命令名中包含此关键词<br />
的命令。这些命令全都可以用 M-x 来启动。对于某些命令来说，<br />
相关命令搜索还会列出一两个组合键。<br />
&gt;&gt; 输入 C-h a file。<br />
Emacs 会在另一个窗格里显示一个 M-x 命令列表，这个列表包含了所有名称中含<br />
有“file”的命令。你可以看到像“C-x C-f”这样的组合键显示在“find-file”<br />
这样的命令名的旁边。<br />
&gt;&gt; 用 C-M-v 来回滚动 help 窗格，多试几次。<br />
&gt;&gt; 输入 C-x 1 来删除 help 窗格。<br />
C-h i        阅读联机手册（也就是通常讲的 Info）。<br />
这个命令会打开一个称为“*info*”的特殊缓冲区，在那里，<br />
你可以阅读安装在系统里的软件包使用手册。要读 Emacs 的使<br />
用手册，按 m emacs  就可以了。如果你之前从没用<br />
过 Info 系统，那么请按“?”，Emacs 会带你进入 Info 的使<br />
用指南。在看完本快速指南之后，Emacs Info 会成为你的主要<br />
参考文档。<br />
* 更多精彩（MORE FEATURES）<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
想学习更多的使用技巧，Emacs 使用手册（manual）值得一读。你可以读纸版的<br />
书，也可以看电子版的联机手册（可以从 Help 菜单进入或者按 F10 h r）。提<br />
两个你可能会很感兴趣的功能吧，一个是可以帮你少敲键盘的 completion（自动<br />
补全），另一个是方便文件处理的 dired（目录编辑）。<br />
Completion 可以替你节省不必要的键盘输入。比如说你想切换到 *Message* 缓<br />
冲区，你就可以用 C-x b *M 来完成。只要 Emacs 能够根据你已经输入的<br />
文字确定你想要输入的内容，它就会自动帮你补齐。有关 Completion 的详细说<br />
明可以在 Emacs Info 中的“Completion”一节里找到。<br />
Dired 能够在一个缓冲区里列出一个目录下的所有文件（可以选择是否也列出子<br />
目录），然后你可以在这个文件列表上完成对文件的移动、访问、重命名或删除<br />
等等操作。Dired 也在 Emacs Info 中有详细介绍，参见“Dired”一节。<br />
Emacs 使用手册里还有许许多多的精彩功能等着你来了解。<br />
* 总结（CONCLUSION）<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
记住，要退出 Emacs 请用 C-x C-c。要暂时切换到 shell 并且稍后再回到<br />
Emacs 里来，请用 C-z。【切换到 shell 仅对控制台下的 Emacs 有效】<br />
本文完全是为零起点新手所写的起步教程。如果你觉得哪里还看不明白，千万不<br />
要怀疑自己，那一定是我们没有写好。我们永远欢迎你的不满和抱怨。<br />
* 翻译（TRANSLATION）<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
翻译：孙一江<br />
校对：水木社区（<br />
<a href="http://www.newsmth.net/" target="_blank">www.newsmth.net</a><br />
）Emacs 板众多网友及众多 Emacs 中文用户<br />
Emacs 快速指南（Tutorial）早有两个刘昭宏的中文译本，繁简各一。其简体版本<br />
（TUTORIAL.cn）基本由繁体版本（TUTORIAL.zh）经词语替换而得。然而繁简中文<br />
不仅在用词习惯上有所不同，更有诸多表达方式与句法方面的差异，因此一直以来<br />
用户使用 TUTORIAL.cn 都会略觉生硬和晦涩。这次重新翻译 TUTORIAL.cn 的动机<br />
正是源于这种体验，希望我们的工作能够让本文更好地发挥其作用。TUTORIAL.zh<br />
的译文质量很高，在翻译过程中给予过我们许多借鉴和参考，在此对刘昭宏的工作<br />
表示感谢。<br />
翻译过程中最大的挑战莫过于术语译词的选择了。经过水木社区 Emacs 板热心网<br />
友小范围内的讨论，我们选择了现在的译法。用户的广泛参与是自由软件生命力<br />
的源泉，所以如果你有任何建议、勘误或想法，请用你喜欢的方式向我们提出。<br />
你可以通过电子邮件直接联系译者，也可以放到 GNU Emacs 的开发邮件列表或者<br />
水木社区的 Emacs 板上进行讨论。<br />
下面列出主要术语的译词对照，并给出注释说明：<br />
command               命令<br />
cursor                光标<br />
scrolling             滚动<br />
numeric argument      数字参数<br />
window                窗格 [1]<br />
insert                插入<br />
delete                删除 [2]<br />
kill                  移除 [2]<br />
yank                  召回 [2]<br />
undo                  撤销<br />
file                  文件<br />
buffer                缓冲区<br />
minibuffer            小缓冲<br />
echo area             回显区<br />
mode line             状态栏<br />
search                搜索<br />
incremental search    渐进式搜索 [3]<br />
[1] “window”一词在计算机相关的领域一般都被译为“窗口”。但是在 Emacs<br />
中，还有一个“frame”的概念。在被广泛使用的 X 窗口系统和微软的视窗<br />
（Windows）系列操作系统中，Emacs 的一个“frame”就是一个“窗口”，因<br />
此把 Emacs 中的“frame”译成“窗口”更加符合通常的习惯。这样，Emacs<br />
中的“window”就只能译成“窗格”了。我们认为 Emacs 中 window 和<br />
frame 的关系用窗格和窗口来类比是十分形象的。<br />
《学习GNU Emacs》（第二版）一书对“window”和“frame”的翻译与本教程<br />
刚好相反（分别译作“窗口”和“窗格”）。在此特别注明，以消除可能产生<br />
的疑惑。（感谢李旭章  指出）<br />
[2] 对于“delete”和“kill”的区别，正文已经给出了详细的说明。“删除”和<br />
“移除”相比较起来，前者更多地隐含着“破坏”和“不可恢复”的意思，而<br />
后者更多地隐含着“被转移”和“可恢复”的意思。因此分别选择它们作为上<br />
述两词的译词，希望能够体现出区别。“yank”在中文文档中鲜有对应译词出<br />
现，翻译的困难较大。究其本意是：“a strong sudden pull”（参见韦氏词<br />
典），即“猛然拉回”。在原文档中 yank 被引申为“将先前移除的东西再移<br />
回来”这个意思，所以我们选择了“召回”一词与其对应。<br />
[3] “incremental”一词在计算机著作中广泛出现，被广泛接受的中文译词有两<br />
个：“增量的”和“渐进的”。“incremental search”翻译成“增量式搜索<br />
”或者“渐进式搜索”都讲得通，且都有各自的形象之处。还是参考原文对其<br />
的解释：“&#8230; means that the search happens while you type in the<br />
string to search for”。意思是之所以称其为“incremental search”，是<br />
因为“在你输入搜索字符串的过程中，搜索就已经在进行了”。我们认为“增<br />
量的”更加强调在现有基础上的变化（比如“增量备份”，“增量编译”）；<br />
而“渐进的”更加强调过程的逐渐发展，也更加符合原文的意思。因此我们选<br />
择将“incremental search”译作“渐进式搜索”。<br />
* 版权声明（COPYING）<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
This tutorial descends from a long line of Emacs tutorials<br />
starting with the one written by Stuart Cracraft for the original Emacs.<br />
This version of the tutorial, like GNU Emacs, is copyrighted, and<br />
comes with permission to distribute copies on certain conditions:<br />
Copyright (C) 1985, 1996, 1998, 2001, 2002, 2003, 2004,<br />
2005, 2006, 2007, 2008, 2009  Free Software Foundation, Inc.<br />
Permission is granted to anyone to make or distribute verbatim copies<br />
of this document as received, in any medium, provided that the<br />
copyright notice and permission notice are preserved,<br />
and that the distributor grants the recipient permission<br />
for further redistribution as permitted by this notice.<br />
Permission is granted to distribute modified versions<br />
of this document, or of portions of it,<br />
under the above conditions, provided also that they<br />
carry prominent notices stating who last altered them.<br />
The conditions for copying Emacs itself are more complex, but in the<br />
same spirit.  Please read the file COPYING and then do give copies of<br />
GNU Emacs to your friends.  Help stamp out software obstructionism<br />
(&#8220;ownership&#8221;) by using, writing, and sharing free software!<br />
【下面为版权声明的译文，仅供参考。实际法律效力以英文原文为准。】<br />
本快速指南沿袭自历史悠久的 Emacs 快速指南，可上溯至 Stuart Cracraft 为最<br />
初的 Emacs 所作的版本。<br />
本篇文档与 GNU Emacs 一样拥有版权，并允许在下列条件的约束下发行其拷贝：<br />
Copyright (C) 1985, 1996, 1998, 2001, 2002, 2003, 2004, 2005, 2006,<br />
2007, 2008, 2009  Free Software Foundation, Inc.<br />
本文档允许在不变更文档内容的情况下由任何人发布在任何媒体上，同时必须<br />
完整保留版权和许可声明，且需给予受众与发行者完全相同的、如本声明所允<br />
许的再次发行本文档的权利。<br />
本声明允许在与上述条件相同的情况下发布经过修改的全部或部分文档，同时<br />
必须附带显要的文字以申明文档的最后修改者。<br />
Emacs 自身的版权问题虽比本文档要复杂一些，但也基于相同的精神。敬请阅读文<br />
件“COPYING”，然后向你的朋友们分发 GNU Emacs 拷贝。让我们以使用、编写和<br />
分享自由软件的实际行动来共同祛除软件障碍主义（所谓的“所有权”）！<br />
;;; Local Variables:<br />
;;; coding: chinese-iso-8bit<br />
;;; End:<br />
;;; arch-tag: 46a53d82-a85a-46b6-bdc7-583aca063578</p>
<p><strong>本文来自ChinaUnix博客，如果查看原文请点：</strong><a href="http://blog.chinaunix.net/u3/99982/showart_1981320.html" target="_blank">http://blog.chinaunix.net/u3/99982/showart_1981320.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.1uu2.com/archives/1101/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google Gadgets for Linux 0.11.0平台下载</title>
		<link>http://www.1uu2.com/archives/564</link>
		<comments>http://www.1uu2.com/archives/564#comments</comments>
		<pubDate>Fri, 12 Jun 2009 14:09:37 +0000</pubDate>
		<dc:creator>Linux之友</dc:creator>
				<category><![CDATA[Linux桌面应用]]></category>
		<category><![CDATA[Google Gadgets]]></category>

		<guid isPermaLink="false">http://www.1uu2.com/?p=564</guid>
		<description><![CDATA[Google Gadgets 是由 Google 针对 Linux 平台而推出的一个运行桌面小玩意儿的平台。像什么天气预报、日历、时钟等等。利用该平台，Linux 用户可以在自己的桌面使用 Google Desktop for Windows 的 Gadgets 及 iGoogle 上的 Gadgets。 源码下载：http://google-gadgets-for-linux.googlecode.com/files/google-gadgets-for-linux-0.11.0.tar.bz2 二进制包下载:http://code.google.com/p/google-gadgets-for-linux/wiki/BinaryPackages]]></description>
			<content:encoded><![CDATA[<p><span id="zoom" class="a14c"></p>
<p style="text-indent: 2em;">Google Gadgets 是由 Google 针对 Linux 平台而推出的一个运行桌面小玩意儿的平台。像什么天气预报、日历、时钟等等。利用该平台，Linux 用户可以在自己的桌面使用 Google Desktop for Windows 的 Gadgets 及 iGoogle 上的 Gadgets。 <span id="more-564"></span></p>
<p style="text-indent: 2em;">
<p style="text-indent: 2em;">源码下载：http://google-gadgets-for-linux.googlecode.com/files/google-gadgets-for-linux-0.11.0.tar.bz2</p>
<p style="text-indent: 2em;">二进制包下载:http://code.google.com/p/google-gadgets-for-linux/wiki/BinaryPackages</p>
<p></span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.1uu2.com/archives/564/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

