2007年6月12日

如题

posted @ 2008-01-27 17:45 笨蛋啊帆 阅读(303) | 评论 (0)编辑 收藏

但是还是要来这个地方写东西的吧。
技术的东西学起来飞快了。
学的东西技术起来忒慢了。

别玩文字游戏。
再次告诫自己。

posted @ 2007-11-12 15:53 笨蛋啊帆 阅读(534) | 评论 (1)编辑 收藏

11月1号巨人给OFFER。
11月1号巨人上市。
难道真是为了这个巧合签的?

-。-
数据挖掘,数理统计,忘光光了。 而他们都是专家,都很勤奋,我很有压力。
努力。。。。。。

基本上,我的任务是制定决策使网友对网游更上瘾???
不知道,也许基本上就是这样。
努力。。。。。。

posted @ 2007-11-12 15:50 笨蛋啊帆 阅读(304) | 评论 (0)编辑 收藏

apache:
Extract      $ gzip -d httpd-NN.tar.gz
              $ tar xvf httpd-NN.tar
              $ cd httpd-NN
Configure     $ ./configure --prefix=PREFIX
Compile     $ make
Install     $ make install
Customize     $ vi PREFIX/conf/httpd.conf
Test            $ PREFIX/bin/apachectl -k start
           liu lan qi : http://localhost/     -----It works!


安装 mySQL
shell>  groupadd mysql
shell> useradd -g mysql mysql

下面3步把解压文件放到这里来,并且link 到文件夹/usr/local/mysql
shell> cd /usr/local
shell> gunzip < /path/to/mysql-VERSION-OS.tar.gz | tar xvf -
shell> ln -s full-path-to-mysql-VERSION-OS mysql

shell> cd mysql
shell> scripts/mysql_install_db --user=mysql

将程序二进制的所有权改为root,数据目录的所有权改为运行mysqld  的用户。
shell> chown -R root  .
shell> chown -R mysql data
shell> chgrp -R mysql .
试试看:
shell> bin/mysqld_safe --user=mysql

把/usr/local/mysql/support-files/mysql.server 复制到 /etc/rc.d据说是开机可以启动。
不知道了,下次开机的时候 PS 看看好了。


php:

gunzip php-NN.tar.gz
tar -xvf php-NN.tar
   现在需要配置 PHP。在这里可以用各种各样的参数来自定义PHP,例如启动哪些
    扩展功能包的支持等。用 ./configure --help 命令可以列出当前可用的所有参
    数。在此例中,将给出一个在有 MySQL 支持的 Apache 2 上进行配置的范例。
    用户本地的 apxs 的路径可能会不同,事实上,在用户的系统中,它可能被命名为
    apxs2。

./configure --with-apxs2=/usr/local/apache2/bin/apxs --with-mysql=/usr/local/mysql
出错!:checking for xml2-config path...
configure: error: xml2-config not found. Please check your libxml2 installation.

到 ftp://xmlsoft.org/libxml2 下载一个 libxml2-devel-2.6.26-1.i386.rpm
安装他,
rpm -ivhU libxml2-devel-2.6.26-1.i386.rpm

继续我的
./configure --with-apxs2=/usr/local/apache2/bin/apxs --with-mysql=/usr/local/mysql
然后
make   //10分钟过后
make install

make install

配置 php.ini

    cp php.ini-dist /usr/local/lib/php.ini

    可以编辑 php.ini 文件以修改 PHP 的选项。如果想要把此文件放到另外的位置,
    需要在步骤 10 添加 --with-config-file-path=/path 选项。

    如果选择 php.ini -recommended,请务必阅读其中的变更的列表,它们将影响
    PHP 的执行。

编辑 httpd.conf 文件以调用 PHP 模块。LoadModule 表达式右边的路径必须指向
    系统中的 PHP。以上的 make install 命令可能已经完成了这些,但务必要检查。

    对于 PHP 4:
       LoadModule php4_module modules/libphp4.so

    对于 PHP 5:
       LoadModule php5_module modules/libphp5.so

-----------------检查已经改好了。。。

告知 Apache 将特定的扩展名解析成 PHP,例如,让 Apache 将扩展名 .php
    解析成 PHP。可以将任何扩展名指定为 PHP,只需添加它们,每一个用空格分隔。
    例如,要添加 .phtml:

    AddType application/x-httpd-php .php .phtml

    通常还将 .phps 扩展名设置成显示高亮的 PHP 源文件,可以这样来完成:

    AddType application/x-httpd-php-source .phps

启动 Apache 服务器:
   /usr/local/apache2/bin/apachectl start

posted @ 2007-09-07 18:34 笨蛋啊帆 阅读(4326) | 评论 (0)编辑 收藏

Win2003作路由 局域网共享上网
本校计算机中心机房共有计算机240台,已互连为局域网,希望访问校内资源时通过校园网接口,而访问外部资源时通过ADSL接口。

  二、解决

  Windows XP和Windows 2003都自带ADSL宽带拨号程序,这里只要使用Windows 2003的路由和远程访问程序稍加配置,就可搞掂一切。

  1、前提

  计算机一台(配置不用很高,只要能安装Windows 2003就行),安装有Windows2003 操作系统,内插3块网卡,网卡1:连接内部局域网,IP:192.168.1.1,子网掩码:255.255.255.0,网关:空,DNS:空;网卡 2:连接ADSL,IP:自动获取,DNS:自动获取;网卡3:连接校园网,IP:202.203.230.2,子网掩码:255.255.255.0, 网关:202.203.230.1,DNS:202.203.220.2(假设校园网网段为202.203.220.0—202.203.230.0之 间,DNS服务器为202.203.220.2);

  2、服务器配置

  Step1.单击开始—管理工具—路由和远程访问,启动配置向导;选择本地服务器,单击操作—配置并启用路由和远程访问(图一)。单击下一步,选择自定义配置—下一步;复选请求拨号连接(由分支办公室路由使用)和LAN路由—下一步—完成,即可启动路由和远程访问。
图1

  Step2.选择网络接口,单击操作—新建请求拨号接口—下一步—下一步,选择使用以太网上的PPP(PPPoE)连接—下一步—下一步,弹出协议及安全措施选项,去掉所有钩选,单击下一步,输入ADSL帐号和密码,下一步—完成。

  Step3.新建一批处理文件route.bat,并把其快捷方式添加到开始—程序—启动下,编辑route.bat内容如下:

  cd\

  route delete 0.0.0.0

  route add 192.168.1.0 mask 255.255.240.0 192.168.1.1

  route add 202.203.220.0 mask 255.255.240.0 202.203.230.1

  route add 202.203.221.0 mask 255.255.255.0 202.203.230.1

  //(自行把校园网的IP段添加上)

  route add 202.203.230.0 mask 255.255.255.0 202.203.230.1

  3、客户机配置

TCP/IP配置如下:IP:192.168.1.x,子网掩码:255.255.255.0,网关:192.168.1.1,首选DNS服务器:当地 ADSL域名服务器IP(可向ADSL提供商查询,如昆明电信的为:202.98.160.68),备用DNS服务器:202.203.220.2。此处 的DNS设置非常关键,有的人会误把DNS设为:192.168.1.1。

  三、总结

   使用此方法实现宽带共享,可节约购买路由器的费用,几乎不占用服务器资源,且只要往服务器上加插网卡,就可任意扩张客户机数量或外部出口。

posted @ 2007-08-22 20:33 笨蛋啊帆 阅读(260) | 评论 (0)编辑 收藏

WINDOWS系统下设置路由

在WINDOWS下手动设置路由主要在DOS系统中命令符下(在运行输入栏中键入COMMAND或者CMD即可)进行。


键入命令ROUTE回车会出现大约几十行英文说明,主要解说在WINDOWS系统中如何添加、删除、修改路由。现简单介绍如下:


ROUTE命令格式如下:


ROUTE [-f] [-p] [command [destination] [MASK netmask] [gateway] [METRIC metric] [IF interface]


其中 –f 参数用于清除路由表,-p参数用于永久保留某条路由(即在系统重启时不会丢失路由,但在WINDOWS95下无效)。


Command主要有PRINT(打印)、ADD(添加)、DELETE(删除)、CHANGE(修改)共4个命令。


Destination代表所要达到的目标IP地址。


MASK是子网掩码的关键字。Netmask代表具体的子网掩码,如果不加说明,默认是255.255.255.255(单机IP地址),因此键入掩码时候要特别小心,要确认添加的是某个IP地址还是IP网段。如果代表全部出口子网掩码可用0.0.0.0。


Gateway代表出口网关。


其他interface和metric分别代表特殊路由的接口数目和到达目标地址的代价,一般可不予理会。


我们根据单网卡和多网卡(以双网卡为例)两种情况叙述在WINDOWS下如何具体设置路由。


1、单网卡:


在WINDOWS系统下有4条最基本路由,参照下图(键入route print命令)具体是:





上述路由是WINDOWS自带路由,永不消失,如果上述路由不完整,则说明TCP/IP的安装和运行存在某些最基本问题、或本机网络配置或者安装存在问题。




上述表格中,127.0.0.1用于测试回送(loopback)地址,不能作为有效的网络地址。PC1的IP地址为 192.168.97.1,路由器1(用于上互联网)的局域口IP地址为192.168.97.10,路由器2(用于上办公网)的局域口IP地址为 192.168.97.11。


如果PC1同时想访问互联网和办公网,通常情况是在WINDOWS网络属性反复修改默认网关,每次还只能访问1个网段,既不方便也非常麻烦。为解决这个问题可在DOS命令符下键入如下命令:


route add 0.0.0.0 maks 0.0.0.0 192.168.97.10(用于上互联网)、


route add 10.42.29.0 mask 255.255.255.0 192.168.97.11(用于上办公网)。


这样将互联网作为默认路由,办公网用作特殊路由添加,当然,如果还有其他系统,可采用同样路由添加。


为了确保路由正确、避免引起路由混乱,最好先删除路由,再添加路由。比如上面的命令可改为:


route delelte 0.0.0.0


route add 0.0.0.0 maks 0.0.0.0 192.168.97.10


route add 10.42.29.0 mask 255.255.255.0 192.168.97.11。


为了确保路由设置长久生效,可将上述命令加入AUTOEXEC.BAT文件中,即操作系统一启动就自动设置路由。当然也可在第一次添加路由时加入-P参数。


具体如下:


route –p add 0.0.0.0 maks 0.0.0.0 192.168.97.10


route –p add 10.42.29.0 mask 255.255.255.0 192.168.97.11。


这时用route print查看路由,就可以看到有两条永久路由添加到路由表中了。


2、多网卡(以双网卡为例)


如果在同一PC机上带有两个网卡,联上两个不同网段的系统,具体参见下面网络连接示意图:




一般情况下,在PC机上加上双网卡和双网关,边可以轻松联上两个子系统。但由于WINDOWS自身系统原因,经常容易 出现网关浮动或不稳定的情况,比如PING办公自动化地址无法PING通,却返回从192.168.97.10(路由器1)反馈的信息,此时查看网络路 由,路由表正常,此时需要刷新路由。


事实上,可以采取同单网卡类似的办法,可以去掉网络属性中网关,进行人工设置路由。人工设置路由更加精确和自由,比如可以人工控制究竟访问某个网站还是某个网段或者全部网段。


参照上图配置,可在DOS提示符下键入如下命令:


route delete 0.0.0.0


route add 0.0.0.0 mask 0.0.0.0 192.168.97.10(网卡1寻址路由,上互联网,默认路由)


route add 10.42.0.0 mask 255.255.0.0 10.42.29.10(网卡2寻址路由,上办公网)。


当然可以添加- P参数或者将路由添加信息加入自动批处理文件使路由信息永久生效

posted @ 2007-08-22 20:32 笨蛋啊帆 阅读(389) | 评论 (0)编辑 收藏

matlab工具箱函数汇总
别问我是谁 发表于 2006-1-18 14:03:00


附录Ⅰ  工具箱函数汇总


Ⅰ.1  统计工具箱函数
表Ⅰ-1  概率密度函数
 
函数名 对应分布的概率密度函数   
betapdf 贝塔分布的概率密度函数   
binopdf 二项分布的概率密度函数   
chi2pdf 卡方分布的概率密度函数   
exppdf 指数分布的概率密度函数   
fpdf f分布的概率密度函数   
gampdf 伽玛分布的概率密度函数   
geopdf 几何分布的概率密度函数   
hygepdf 超几何分布的概率密度函数   
normpdf 正态(高斯)分布的概率密度函数   
lognpdf 对数正态分布的概率密度函数   
nbinpdf 负二项分布的概率密度函数   
ncfpdf 非中心f分布的概率密度函数   
nctpdf 非中心t分布的概率密度函数   
ncx2pdf 非中心卡方分布的概率密度函数   
poisspdf 泊松分布的概率密度函数   
raylpdf 雷利分布的概率密度函数   
tpdf 学生氏t分布的概率密度函数   
unidpdf 离散均匀分布的概率密度函数   
unifpdf 连续均匀分布的概率密度函数   
weibpdf 威布尔分布的概率密度函数 


表Ⅰ-2  累加分布函数
 
函数名 对应分布的累加函数   
betacdf 贝塔分布的累加函数   
binocdf 二项分布的累加函数   
chi2cdf 卡方分布的累加函数   
expcdf 指数分布的累加函数   
fcdf f分布的累加函数   
gamcdf 伽玛分布的累加函数   
geocdf 几何分布的累加函数   
hygecdf 超几何分布的累加函数   
logncdf 对数正态分布的累加函数   
nbincdf 负二项分布的累加函数   
ncfcdf 非中心f分布的累加函数   
nctcdf 非中心t分布的累加函数   
ncx2cdf 非中心卡方分布的累加函数   
normcdf 正态(高斯)分布的累加函数   
poisscdf 泊松分布的累加函数   
raylcdf 雷利分布的累加函数   
tcdf 学生氏t分布的累加函数   
unidcdf 离散均匀分布的累加函数   
unifcdf 连续均匀分布的累加函数   
weibcdf 威布尔分布的累加函数 


表Ⅰ-3  累加分布函数的逆函数
 
函数名 对应分布的累加分布函数逆函数   
betainv 贝塔分布的累加分布函数逆函数   
binoinv 二项分布的累加分布函数逆函数   
chi2inv 卡方分布的累加分布函数逆函数   
expinv 指数分布的累加分布函数逆函数   
finv f分布的累加分布函数逆函数   
gaminv 伽玛分布的累加分布函数逆函数   
geoinv 几何分布的累加分布函数逆函数   
hygeinv 超几何分布的累加分布函数逆函数   
logninv 对数正态分布的累加分布函数逆函数   
nbininv 负二项分布的累加分布函数逆函数   
ncfinv 非中心f分布的累加分布函数逆函数   
nctinv 非中心t分布的累加分布函数逆函数   
ncx2inv 非中心卡方分布的累加分布函数逆函数   
icdf    
norminv 正态(高斯)分布的累加分布函数逆函数   
poissinv 泊松分布的累加分布函数逆函数   
raylinv 雷利分布的累加分布函数逆函数   
tinv 学生氏t分布的累加分布函数逆函数   
unidinv 离散均匀分布的累加分布函数逆函数   
unifinv 连续均匀分布的累加分布函数逆函数   
weibinv 威布尔分布的累加分布函数逆函数 


表Ⅰ-4  随机数生成器函数
 
函  数 对应分布的随机数生成器   
betarnd 贝塔分布的随机数生成器   
binornd 二项分布的随机数生成器   
chi2rnd 卡方分布的随机数生成器   
exprnd 指数分布的随机数生成器   
frnd f分布的随机数生成器   
gamrnd 伽玛分布的随机数生成器   
geornd 几何分布的随机数生成器   
hygernd 超几何分布的随机数生成器   
lognrnd 对数正态分布的随机数生成器   
nbinrnd 负二项分布的随机数生成器   
ncfrnd 非中心f分布的随机数生成器   
nctrnd 非中心t分布的随机数生成器   
ncx2rnd 非中心卡方分布的随机数生成器   
normrnd 正态(高斯)分布的随机数生成器   
poissrnd 泊松分布的随机数生成器   
raylrnd 瑞利分布的随机数生成器   
trnd 学生氏t分布的随机数生成器   
unidrnd 离散均匀分布的随机数生成器   
unifrnd 连续均匀分布的随机数生成器   
weibrnd 威布尔分布的随机数生成器 


表Ⅰ-5  分布函数的统计量函数
 
函数名 对应分布的统计量   
betastat 贝塔分布函数的统计量   
binostat 二项分布函数的统计量   
chi2stat 卡方分布函数的统计量   
expstat 指数分布函数的统计量   
fstat f分布函数的统计量   
gamstat 伽玛分布函数的统计量   
geostat 几何分布函数的统计量   
hygestat 超几何分布函数的统计量   
lognstat 对数正态分布函数的统计量   
nbinstat 负二项分布函数的统计量   
ncfstat 非中心f分布函数的统计量   
nctstat 非中心t分布函数的统计量   
ncx2stat 非中心卡方分布函数的统计量   
normstat 正态(高斯)分布函数的统计量   
poisstat 泊松分布函数的统计量 

续表
 
函数名 对应分布的统计量   
raylstat 瑞利分布函数的统计量   
tstat 学生氏t分布函数的统计量   
unidstat 离散均匀分布函数的统计量   
unifstat 连续均匀分布函数的统计量   
weibstat 威布尔分布函数的统计量 


表Ⅰ-6  参数估计函数
 
函 数 名 对应分布的参数估计   
betafit 贝塔分布的参数估计   
betalike 贝塔对数似然函数的参数估计   
binofit 二项分布的参数估计   
expfit 指数分布的参数估计   
gamfit 伽玛分布的参数估计   
gamlike 伽玛似然函数的参数估计   
mle 极大似然估计的参数估计   
normlike 正态对数似然函数的参数估计   
normfit 正态分布的参数估计   
poissfit 泊松分布的参数估计   
unifit 均匀分布的参数估计   
weibfit 威布尔分布的参数估计   
weiblike 威布尔对数似然函数的参数估计 


表Ⅰ-7  统计量描述函数
 
函  数 描           述   
bootstrap 任何函数的自助统计量   
corrcoef 相关系数   
cov 协方差   
crosstab 列联表   
geomean 几何均值   
grpstats 分组统计量   
harmmean 调和均值   
iqr 内四分极值   
kurtosis 峰度   
mad 中值绝对差   
mean 均值   
median 中值   
moment 样本模量   
nanmax 包含缺失值的样本的最大值 
续表
 
函  数 描           述   
Nanmean 包含缺失值的样本的均值   
nanmedian 包含缺失值的样本的中值   
nanmin 包含缺失值的样本的最小值   
nanstd 包含缺失值的样本的标准差   
nansum 包含缺失值的样本的和   
prctile 百分位数   
range 极值   
skewness 偏度   
std 标准差   
tabulate 频数表   
trimmean 截尾均值   
var 方差 


表Ⅰ-8  统计图形函数
 
函  数 描           述   
boxplot 箱形图   
cdfplot 指数累加分布函数图   
errorbar 误差条图   
fsurfht 函数的交互等值线图   
gline 画线   
gname 交互标注图中的点   
gplotmatrix 散点图矩阵   
gscatter 由第三个变量分组的两个变量的散点图   
lsline 在散点图中添加最小二乘拟合线   
normplot 正态概率图   
pareto 帕累托图   
qqplot Q-Q图   
rcoplot 残差个案次序图   
refcurve 参考多项式曲线   
refline 参考线   
surfht 数据网格的交互等值线图   
weibplot 威布尔图 


表Ⅰ-9  统计过程控制函数
 
函  数 描           述   
capable 性能指标   
capaplot 性能图   
ewmaplot 指数加权移动平均图 
续表
 
函  数 描           述   
histfit 添加正态曲线的直方图   
normspec 在指定的区间上绘正态密度   
schart S图   
xbarplot x条图 


表Ⅰ-10  聚类分析函数
 
函  数 描           述   
cluster 根据linkage函数的输出创建聚类   
clusterdata 根据给定数据创建聚类   
cophenet Cophenet相关系数   
dendrogram 创建冰柱图   
inconsistent 聚类树的不连续值   
linkage 系统聚类信息   
pdist 观测量之间的配对距离   
squareform 距离平方矩阵   
zscore Z分数 


表Ⅰ-11  线性模型函数
 
函  数 描           述   
anova1 单因子方差分析   
anova2 双因子方差分析   
anovan 多因子方差分析   
aoctool 协方差分析交互工具   
dummyvar 拟变量编码   
friedman Friedman检验   
glmfit 一般线性模型拟合   
kruskalwallis Kruskalwallis检验   
leverage 中心化杠杆值   
lscov 已知协方差矩阵的最小二乘估计   
manova1 单因素多元方差分析   
manovacluster 多元聚类并用冰柱图表示   
multcompare 多元比较   
 多项式评价及误差区间估计   
polyfit 最小二乘多项式拟合   
polyval 多项式函数的预测值   
polyconf 残差个案次序图   
regress 多元线性回归   
regstats 回归统计量诊断 
续表
 
函  数 描           述   
Ridge 岭回归   
rstool 多维响应面可视化   
robustfit 稳健回归模型拟合   
stepwise 逐步回归   
x2fx 用于设计矩阵的因子设置矩阵 


表Ⅰ-12  非线性回归函数
 
函  数 描           述   
nlinfit 非线性最小二乘数据拟合(牛顿法)   
nlintool 非线性模型拟合的交互式图形工具   
nlparci 参数的置信区间   
nlpredci 预测值的置信区间   
nnls 非负最小二乘 


表Ⅰ-13  试验设计函数
 
函  数 描           述   
cordexch D-优化设计(列交换算法)   
daugment 递增D-优化设计   
dcovary 固定协方差的D-优化设计   
ff2n 二水平完全析因设计   
fracfact 二水平部分析因设计   
fullfact 混合水平的完全析因设计   
hadamard Hadamard矩阵(正交数组)   
rowexch D-优化设计(行交换算法) 

 

表Ⅰ-14  主成分分析函数
 
函  数 描           述   
barttest Barttest检验   
pcacov 源于协方差矩阵的主成分   
pcares 源于主成分的方差   
princomp 根据原始数据进行主成分分析 

表Ⅰ-15  多元统计函数
 
函  数 描           述   
classify 聚类分析   
mahal 马氏距离   
manova1 单因素多元方差分析   
manovacluster 多元聚类分析 

表Ⅰ-16  假设检验函数
 
函  数 描           述   
ranksum 秩和检验   
signrank 符号秩检验   
signtest 符号检验   
ttest 单样本t检验   
ttest2 双样本t检验   
ztest z检验 

表Ⅰ-17  分布检验函数
 
函  数 描           述   
jbtest 正态性的Jarque-Bera检验   
kstest 单样本Kolmogorov-Smirnov检验   
kstest2 双样本Kolmogorov-Smirnov检验   
lillietest 正态性的Lilliefors检验 

表Ⅰ-18  非参数函数
 
函  数 描           述   
friedman Friedman检验   
kruskalwallis Kruskalwallis检验   
ranksum 秩和检验   
signrank 符号秩检验   
signtest 符号检验 

表Ⅰ-19  文件输入输出函数
 
函  数 描           述   
caseread 读取个案名   
casewrite 写个案名到文件   
tblread 以表格形式读数据   
tblwrite 以表格形式写数据到文件   
tdfread 从表格间隔形式的文件中读取文本或数值数据 

表Ⅰ-20  演示函数
 
函  数 描           述   
aoctool 协方差分析的交互式图形工具   
disttool 探察概率分布函数的GUI工具   
glmdemo 一般线性模型演示   
randtool 随机数生成工具   
polytool 多项式拟合工具   
rsmdemo 响应拟合工具   
robustdemo 稳健回归拟合工具 


Ⅰ.2  优化工具箱函数
表Ⅰ-21  最小化函数表
 
函    数 描       述   
fgoalattain 多目标达到问题   
fminbnd 有边界的标量非线性最小化   
fmincon 有约束的非线性最小化   
fminimax 最大最小化   
fminsearch, fminunc 无约束非线性最小化   
fseminf 半无限问题   
linprog 线性课题   
quadprog 二次课题 

表Ⅰ-22  方程求解函数表
 
函   数 描       述   
\ 线性方程求解   
fsolve 非线性方程求解   
fzero 标量非线性方程求解 

表Ⅰ-23  最小二乘函数表
 
函   数 描       述   
\ 线性最小二乘   
lsqlin 有约束线性最小二乘   
lsqcurvefit 非线性曲线拟合   
lsqnonlin 非线性最小二乘   
lsqnonneg 非负线性最小二乘 

表Ⅰ-24  实用函数表
 
函   数 描       述   
optimset 设置参数   
optimget 获取参数 

表Ⅰ-25  大型方法的演示函数表
 
函   数 描        述   
circustent 马戏团帐篷问题—二次课题   
molecule 用无约束非线性最小化进行分子组成求解   
optdeblur 用有边界线性最小二乘法进行图形处理 

表Ⅰ-26  中型方法的演示函数表
 
函   数 描         述   
bandemo 香蕉函数的最小化   
dfildemo 过滤器设计的有限精度   
goaldemo 目标达到举例   
optdemo 演示过程菜单   
tutdemo 教程演示 

Ⅰ.3  样条工具箱函数
表Ⅰ-27  三次样条函数
 
函  数 描           述   
csapi 插值生成三次样条函数   
csape 生成给定约束条件下的三次样条函数   
csaps 平滑生成三次样条函数   
cscvn 生成一条内插参数的三次样条曲线   
getcurve 动态生成三次样条曲线 

表Ⅰ-28  分段多项式样条函数
 
函  数 描           述   
pplst 显示关于生成分段多项式样条曲线的M文件   
ppmak 生成分段多项式样条函数   
ppual 计算在给定点处的分段多项式样条函数值 

表Ⅰ-29  B样条函数
 
函  数 描           述   
splst 显示生成B样条函数的M文件   
spmak 生成B样条函数   
spcrv 生成均匀划分的B样条函数   
spapi 插值生成B样条函数   
spap2 用最小二乘法拟合生成B样条函数   
spaps 对生成的B样条曲线进行光滑处理   
spcol 生成B样条函数的配置矩阵 

表Ⅰ-30  有理样条函数
 
函  数 描           述   
rpmak 生成有理样条函数   
rsmak 生成有理样条函数 

表Ⅰ-31  操作样条函数
 
函  数 描           述   
fnval 计算在给定点处的样条函数值   
fmbrk 返回样条函数的某一部分(如断点或系数等)   
fncmb 对样条函数进行算术运算   
fn2fm 把一种形式的样条函数转化成另一种形式的样条函数   
fnder 求样条函数的微分(即求导数)   
fndir 求样条函数的方向导数   
fnint 求样条函数的积分   
fnjmp 在间断点处求函数值   
fnplt 画样条曲线图   
fnrfn 在样条曲线中插入断点。   
fntlr 生成tarylor系数或taylor多项式 

表Ⅰ-32 样条曲线端点和节点处理函数
 
函  数 描             述   
augknt 在已知节点数组中添加一个或多个节点   
aveknt 求出节点数组元素的平均值   
brk2knt 增加断点数组中元素的重次   
knt2brk 从节点数组中求得节点及其重次   
knt2mlt 从节点数组中求得节点及其重次   
sorted 求出节点数组points的元素在节点数组meshpoints中属于第几个分量   
aptknt 求出用于生成样条曲线的节点数组 
表Ⅰ-33  样条曲线端点和节点处理函数
 
函  数 描             述   
newknt 对分段多项式样条函数进行重分布   
optknt 求出用于内插的最优节点数组   
chbpnt 求出用于生成样条曲线的合适节点数组 

表Ⅰ-34  解线性方程组的函数
 
函  数 描             述   
slvblk 解对角占优的线性方程组   
bkbrk 描述分块对角矩阵的详细情况 

表Ⅰ-35  样条GUI函数
 
函  数 描             述   
bspligui 在节点处生成B样条曲线   
splinetool 用一系列方法生成各种样条曲线 

Ⅰ.4  偏微分方程数值解工具箱函数
表Ⅰ-36  偏微分方程求解算法函数
 
函  数 描             述   
adaptmesh 生成自适应网格并求解PDE问题   
assema 组合面积的整体贡献   
assemb 组合边界条件的贡献   
assempde 组合刚度矩阵和PDE问题的右端项   
hyperbolic 求解双曲线PDE问题   
parabolic 求解抛物线型PDE问题   
pdeeig 求解特征值PDE问题   
pdenonlin 求解非线性PDE问题   
poisolv 在矩形网格上对泊松方程进行快速求解 

 

表Ⅰ-37  用户界面算法函数
 
函  数 描             述   
pdecirc 绘圆   
pdeellip 绘椭圆   
pdemdlcv 将PDE工具箱1.0模型的M文件转换为PDE工具箱1.0.2版本的格式   
pdepoly 绘多边形   
pderect 绘矩形   
pdetool PDE工具箱图形用户集成界面(GUI) 


表Ⅰ-38  几何算法函数
 
函  数 描             述   
csgchk 核对几何描述矩阵的有效性   
csgdel 删除最小子域之间的界线   
decsg 将建设性实体几何模型分解为最小子域   
initmesh 创建初始三角形网格   
jigglemesh 微调三角形网格的内部点   
pdearcl 在参数表示和圆弧长度之间进行内插   
poimesh 在矩形几何图形上生成规则网格   
refinemesh 加密一个三角形网格   
wbound 写边界条件指定文件   
wgeom 写几何指定函数 


表Ⅰ-39  绘图函数
 
函  数 描             述   
pdecont 绘等值线图   
pdegplot 绘制PDE几何图   
pdemesh 绘PDE三角形网格   
pdeplot 一般PDE工具箱绘图函数   
pdesurf 绘三维表面图 


表Ⅰ-40  实用函数
 
函  数 描             述   
Dst idst 离散化sin转换   
pdeadgsc 使用相对容限临界值选择三角形   
pdeadworst 选择相对于最坏值的三角形   
pdecgrad PDE解的变动   
pdeent 与给定三角形集合相邻的三角形的指数   
pdegrad PDE解的梯度   
pdeintrp 从节点数据至三角形中点数据进行内插   
pdejmps 对于自适应网格进行误差估计   
pdeprtni 从三角形中点数据向节点数据进行内插   
pdesde 子域集合中点的指数   
pdesdp 子域集合边缘的指数   
pdesdt 子域集合三角形的指数   
pdesmech 计算结构力学张量函数   
pdetrg 三角形几何数据   
pdetriq 三角型质量度量 
续表
 
函  数 描             述   
Poiasma 用于泊松方程快速求解器的边界点矩阵   
poicalc 矩形网格上泊松方程的快速求解器   
poiindex 经过规范排序的矩形网格的点的指数   
sptarn 求解广义稀疏特征值问题   
tri2grid 从PDE三角形网格到矩形网格进行内插 


表Ⅰ-41  自定义算法函数
 
函  数 描             述   
pdebound 边界条件M文件   
pdegeom 几何模型M文件 


表Ⅰ-42  演示函数
 
函  数 描             述   
pdedemo1 单位圆盘上泊松方程的精确解   
pdedemo2 求解Helmholtz方程,研究反射波   
pdedemo3 求解最小表面问题   
pdedemo4 用子域分解求解PDE问题   
pdedemo5 求抛物线型问题(热传导方程)   
pdedemo6 求双曲线型PDE问题(波动方程)   
pdedemo7 点源的自适应求解   
pdedemo8 在矩形网格上求解泊松方程 

posted @ 2007-07-28 14:50 笨蛋啊帆 阅读(3776) | 评论 (1)编辑 收藏

GNU Emacs 是 Emacs, 的版本之一,是由 Emacs, 的原始版本(PDP-10)的作者Richard Stallman所编写的。
GNU Emacs的主要文档在GNU Emacs手册中,你可以用Info(Emacs的一个子系统)以行方式去读。请在那里查看完全的和最新的文档。本帮助页的更新依赖于志愿人员; Emacs 的维护人员的首要目标是使使用能本帮助页面尽可能少地占用其它更有用的项目的时间。
GNU Emacs 包含了其它 Emacs 编辑器所拥有的全部功能。由于它的编辑命令是用Lisp写的,因此很容易扩展。
Emacs 有一个扩展的交互帮助工具,但该工具假设你能熟练地使用 Emacs 窗口和缓冲区。CTRL-h (退格或CTRL-h) 可以进入该帮助工具。 Help Tutorial(帮助指南,CTRL-h t) 调用一个交互式的指南以帮助初学者在很短的时间内了解 Emacs 的基本知识。Help Apropos (CTRL-h a) 帮助你找到一个命令并给出其功能说明,Help Character (字符帮助,CTRL-h c) 描述一个给定的字符的作用,Help Function (函数帮助,CTRL-h f) 描述一个指定名称的Lisp 函数。
Emacs 的Undo(恢复功能)可以取消最近几步对缓冲区所做的修改,因此很容易从编辑错误中恢复
GNU Emacs 的许多特殊的包可以处理邮件读取(RMail)和邮件发送
(Mail),大纲编辑 (Outline),编译(Compile), 在 Emacs 窗口中运行shell (Shell), 运行Lisp 的read-eval-print 循环(Lisp-Interaction-Mode), 以及自动修正(Doctor)。
还有一个扩充的参考手册,但是其它版本的 Emacs 用户即使没有它,要适应GNU Emacs也不会有什么困难。而Emacs的新用户通过学习指南和使用自身文档特性,很快就能够使用GNU Emacs的基本功能。
Emacs选项
以下的选项是很常用的:
file
编辑 文件。
+number
转到由 number 指定的行(在"+"和数字当中不要加入空格)。
-q
不载入初始文件。
-u user
载入 user 的初始文件。
-t file
使用指定的 file 文件作为终端来代替stdin/stdout。该项必须作为命令行的第一个参数来说明。
以下的选项是面向lisp的 (这些选项按照给定的顺序处理):
-f function
执行lisp函数 function 。
-l file
装入文件 file 中的Lisp代码。
Emacs 作为批处理编辑器来运行时,以下选项是有用的:
-batch
批处理模式编辑。 编辑器将把消息送至stderr(注1)。这个选项必须位于参数列表的第一位。必须用-l和-f选项来指明要执行的文件和要调用的函数。
-kill
在批处理模式下退出Emacs Emacs 。
在X Window下使用Emacs
Emacs 已经被设计得能在X Window系统下很好地工作。如果在X Window下运行 Emacs ,将创建其自己的X Window来显示。这是因为你也许会将Emacs编辑器作为后台进程来启动,并能够继续使用原来的窗口。
Emacs 在启动时能带以下X命令开关:
-name name
指定初始的 Emacs 窗口的名字。这使得能象窗口标题一样查询X资源。
-title name
指定起始X窗口的标题。
-r
反白显示 Emacs 窗口。
-i
当 Emacs 窗口图标化时,使用"厨房水槽"位图图标。
-font font, -fn font
将 Emacs 窗口字体设置为指定的字体 font 。在 /usr/lib/X11/fonts 路径下可以找到不同的 X 字体。注意: Emacs 只接受固定宽度的字体。在X11第四版字体命名协议下,若字体名的第11个域的值是"m"或"c",则该字体是固定宽度的字体。此外,若字体名拥有 宽x高 的形式,它一般也是 固定 宽度字体。关于更多信息,参见xlsfonts(1)。 在指定字体时,别忘了在开关和字体名之间需要一个空格。
-b pixels
设置 Emacs 窗口边框宽度为 pixels 指定的点数。缺省值是窗口每边宽为1点。
-ib pixels
设置Emacs窗口内部边框宽度为 pixels 指定的点数。缺省值是窗口每边填充1点。
-geometry geometry
按照给定的值设置 Emacs Emacs窗口的宽,高及位置。几何参数的指定应符合标准X格式,关于更多信息,参见 X(1) 。宽和高用字符来指定,缺省值是80 x 24。
-fg color
在彩色显示下,设置文本的颜色。有效的颜色名列表见 /usr/lib/X11/rgb.txt 。
-bg color
在彩色显示下,设置窗口背景的颜色。
-bd color
在彩色显示下,设置窗口边框的颜色。
-cr color
在彩色显示下,设置窗口文本光标的颜色。
-ms color
在彩色显示下,设置窗口鼠标光标的颜色。
-d displayname, -display displayname
在由 displayname. 指定的显示器上创建 Emacs 窗口。必须是在命令行中指定的第一个选项。
-nw
告诉 Emacs 不使用其到 X 的特定界面。如果在从 xterm(1) 窗口调用 Emacs 时,使用此开关,则在该窗口中打开显示器。这必须是命令行中指定的第一个选项。
您可以在 .Xresources 文件(请参阅 xrdb(1) )中为 Emacs 窗口设置 X 缺省值。请使用下列格式:
emacs.keyword:value
其中 value(值) 指定 keyword(关键字) 的缺省值。 Emacs 允许您为下列关键字设置缺省值:
font (Font 类)
设置窗口的文本 痔濉?
reverseVideo (ReverseVideo 类)
如果把 reverseVideo 的值设置为 ,则反白显示窗口。
bitmapIcon ( BitmapIcon 类)
如果 bitmapIcon 的值设置为 ,则窗口将图符化为凹入状。
borderWidth (BorderWidth 类)
设置窗口的边框宽度(以 pixel 为单位)。
internalBorder (BorderWidth 类)
设置窗口的内部边框宽度(以 pixel 为单位)。
foreground (Foreground 类)
对于彩色显示器,设置窗口的文本颜色。
background (Background 类)
对于彩色显示器,设置窗口的背景颜色。
borderColor (BorderColor 类)
对于彩色显示器,设置窗口的边框颜色。
cursorColor (Foreground ?
对于彩色显示器,设置窗口文本光标的颜色。
pointerColor (Foreground 类)
对于彩色显示器,设置窗口鼠标光标的颜色。
geometry (Geometry 类)
设置 Emacs 窗口的几何大小(如上所述)。
title (Title 类)
设置 Emacs 窗口的标题。
iconName (Title 类)
设置 Emacs 窗口图符的图符名称。
如果你在使用黑白显示器时试图设置颜色值,则窗口的特征将缺省为:前景色将设置为黑色,背景色将设置为白色,边框颜色将设置为灰色,而文本和鼠标光标将设置为黑色。
使用鼠标
下面列出在X11下 Emacs 窗口的鼠标按钮的捆绑功能。
左键 定点。
中键 粘贴文本
右键 把文本剪贴到X的剪贴缓冲区
SHIFT-中键 把文本剪贴到X的剪贴缓冲区。
SHIFT-右键 粘贴文本
CTRL-中键 把文本剪贴到X的剪贴缓冲区并把它删除
CTRL-右键 选择窗口并分割它成两个窗口,和输入CTRL-X 2一样
CTRL-SHIFT-左键 对X缓冲区菜单操作,挂起按钮和键盘,等待菜单出现,
选择缓冲区和释放它。把鼠标移离菜单和释放操作。
CTRL-SHIFT-中键 弹出X菜单帮助索引Emacs帮助。
CTRL-SHIFT-右键 用鼠标选择窗口并删除所有其他窗口,和输入CTRL-X 1一样。
手册
你可以从开发GNU软件的自由软件基金会获得GNU Emacs手册的拷贝。
要获得信息仔细查看文件ORDERS。
你本地的Emacs维护也有有效的拷贝。对于所有从FSF获得的软件和印刷品,每个人都有权制造和发布Emacs手册的副本。
手册的TeX源文档也被包含在Emacs源代码发布中。
文件
/usr/local/info - 通过Info文档浏览器(Emacs的一个子系统)查阅的文件。
现在还没有太多的Unix在以此为文档,但Emacs参考手册的完整文本以便利的树结?p> 形式包含于其中。 /usr/local/share/emacs/$VERSION/src - C源文件和目标文件。 /usr/local/share/emacs/$VERSION/lisp - 定义了大部分编辑命令的Lisp源文件和编译后的文件。 有些已经装入了;其它的则在使用时自动从本目录中装入。 /usr/local/share/emacs/$VERSION/etc - 与GNU Emacs一同使用的各种程序,还有一些文件的信息。 /usr/local/share/emacs/$VERSION/etc/DOC.* - 包含了Lisp原语和GNU Emacs 的预装入Lisp函数的文档字符串。 它们被储存在这里以减小Emacs的体积。 /usr/local/share/emacs/$VERSION/etc/OTHER.EMACSES 讨论GNU Emacs与其它版本的Emacs之间的不同。
/usr/local/share/emacs/$VERSION/etc/SERVICE 列举为帮助GNU Emacs的用户提供各种服务的人们,包括教学、疑难解答、移植和定制。
这些文件还含有对那些希望用Emacs Lisp扩展语言编写程序的人有用的信息,该语言含没有完整的文档。 /usr/local/com/emacs/lock - 为使用Emacs修改的所有文件保存锁文件,以防止由两个用户在同时对一个文件进行修改。 /usr/lib/X11/rgb.txt - 合法的X颜色名的列表。
臭虫
此处有一个邮件列表,因特网上的bug-gnu-emacs@prep.ai.mit.edu,用于报告Emacs的臭虫和修补。但在报告作为一个臭虫的 某件事之前,请尽量肯定它真是一个臭虫,而不是一个误会或一个故意的特性。我们要求你阅读在此参考手册末尾附近的"Reporting
Emacs Bugs"(报告 Emacs 臭虫)章节(或Info系统),用于提示如何和什么时候报告臭虫。 还有,在每个你发送的臭虫报告中包含你所运行的Emacs的版本号。 不要期望对一个错误报告给出个人的答案。报告错误的目的是为了大家在下一个版本中可以修复它。 对个人来说,我们可以去参考服务文件(见上)的一个列表。 除非是向这个邮件列表报告臭虫,请不要发任何东西到这里来。你可以将申请加入邮件列表的请求寄到 info-gnu-emacs-request@prep.ai.mit.edu(或者相应的UUDP地址)中去。关于Emacs(UNIX编辑程序宏指 令)邮件列表的详情,请阅读文件
/usr/local/emacs/etc/MAILINGLISTS。 如果错误是孤立的,往往是可以修复的。因此如果你对报道那些错误感兴趣的话,你可以很容易将它复制出来。
我所知道的一些错误是:在一些UNIX版本中,SHELL不能很好的和应用程序一起工作。
非限制的
Emacs 是免费的; 任何人都可以按照与每个 Emacs 的副本在一起的 Emacs General Public License中陈述的条款把 Emacs 的副本分发?p> 任何人,该许可证的也出现在参考手册中。
Emacs 的副本有时与UNIX系统在一起打包进行分发,但是它永远不会包含在任何哺钦庑┎僮飨低车男砜芍さ姆段е凇O笳庋シ戳颂蹩畹陌锸潜辉市淼模率瞪 希珿eneral Public License的主要目的是让那些分发 Emacs. 的人可以免受更多的干扰。
Richard Stallman鼓励你改善和扩展Emacs,鼓励你把你对GNU库的扩展贡献给GNU库。最后GNU(Gnus Not Unix)将成为伯克利UNIX最好的替代品。每个人都可以自由的使用,拷贝,研究和更改GNU的系统。
参见
X(1), xlsfonts(1), xterm(1), xrdb(1)
作者
Emacs 是由Richard Stallman和自由软件基金会合作完成的。 Joachim Martillo和Robert Krawitz为系统加入了X界面。

posted @ 2007-06-29 09:10 笨蛋啊帆 阅读(548) | 评论 (0)编辑 收藏

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

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

注意:退出Emacs,按C-x C-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-u 8 C-f 向前移动8个字符。
>> 试着使用带数字参数的C-n或C-p,只用一个命令就把光标移动到与本行相邻的 行上。

绝大多数命令把数字参数当作重复次数,但也有几个例外。C-v和M-v就是。当给出一个参数,只是上滚或下滚数字指定的行数而不是屏数。比如,C-u 4 C-v滚动4行屏幕。


>> 现在试试 C-u 8 C-v。
这将使屏幕滚动8行,如果你想往回滚动的话,键入一个带参数的M-v。
如果你正在使用X窗口,在Emacs窗口的左手边有一个叫做滚动条的矩形区域。你能通过用鼠标点击滚动条来滚动文本。
>> 试着在滚动条顶部的高亮区域点击中键。这将使文本滚动,滚动的位置取决于 你点击的长短。

>> 试着按住鼠标中键上移或下移鼠标,你将看到当你移动鼠标时文本会上下滚动。
* 当EMACS挂起时(WHEN EMACS IS HUNG)
------------------------------------------------------------------
当Emacs停止响应你的命令时,你能用C-g把它安全的停止。当一个命令执行了太长的时间时你可以用C-g把它终止。
你也可以用C-g来取消数字参数和输入后又不想执行的命令。
>> 键入C-u 100 产生一个值为100的数字参数,然后按C-g。再按C-f。它只会移动 一个字符,因为你用C-g取消了参数。


如果错误的输入了一个 ,你能用C-g消掉它。
* 禁止命令(DISABLED COMMAND)
----------------------------------------------------
一些Emacs命令是“禁止”的,所以新手不会因偶然而执行它。
如果你键入了一个禁止命令,Emacs会显示一条消息说明这条命令是干什么的,并且问你是否需要执行它。
如果你真的想要执行,敲空格键继续。通常,如果你不想执行禁止命令,用“n”来回答。

>> 输入 :(一条禁止命令),然后用n来回答。

* 窗口(WINDOWS)
-----------------------------
Emacs 能有好几个窗口,每一个显示自己的文本。我们将在后面解释怎样对多窗口操作。现在我们要解释怎样去除多余的窗口屏回到基本的单窗口编辑状态。这是一个例子:
C-x 1 一个窗口(也就是除去其他所有的窗口)。
因为Control-x跟了数字1。C-x 1使包含光标的窗口占满整个屏幕,屏删除其他所有窗口。
>> 把光标移动本行并输入 C-u 0 C-l。
>> 键入Control-h k Control-f。 看这个窗口如何缩小,并在按Control-f的时候出现了一个新的文档窗口。
>> 键入C-x 1 并且看到那个文档窗口消失了。

* 插入和删除(INSERTING AND DELETING)
---------------------------------------------------------------
如果你要插入文本,只须输入文本。输入的字符你能见到,比如A,7,*等等。Emacs 会立即把它们插入。键入 (回车键)插入一个换行符。
你能用 删除你输入的最后一个字符。 就是键盘上标着“Del”的键。在某些情况下,“Backspace”键作用和 一样,但不总是这样!


通常, 立即删除光标前面的那个字符。


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

当一行文本太长而超过屏幕宽度时,这一行会在屏幕的下一行被“继续”。文本的右边会有一个反斜杠“”表示它被继续。
>> 插入文本直到最右边,然后再插入。你将看到一个继续了的行。
>> 使用 删除文本直到行的长度在屏幕的宽度以内。继续的行将会消失。

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

记住大多数的Emacs命令能接收一个重复次数。这包括文本字符,把一个文本字符重复的插入几次。
>> 键入这个-- C-u 8 * 来插入 ********

你现在已经学习了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-u 2 C-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-x u 撤销这些改变。


通常,一次C-x u撤销一个改变;如果你在一行上重复几次C-x u,就会重复几次撤销操作。


但有两个例外:不改变文本的操作(包括光标移动和滚屏命令)不算在内;只能处理20 次。


>> 用C-k除去这一行,然后按C-x u 它将重现出来。



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


* 文件(FILES)
-------------------

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


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


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


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


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


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


当你正在输入文件名(或其他任何微型缓冲区输入),你能用命令C-g来取消。


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



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


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


C-x C-s 保存文件(save the file)。


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


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


>> 键入C-x C-s来保存你的教程的拷贝。屏幕的底部会打印出“Wrote.....TUTORIAL”。



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


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




* (缓冲)BUFFERS
--------------------------



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


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




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


C-x C-b 列出缓冲(list buffers)


>> 输入 C-x C-b



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


>> 输入 C-x 1 消除缓冲列表。



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


C-x s 保存缓冲(save the buffer)


C-x s 向你询问每个改动过但未存盘的缓冲,对每个这样的缓冲都询问是否保存。


>> 插入一行文本,然后按C-x s。 将会问你是否保存叫TUTORIAL的缓冲。 输入“y”来回答是。





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



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


C-x 字符扩展,后跟一个字符。
M-x 名字命令扩展,后跟一个长名字。


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


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


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


在不支持挂起的系统上,C-z建立一个子外壳(subshell)运行于Emacs下以使你能运行其他程序然后回到Emacs;这并不是真正的“退出” Emacs。在这种情况下,通常从子外壳回到Emacs的外壳命令是‘exit'。 有很多C-x 命令,这是已学过的一个列表:


C-x C-f 查找文件
C-x C-s 保存文件
C-x C-b 缓冲列表
C-x C-c 退出Emacs


C-x u 撤销操作


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


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


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





* 自动保存(AUTO SAVE)
------------------------------------



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




* 回显区域(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-x text-mode



不必担心,没有命令会给Emacs带来很大改变。但是你可以看到现在M-f和M-b把省略号当作单词的一部分。而先前,在基本模式里,M-f 和M-b把省略号当成当成分隔符。


主模式通常作诸如此类微小的变化:大多数命令在每个主模式里作“同样的工作”,但又有些微小的不同。


要观看关于你现在的主模式的文档,按C-h m。


>> 键入C-u C-v一次和多次使本行接近屏幕的顶端。
>> 输入C-h m ,看看文本模式和基本模式有些什么不同。
>> 按C-x 1 从屏幕上关掉这个文档。



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


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


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


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



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


>> 键入带参数20的C-x。(C-u 20 C-x f) 然后输入一些文本看现在每行只有20个字符了。然后用C-x f把它改回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不让它到达Emacs那里。 要使屏幕解冻,输入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-u 0 C-l。


>> 现在按C-x 2,它把屏幕分裂成两个窗口,每个窗口都显示本教程。光标在上面的窗口里。


>> 按C-M-v 滚动到下面的窗口里。(如果你没有一个真正的Meta键,那么按ESC C-v)

>> 按 C-x o (“o” 指 “其他(other)”) 把光标移到到下面的窗口里。
>> 用 C-v 和 M-v 滚动下面窗口里的文本。 在上面的窗口里看本教程。


>> 再次按 C-x o 使光标回到上面的窗口里。 现在光标象以前一样在上面的窗口里了。



你能一直用C-x o在窗口间切换。每个窗口都有它自己的光标位置,但仅有一个窗口能显示活动的光标。所有的编辑命令都发生在那个显示光标的窗口上。我们把这个窗口叫做“选中窗口( 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-ESC v 将不工作。 这是因为 ESC 是一个有意义的字符而不是一个修饰字符。


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



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


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


这是让两个窗口显示不同内容的另一种方法:


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


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



* 递归编辑层(RECURSIVE EDITING LEVELS)
----------------------------------------------------------------

有时候你会进入“递归编辑层(recursive editing level)”。由模式行上的方括号指示。它在主模式名的括号外面。例如你也许会看到(Fundamental)变成了[(Fundamental)]。


要退出递归编辑层,按ESC ESC ESC。这是一个通用的退出命令,你也可以用它除去额外的窗口,或者退出微型缓冲。


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

你不能用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-x help RET来代替。)


最基本的帮助特性是C-h c。输入C-h,然后是字符 c,然后输入一个命令字符和序列;然后 Emacs 会显示这个命令的简洁的描述。


>> 输入 C-h c Control-p.

显示的消息看起来会象这样:


C-p runs the command previous-line


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


C-h c后面可跟多字符命令,比如 C-x C-s 和 (如果你没有 META 或者 EDIT 或者 ALT 键) v 。


要获取有关命令的更多信息,用C-h k 代替 C-h c。


>> 输入 C-h k Control-p.



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


这是一些有用的 C-h 选项:


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

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



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


>> 输入 C-h a file .




这将在窗口里显示所有名字里有单词“file”的M-x命令。


>> 输入 C-M-v 来滚动帮助窗口,做上几次。


>> 输入 C-x 1 来删除帮助窗口。





* 总结(CONCLUSION)
--------------------------------

记住,永远都用C-x C-c来退出Emacs。用C-z来退到一个临时的外壳里,以使你过后还能回到 Emacs。
本教程尽量让所有的初学者都能理解,如果你发现有些东西不清楚的话,别责备你自己-抱怨吧!

posted @ 2007-06-29 09:07 笨蛋啊帆 阅读(902) | 评论 (0)编辑 收藏

理解finalize()-析构函数的替代者

by Tim Gooch

在许多方面,Java 类似于 C++。Java 的语法非常类似于 C++,Java 有类、方法和数据成员;Java 的类有构造函数; Java 有异常处理。

但是,如果你使用过 C++ 会发现 Java 也丢掉一些可能是你熟悉的特性。这些特性之一就是析构函数。取代使用析构函数,Java 支持finalize() 方法。

在本文中,我们将描述 finalize() 与 C++ 析构函数的区别。另外,我们将创建一个简单的 Applet 来演示 finalize() 是如何工作的。

最终的界限

与 Java 不同,C++ 支持局部对象(基于栈)和全局对象(基于堆)。因为这一双重支持,C++ 也提供了自动构造和析构,这导致了对构造函数和析构函数的调用,(对于堆对象)就是内存的分配和释放。

在 Java 中,所有对象都驻留在堆内存,因此局部对象就不存在。结果,Java 的设计者觉得不需要析构函数(象 C++ 中所实现的)。

取而代之,Java 定义了一个特殊的方法叫做finalize() ,它提供了 C++ 析构函数的一些功能。但是,finalize() 并不完全与 C++ 的析构函数一样,并可以假设它会导致一系列的问题。finalize() 方法作用的一个关键元素是 Java 的垃圾回收器。

垃圾回收器

在 C/C++、Pascal和其他几种多种用途的编程语言中,开发者有责任在内存管理上发挥积极的作用。例如,如果你为一个对象或数据结构分配了内存,那么当你不再使用它时必须释放掉该内存。

在 Java 中,当你创建一个对象时,Java 虚拟机(JVM)为该对象分配内存、调用构造函数并开始跟踪你使用的对象。当你停止使用一个对象(就是说,当没有对该对象有效的引用时),JVM 通过垃圾回收器将该对象标记为释放状态。

当垃圾回收器将要释放一个对象的内存时,它调用该对象的finalize() 方法(如果该对象定义了此方法)。垃圾回收器以独立的低优先级的方式运行,只有当其他线程挂起等待该内存释放的情况出现时,它才开始运行释放对象的内存。(事实上,你可以调用System.gc() 方法强制垃圾回收器来释放这些对象的内存。)

在以上的描述中,有一些重要的事情需要注意。首先,只有当垃圾回收器释放该对象的内存时,才会执行finalize()。如果在 Applet 或应用程序退出之前垃圾回收器没有释放内存,垃圾回收器将不会调用finalize()。

其次,除非垃圾回收器认为你的 Applet 或应用程序需要额外的内存,否则它不会试图释放不再使用的对象的内存。换句话说,这是完全可能的:一个 Applet 给少量的对象分配内存,没有造成严重的内存需求,于是垃圾回收器没有释放这些对象的内存就退出了。

显然,如果你为某个对象定义了finalize() 方法,JVM 可能不会调用它,因为垃圾回收器不曾释放过那些对象的内存。调用System.gc() 也不会起作用,因为它仅仅是给 JVM 一个建议而不是命令。

finalize() 有什么优点呢?

如果finalize() 不是析构函数,JVM 不一定会调用它,你可能会疑惑它是否在任何情况下都有好处。事实上,在 Java 1.0 中它并没有太多的优点。

根据 Java 文档,finalize() 是一个用于释放非 Java 资源的方法。但是,JVM 有很大的可能不调用对象的finalize() 方法,因此很难证明使用该方法释放资源是有效的。

Java 1.1 通过提供一个System.runFinalizersOnExit() 方法部分地解决了这个问题。(不要将这个方法与 Java 1.0 中的System.runFinalizations() 方法相混淆。)不象System.gc() 方法那样,System.runFinalizersOnExit() 方法并不立即试图启动垃圾回收器。而是当应用程序或 Applet 退出时,它调用每个对象的finalize() 方法。

正如你可能猜测的那样,通过调用System.runFinalizersOnExit() 方法强制垃圾回收器清除所有独立对象的内存,当清除代码执行时可能会引起明显的延迟。现在建立一个示例 Applet 来演示 Java 垃圾回收器和finalize() 方法是如何相互作用的。

回收垃圾

通过使用Java Applet Wizard 创建一个新的 Applet 开始。当提示这样做时,输入 final_things 作为 Applet 名,并选择不要生成源文件注释。

接下来,在Java Applet Wizard 进行第三步,不要选择多线程选项。在第五步之前,根据需要修改 Applet 的描述。

当你单击Finish 后,Applet Wizard 将生成一个新的工作空间,并为该项目创建缺省的 Java 文件。从列表 A 中选择适当的代码输入(我们已经突出显示了你需要输入的代码)。

当你完成代码的输入后,配置Internet 浏览器将System.out 的输出信息写到Javalog.txt 文件中。(在IE 选项对话框的高级页面中选择起用 Java Logging。)

编译并运行该 Applet。然后,等待 Applet 运行(你将在状态栏中看到 Applet 已启动的信息),退出浏览器,并打开Javalog.txt 文件。你将会发现类似于下列行的信息:

        1000 things constructed

        0 things finalized

正如你能够看到的那样,建立了1,000个对象仍然没有迫使垃圾回收器开始回收空间,即使在 Applet 退出时也没有对象被使用。

现在,删除在stop() 方法第一行中的注释符以起用System.gc() 方法。再次编译并运行该 Applet ,等待 Applet 完成运行,并退出浏览器。当你再次打开Javalog.txt 文件,你将看到下列行:

        1000 things constructed

        963 things finalized

这次,垃圾回收器认为大多数对象未被使用,并将它们回收。按顺序,当垃圾回收器开始释放这些对象的内存时,JVM 调用它们的finalize() 方法。

继承finalize()?

顺便,如果你在类中定义了finalize() ,它将不会自动调用基类中的方法。在我们讨论了finalize() 与 C++ 的析构函数的不同点后,对这个结论不会惊讶,因为为某个类定制的清除代码另一个类不一定会需要。

如果你决定要通过派生一个类的finalize() 方法来调用基类中的finalize() 方法,你可以象其他继承方法一样处理。

        protected void finalize()

        {

          super.finalize();

          // other finalization code...

        }

除了允许你控制是否执行清除操作外,这个技术还使你可以控制当前类的finalize() 方法何时执行。

结论

然而有益的是,Java 的自动垃圾回收器不会失去平衡。作为便利的代价,你不得不放弃对系统资源释放的控制。不象 C++ 中的析构函数,Java Applet 不会自动执行你的类中的finalize() 方法。事实上,如果你正在使用 Java 1.0,即使你试图强制它调用finalize() 方法,也不能确保将调用它。

因此,你不应当依靠finalize() 来执行你的 Applet 和应用程序的资源清除工作。取而代之,你应当明确的清除那些资源或创建一个try...finally 块(或类似的机制)来实现。

列表 A: final_things.java

import java.applet.*;

import java.awt.*;

 

class thing

{

  public static int thingcount = 0;

  public static int thingfinal = 0;

 

  public thing()

  {

    ++thingcount;

  }

 

 

  protected void finalize()

  {

    ++thingfinal;

  }

}

 

public class final_things extends Applet

{

 

  public final_things()

  {

  }

 

  public String getAppletInfo()

  {

    return "Name: final_thing\r\n" +

           "Author: Tim Gooch\r\n" +

           "Created with Microsoft " +

           "Visual J++ Version 1.1";

  }

 

 

  public void init()

  {

      resize(320, 240);

 

  }

 

  public void destroy()

  {

  }

 

  public void paint(Graphics g)

  {

    g.drawString("Created with Microsoft" +

      "Visual J++ Version 1.1", 10, 20);

  }

 

  public void start()

  {

    while(thing.thingfinal < 1)

    {

      new thing();

    }

  }

 

  public void stop()

  {

    // System.gc();

    System.out.println(thing.thingcount +

      " things constructed");

    System.out.println(thing.thingfinal +

      " things finalized");

  }

 

}

posted @ 2007-06-12 18:13 笨蛋啊帆 阅读(350) | 评论 (0)编辑 收藏


posts - 51, comments - 17, trackbacks - 0, articles - 0

Copyright © 笨蛋啊帆