posted @ 2008-01-27 17:45 笨蛋啊帆 閱讀(315) | 評(píng)論 (0) | 編輯 收藏
2007年6月12日
技術(shù)的東西學(xué)起來(lái)飛快了。
學(xué)的東西技術(shù)起來(lái)忒慢了。
別玩文字游戲。
再次告誡自己。
posted @ 2007-11-12 15:53 笨蛋啊帆 閱讀(545) | 評(píng)論 (1) | 編輯 收藏
11月1號(hào)巨人上市。
難道真是為了這個(gè)巧合簽的?
-。-
數(shù)據(jù)挖掘,數(shù)理統(tǒng)計(jì),忘光光了。 而他們都是專家,都很勤奮,我很有壓力。
努力。。。。。。
基本上,我的任務(wù)是制定決策使網(wǎng)友對(duì)網(wǎng)游更上癮???
不知道,也許基本上就是這樣。
努力。。。。。。
posted @ 2007-11-12 15:50 笨蛋啊帆 閱讀(317) | 評(píng)論 (0) | 編輯 收藏
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步把解壓文件放到這里來(lái),并且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
將程序二進(jìn)制的所有權(quán)改為root,數(shù)據(jù)目錄的所有權(quán)改為運(yùn)行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 復(fù)制到 /etc/rc.d據(jù)說(shuō)是開機(jī)可以啟動(dòng)。
不知道了,下次開機(jī)的時(shí)候 PS 看看好了。
php:
gunzip php-NN.tar.gz
tar -xvf php-NN.tar
現(xiàn)在需要配置 PHP。在這里可以用各種各樣的參數(shù)來(lái)自定義PHP,例如啟動(dòng)哪些
擴(kuò)展功能包的支持等。用 ./configure --help 命令可以列出當(dāng)前可用的所有參
數(shù)。在此例中,將給出一個(gè)在有 MySQL 支持的 Apache 2 上進(jìn)行配置的范例。
用戶本地的 apxs 的路徑可能會(huì)不同,事實(shí)上,在用戶的系統(tǒng)中,它可能被命名為
apxs2。
./configure --with-apxs2=/usr/local/apache2/bin/apxs --with-mysql=/usr/local/mysql
出錯(cuò)!:checking for xml2-config path...
configure: error: xml2-config not found. Please check your libxml2 installation.
到 ftp://xmlsoft.org/libxml2 下載一個(gè) libxml2-devel-2.6.26-1.i386.rpm
安裝他,
rpm -ivhU libxml2-devel-2.6.26-1.i386.rpm
繼續(xù)我的
./configure --with-apxs2=/usr/local/apache2/bin/apxs --with-mysql=/usr/local/mysql
然后
make //10分鐘過(guò)后
make install
make install
配置 php.ini
cp php.ini-dist /usr/local/lib/php.ini
可以編輯 php.ini 文件以修改 PHP 的選項(xiàng)。如果想要把此文件放到另外的位置,
需要在步驟 10 添加 --with-config-file-path=/path 選項(xiàng)。
如果選擇 php.ini -recommended,請(qǐng)務(wù)必閱讀其中的變更的列表,它們將影響
PHP 的執(zhí)行。
編輯 httpd.conf 文件以調(diào)用 PHP 模塊。LoadModule 表達(dá)式右邊的路徑必須指向
系統(tǒng)中的 PHP。以上的 make install 命令可能已經(jīng)完成了這些,但務(wù)必要檢查。
對(duì)于 PHP 4:
LoadModule php4_module modules/libphp4.so
對(duì)于 PHP 5:
LoadModule php5_module modules/libphp5.so
-----------------檢查已經(jīng)改好了。。。
告知 Apache 將特定的擴(kuò)展名解析成 PHP,例如,讓 Apache 將擴(kuò)展名 .php
解析成 PHP。可以將任何擴(kuò)展名指定為 PHP,只需添加它們,每一個(gè)用空格分隔。
例如,要添加 .phtml:
AddType application/x-httpd-php .php .phtml
通常還將 .phps 擴(kuò)展名設(shè)置成顯示高亮的 PHP 源文件,可以這樣來(lái)完成:
AddType application/x-httpd-php-source .phps
啟動(dòng) Apache 服務(wù)器:
/usr/local/apache2/bin/apachectl start
posted @ 2007-09-07 18:34 笨蛋啊帆 閱讀(4339) | 評(píng)論 (0) | 編輯 收藏
本校計(jì)算機(jī)中心機(jī)房共有計(jì)算機(jī)240臺(tái),已互連為局域網(wǎng),希望訪問(wèn)校內(nèi)資源時(shí)通過(guò)校園網(wǎng)接口,而訪問(wèn)外部資源時(shí)通過(guò)ADSL接口。
二、解決
Windows XP和Windows 2003都自帶ADSL寬帶撥號(hào)程序,這里只要使用Windows 2003的路由和遠(yuǎn)程訪問(wèn)程序稍加配置,就可搞掂一切。
1、前提
計(jì)算機(jī)一臺(tái)(配置不用很高,只要能安裝Windows 2003就行),安裝有Windows2003 操作系統(tǒng),內(nèi)插3塊網(wǎng)卡,網(wǎng)卡1:連接內(nèi)部局域網(wǎng),IP:192.168.1.1,子網(wǎng)掩碼:255.255.255.0,網(wǎng)關(guān):空,DNS:空;網(wǎng)卡 2:連接ADSL,IP:自動(dòng)獲取,DNS:自動(dòng)獲取;網(wǎng)卡3:連接校園網(wǎng),IP:202.203.230.2,子網(wǎng)掩碼:255.255.255.0, 網(wǎng)關(guān):202.203.230.1,DNS:202.203.220.2(假設(shè)校園網(wǎng)網(wǎng)段為202.203.220.0—202.203.230.0之 間,DNS服務(wù)器為202.203.220.2);
2、服務(wù)器配置
Step1.單擊開始—管理工具—路由和遠(yuǎn)程訪問(wèn),啟動(dòng)配置向?qū)В贿x擇本地服務(wù)器,單擊操作—配置并啟用路由和遠(yuǎn)程訪問(wèn)(圖一)。單擊下一步,選擇自定義配置—下一步;復(fù)選請(qǐng)求撥號(hào)連接(由分支辦公室路由使用)和LAN路由—下一步—完成,即可啟動(dòng)路由和遠(yuǎn)程訪問(wèn)。

Step2.選擇網(wǎng)絡(luò)接口,單擊操作—新建請(qǐng)求撥號(hào)接口—下一步—下一步,選擇使用以太網(wǎng)上的PPP(PPPoE)連接—下一步—下一步,彈出協(xié)議及安全措施選項(xiàng),去掉所有鉤選,單擊下一步,輸入ADSL帳號(hào)和密碼,下一步—完成。
Step3.新建一批處理文件route.bat,并把其快捷方式添加到開始—程序—啟動(dòng)下,編輯route.bat內(nèi)容如下:
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
//(自行把校園網(wǎng)的IP段添加上)
route add 202.203.230.0 mask 255.255.255.0 202.203.230.1
3、客戶機(jī)配置
TCP/IP配置如下:IP:192.168.1.x,子網(wǎng)掩碼:255.255.255.0,網(wǎng)關(guān):192.168.1.1,首選DNS服務(wù)器:當(dāng)?shù)? ADSL域名服務(wù)器IP(可向ADSL提供商查詢,如昆明電信的為:202.98.160.68),備用DNS服務(wù)器:202.203.220.2。此處 的DNS設(shè)置非常關(guān)鍵,有的人會(huì)誤把DNS設(shè)為:192.168.1.1。
三、總結(jié)
使用此方法實(shí)現(xiàn)寬帶共享,可節(jié)約購(gòu)買路由器的費(fèi)用,幾乎不占用服務(wù)器資源,且只要往服務(wù)器上加插網(wǎng)卡,就可任意擴(kuò)張客戶機(jī)數(shù)量或外部出口。
posted @ 2007-08-22 20:33 笨蛋啊帆 閱讀(275) | 評(píng)論 (0) | 編輯 收藏
在WINDOWS下手動(dòng)設(shè)置路由主要在DOS系統(tǒng)中命令符下(在運(yùn)行輸入欄中鍵入COMMAND或者CMD即可)進(jìn)行。
鍵入命令ROUTE回車會(huì)出現(xiàn)大約幾十行英文說(shuō)明,主要解說(shuō)在WINDOWS系統(tǒng)中如何添加、刪除、修改路由。現(xiàn)簡(jiǎn)單介紹如下:
ROUTE命令格式如下:
ROUTE [-f] [-p] [command [destination] [MASK netmask] [gateway] [METRIC metric] [IF interface]
其中 –f 參數(shù)用于清除路由表,-p參數(shù)用于永久保留某條路由(即在系統(tǒng)重啟時(shí)不會(huì)丟失路由,但在WINDOWS95下無(wú)效)。
Command主要有PRINT(打印)、ADD(添加)、DELETE(刪除)、CHANGE(修改)共4個(gè)命令。
Destination代表所要達(dá)到的目標(biāo)IP地址。
MASK是子網(wǎng)掩碼的關(guān)鍵字。Netmask代表具體的子網(wǎng)掩碼,如果不加說(shuō)明,默認(rèn)是255.255.255.255(單機(jī)IP地址),因此鍵入掩碼時(shí)候要特別小心,要確認(rèn)添加的是某個(gè)IP地址還是IP網(wǎng)段。如果代表全部出口子網(wǎng)掩碼可用0.0.0.0。
Gateway代表出口網(wǎng)關(guān)。
其他interface和metric分別代表特殊路由的接口數(shù)目和到達(dá)目標(biāo)地址的代價(jià),一般可不予理會(huì)。
我們根據(jù)單網(wǎng)卡和多網(wǎng)卡(以雙網(wǎng)卡為例)兩種情況敘述在WINDOWS下如何具體設(shè)置路由。
1、單網(wǎng)卡:
在WINDOWS系統(tǒng)下有4條最基本路由,參照下圖(鍵入route print命令)具體是:
上述路由是WINDOWS自帶路由,永不消失,如果上述路由不完整,則說(shuō)明TCP/IP的安裝和運(yùn)行存在某些最基本問(wèn)題、或本機(jī)網(wǎng)絡(luò)配置或者安裝存在問(wèn)題。
上述表格中,127.0.0.1用于測(cè)試回送(loopback)地址,不能作為有效的網(wǎng)絡(luò)地址。PC1的IP地址為 192.168.97.1,路由器1(用于上互聯(lián)網(wǎng))的局域口IP地址為192.168.97.10,路由器2(用于上辦公網(wǎng))的局域口IP地址為 192.168.97.11。
如果PC1同時(shí)想訪問(wèn)互聯(lián)網(wǎng)和辦公網(wǎng),通常情況是在WINDOWS網(wǎng)絡(luò)屬性反復(fù)修改默認(rèn)網(wǎng)關(guān),每次還只能訪問(wèn)1個(gè)網(wǎng)段,既不方便也非常麻煩。為解決這個(gè)問(wèn)題可在DOS命令符下鍵入如下命令:
route add 0.0.0.0 maks 0.0.0.0 192.168.97.10(用于上互聯(lián)網(wǎng))、
route add 10.42.29.0 mask 255.255.255.0 192.168.97.11(用于上辦公網(wǎng))。
這樣將互聯(lián)網(wǎng)作為默認(rèn)路由,辦公網(wǎng)用作特殊路由添加,當(dāng)然,如果還有其他系統(tǒng),可采用同樣路由添加。
為了確保路由正確、避免引起路由混亂,最好先刪除路由,再添加路由。比如上面的命令可改為:
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。
為了確保路由設(shè)置長(zhǎng)久生效,可將上述命令加入AUTOEXEC.BAT文件中,即操作系統(tǒng)一啟動(dòng)就自動(dòng)設(shè)置路由。當(dāng)然也可在第一次添加路由時(shí)加入-P參數(shù)。
具體如下:
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。
這時(shí)用route print查看路由,就可以看到有兩條永久路由添加到路由表中了。
2、多網(wǎng)卡(以雙網(wǎng)卡為例)
如果在同一PC機(jī)上帶有兩個(gè)網(wǎng)卡,聯(lián)上兩個(gè)不同網(wǎng)段的系統(tǒng),具體參見下面網(wǎng)絡(luò)連接示意圖:
一般情況下,在PC機(jī)上加上雙網(wǎng)卡和雙網(wǎng)關(guān),邊可以輕松聯(lián)上兩個(gè)子系統(tǒng)。但由于WINDOWS自身系統(tǒng)原因,經(jīng)常容易 出現(xiàn)網(wǎng)關(guān)浮動(dòng)或不穩(wěn)定的情況,比如PING辦公自動(dòng)化地址無(wú)法PING通,卻返回從192.168.97.10(路由器1)反饋的信息,此時(shí)查看網(wǎng)絡(luò)路 由,路由表正常,此時(shí)需要刷新路由。
事實(shí)上,可以采取同單網(wǎng)卡類似的辦法,可以去掉網(wǎng)絡(luò)屬性中網(wǎng)關(guān),進(jìn)行人工設(shè)置路由。人工設(shè)置路由更加精確和自由,比如可以人工控制究竟訪問(wèn)某個(gè)網(wǎng)站還是某個(gè)網(wǎng)段或者全部網(wǎng)段。
參照上圖配置,可在DOS提示符下鍵入如下命令:
route delete 0.0.0.0
route add 0.0.0.0 mask 0.0.0.0 192.168.97.10(網(wǎng)卡1尋址路由,上互聯(lián)網(wǎng),默認(rèn)路由)
route add 10.42.0.0 mask 255.255.0.0 10.42.29.10(網(wǎng)卡2尋址路由,上辦公網(wǎng))。
當(dāng)然可以添加- P參數(shù)或者將路由添加信息加入自動(dòng)批處理文件使路由信息永久生效
posted @ 2007-08-22 20:32 笨蛋啊帆 閱讀(403) | 評(píng)論 (0) | 編輯 收藏
matlab工具箱函數(shù)匯總 | |
附錄Ⅰ 工具箱函數(shù)匯總
表Ⅰ-2 累加分布函數(shù)
表Ⅰ-3 累加分布函數(shù)的逆函數(shù)
表Ⅰ-4 隨機(jī)數(shù)生成器函數(shù)
表Ⅰ-5 分布函數(shù)的統(tǒng)計(jì)量函數(shù) 續(xù)表
表Ⅰ-6 參數(shù)估計(jì)函數(shù)
表Ⅰ-7 統(tǒng)計(jì)量描述函數(shù)
表Ⅰ-8 統(tǒng)計(jì)圖形函數(shù)
表Ⅰ-9 統(tǒng)計(jì)過(guò)程控制函數(shù)
表Ⅰ-10 聚類分析函數(shù)
表Ⅰ-11 線性模型函數(shù)
表Ⅰ-12 非線性回歸函數(shù)
表Ⅰ-13 試驗(yàn)設(shè)計(jì)函數(shù)
表Ⅰ-14 主成分分析函數(shù) 表Ⅰ-15 多元統(tǒng)計(jì)函數(shù) 表Ⅰ-16 假設(shè)檢驗(yàn)函數(shù) 表Ⅰ-17 分布檢驗(yàn)函數(shù) 表Ⅰ-18 非參數(shù)函數(shù) 表Ⅰ-19 文件輸入輸出函數(shù) 表Ⅰ-20 演示函數(shù)
表Ⅰ-22 方程求解函數(shù)表 表Ⅰ-23 最小二乘函數(shù)表 表Ⅰ-24 實(shí)用函數(shù)表 表Ⅰ-25 大型方法的演示函數(shù)表 表Ⅰ-26 中型方法的演示函數(shù)表 Ⅰ.3 樣條工具箱函數(shù) 表Ⅰ-28 分段多項(xiàng)式樣條函數(shù) 表Ⅰ-29 B樣條函數(shù) 表Ⅰ-30 有理樣條函數(shù) 表Ⅰ-31 操作樣條函數(shù) 表Ⅰ-32 樣條曲線端點(diǎn)和節(jié)點(diǎn)處理函數(shù) 表Ⅰ-34 解線性方程組的函數(shù) 表Ⅰ-35 樣條GUI函數(shù) Ⅰ.4 偏微分方程數(shù)值解工具箱函數(shù)
表Ⅰ-37 用戶界面算法函數(shù)
表Ⅰ-38 幾何算法函數(shù)
表Ⅰ-39 繪圖函數(shù)
表Ⅰ-40 實(shí)用函數(shù)
表Ⅰ-41 自定義算法函數(shù)
表Ⅰ-42 演示函數(shù) |
posted @ 2007-07-28 14:50 笨蛋啊帆 閱讀(3791) | 評(píng)論 (1) | 編輯 收藏
GNU Emacs的主要文檔在GNU Emacs手冊(cè)中,你可以用Info(Emacs的一個(gè)子系統(tǒng))以行方式去讀。請(qǐng)?jiān)谀抢锊榭赐耆暮妥钚碌奈臋n。本幫助頁(yè)的更新依賴于志愿人員; Emacs 的維護(hù)人員的首要目標(biāo)是使使用能本幫助頁(yè)面盡可能少地占用其它更有用的項(xiàng)目的時(shí)間。
GNU Emacs 包含了其它 Emacs 編輯器所擁有的全部功能。由于它的編輯命令是用Lisp寫的,因此很容易擴(kuò)展。
Emacs 有一個(gè)擴(kuò)展的交互幫助工具,但該工具假設(shè)你能熟練地使用 Emacs 窗口和緩沖區(qū)。CTRL-h (退格或CTRL-h) 可以進(jìn)入該幫助工具。 Help Tutorial(幫助指南,CTRL-h t) 調(diào)用一個(gè)交互式的指南以幫助初學(xué)者在很短的時(shí)間內(nèi)了解 Emacs 的基本知識(shí)。Help Apropos (CTRL-h a) 幫助你找到一個(gè)命令并給出其功能說(shuō)明,Help Character (字符幫助,CTRL-h c) 描述一個(gè)給定的字符的作用,Help Function (函數(shù)幫助,CTRL-h f) 描述一個(gè)指定名稱的Lisp 函數(shù)。
Emacs 的Undo(恢復(fù)功能)可以取消最近幾步對(duì)緩沖區(qū)所做的修改,因此很容易從編輯錯(cuò)誤中恢復(fù)
GNU Emacs 的許多特殊的包可以處理郵件讀取(RMail)和郵件發(fā)送
(Mail),大綱編輯 (Outline),編譯(Compile), 在 Emacs 窗口中運(yùn)行shell (Shell), 運(yùn)行Lisp 的read-eval-print 循環(huán)(Lisp-Interaction-Mode), 以及自動(dòng)修正(Doctor)。
還有一個(gè)擴(kuò)充的參考手冊(cè),但是其它版本的 Emacs 用戶即使沒(méi)有它,要適應(yīng)GNU Emacs也不會(huì)有什么困難。而Emacs的新用戶通過(guò)學(xué)習(xí)指南和使用自身文檔特性,很快就能夠使用GNU Emacs的基本功能。
Emacs選項(xiàng)
以下的選項(xiàng)是很常用的:
file
編輯 文件。
+number
轉(zhuǎn)到由 number 指定的行(在"+"和數(shù)字當(dāng)中不要加入空格)。
-q
不載入初始文件。
-u user
載入 user 的初始文件。
-t file
使用指定的 file 文件作為終端來(lái)代替stdin/stdout。該項(xiàng)必須作為命令行的第一個(gè)參數(shù)來(lái)說(shuō)明。
以下的選項(xiàng)是面向lisp的 (這些選項(xiàng)按照給定的順序處理):
-f function
執(zhí)行l(wèi)isp函數(shù) function 。
-l file
裝入文件 file 中的Lisp代碼。
Emacs 作為批處理編輯器來(lái)運(yùn)行時(shí),以下選項(xiàng)是有用的:
-batch
批處理模式編輯。 編輯器將把消息送至stderr(注1)。這個(gè)選項(xiàng)必須位于參數(shù)列表的第一位。必須用-l和-f選項(xiàng)來(lái)指明要執(zhí)行的文件和要調(diào)用的函數(shù)。
-kill
在批處理模式下退出Emacs Emacs 。
在X Window下使用Emacs
Emacs 已經(jīng)被設(shè)計(jì)得能在X Window系統(tǒng)下很好地工作。如果在X Window下運(yùn)行 Emacs ,將創(chuàng)建其自己的X Window來(lái)顯示。這是因?yàn)槟阋苍S會(huì)將Emacs編輯器作為后臺(tái)進(jìn)程來(lái)啟動(dòng),并能夠繼續(xù)使用原來(lái)的窗口。
Emacs 在啟動(dòng)時(shí)能帶以下X命令開關(guān):
-name name
指定初始的 Emacs 窗口的名字。這使得能象窗口標(biāo)題一樣查詢X資源。
-title name
指定起始X窗口的標(biāo)題。
-r
反白顯示 Emacs 窗口。
-i
當(dāng) Emacs 窗口圖標(biāo)化時(shí),使用"廚房水槽"位圖圖標(biāo)。
-font font, -fn font
將 Emacs 窗口字體設(shè)置為指定的字體 font 。在 /usr/lib/X11/fonts 路徑下可以找到不同的 X 字體。注意: Emacs 只接受固定寬度的字體。在X11第四版字體命名協(xié)議下,若字體名的第11個(gè)域的值是"m"或"c",則該字體是固定寬度的字體。此外,若字體名擁有 寬x高 的形式,它一般也是 固定 寬度字體。關(guān)于更多信息,參見xlsfonts(1)。 在指定字體時(shí),別忘了在開關(guān)和字體名之間需要一個(gè)空格。
-b pixels
設(shè)置 Emacs 窗口邊框?qū)挾葹?pixels 指定的點(diǎn)數(shù)。缺省值是窗口每邊寬為1點(diǎn)。
-ib pixels
設(shè)置Emacs窗口內(nèi)部邊框?qū)挾葹?pixels 指定的點(diǎn)數(shù)。缺省值是窗口每邊填充1點(diǎn)。
-geometry geometry
按照給定的值設(shè)置 Emacs Emacs窗口的寬,高及位置。幾何參數(shù)的指定應(yīng)符合標(biāo)準(zhǔn)X格式,關(guān)于更多信息,參見 X(1) 。寬和高用字符來(lái)指定,缺省值是80 x 24。
-fg color
在彩色顯示下,設(shè)置文本的顏色。有效的顏色名列表見 /usr/lib/X11/rgb.txt 。
-bg color
在彩色顯示下,設(shè)置窗口背景的顏色。
-bd color
在彩色顯示下,設(shè)置窗口邊框的顏色。
-cr color
在彩色顯示下,設(shè)置窗口文本光標(biāo)的顏色。
-ms color
在彩色顯示下,設(shè)置窗口鼠標(biāo)光標(biāo)的顏色。
-d displayname, -display displayname
在由 displayname. 指定的顯示器上創(chuàng)建 Emacs 窗口。必須是在命令行中指定的第一個(gè)選項(xiàng)。
-nw
告訴 Emacs 不使用其到 X 的特定界面。如果在從 xterm(1) 窗口調(diào)用 Emacs 時(shí),使用此開關(guān),則在該窗口中打開顯示器。這必須是命令行中指定的第一個(gè)選項(xiàng)。
您可以在 .Xresources 文件(請(qǐng)參閱 xrdb(1) )中為 Emacs 窗口設(shè)置 X 缺省值。請(qǐng)使用下列格式:
emacs.keyword:value
其中 value(值) 指定 keyword(關(guān)鍵字) 的缺省值。 Emacs 允許您為下列關(guān)鍵字設(shè)置缺省值:
font (Font 類)
設(shè)置窗口的文本 痔濉?
reverseVideo (ReverseVideo 類)
如果把 reverseVideo 的值設(shè)置為 ,則反白顯示窗口。
bitmapIcon ( BitmapIcon 類)
如果 bitmapIcon 的值設(shè)置為 ,則窗口將圖符化為凹入狀。
borderWidth (BorderWidth 類)
設(shè)置窗口的邊框?qū)挾龋ㄒ?pixel 為單位)。
internalBorder (BorderWidth 類)
設(shè)置窗口的內(nèi)部邊框?qū)挾龋ㄒ?pixel 為單位)。
foreground (Foreground 類)
對(duì)于彩色顯示器,設(shè)置窗口的文本顏色。
background (Background 類)
對(duì)于彩色顯示器,設(shè)置窗口的背景顏色。
borderColor (BorderColor 類)
對(duì)于彩色顯示器,設(shè)置窗口的邊框顏色。
cursorColor (Foreground ?
對(duì)于彩色顯示器,設(shè)置窗口文本光標(biāo)的顏色。
pointerColor (Foreground 類)
對(duì)于彩色顯示器,設(shè)置窗口鼠標(biāo)光標(biāo)的顏色。
geometry (Geometry 類)
設(shè)置 Emacs 窗口的幾何大小(如上所述)。
title (Title 類)
設(shè)置 Emacs 窗口的標(biāo)題。
iconName (Title 類)
設(shè)置 Emacs 窗口圖符的圖符名稱。
如果你在使用黑白顯示器時(shí)試圖設(shè)置顏色值,則窗口的特征將缺省為:前景色將設(shè)置為黑色,背景色將設(shè)置為白色,邊框顏色將設(shè)置為灰色,而文本和鼠標(biāo)光標(biāo)將設(shè)置為黑色。
使用鼠標(biāo)
下面列出在X11下 Emacs 窗口的鼠標(biāo)按鈕的捆綁功能。
左鍵 定點(diǎn)。
中鍵 粘貼文本
右鍵 把文本剪貼到X的剪貼緩沖區(qū)
SHIFT-中鍵 把文本剪貼到X的剪貼緩沖區(qū)。
SHIFT-右鍵 粘貼文本
CTRL-中鍵 把文本剪貼到X的剪貼緩沖區(qū)并把它刪除
CTRL-右鍵 選擇窗口并分割它成兩個(gè)窗口,和輸入CTRL-X 2一樣
CTRL-SHIFT-左鍵 對(duì)X緩沖區(qū)菜單操作,掛起按鈕和鍵盤,等待菜單出現(xiàn),
選擇緩沖區(qū)和釋放它。把鼠標(biāo)移離菜單和釋放操作。
CTRL-SHIFT-中鍵 彈出X菜單幫助索引Emacs幫助。
CTRL-SHIFT-右鍵 用鼠標(biāo)選擇窗口并刪除所有其他窗口,和輸入CTRL-X 1一樣。
手冊(cè)
你可以從開發(fā)GNU軟件的自由軟件基金會(huì)獲得GNU Emacs手冊(cè)的拷貝。
要獲得信息仔細(xì)查看文件ORDERS。
你本地的Emacs維護(hù)也有有效的拷貝。對(duì)于所有從FSF獲得的軟件和印刷品,每個(gè)人都有權(quán)制造和發(fā)布Emacs手冊(cè)的副本。
手冊(cè)的TeX源文檔也被包含在Emacs源代碼發(fā)布中。
文件
/usr/local/info - 通過(guò)Info文檔瀏覽器(Emacs的一個(gè)子系統(tǒng))查閱的文件。
現(xiàn)在還沒(méi)有太多的Unix在以此為文檔,但Emacs參考手冊(cè)的完整文本以便利的樹結(jié)?p> 形式包含于其中。 /usr/local/share/emacs/$VERSION/src - C源文件和目標(biāo)文件。 /usr/local/share/emacs/$VERSION/lisp - 定義了大部分編輯命令的Lisp源文件和編譯后的文件。 有些已經(jīng)裝入了;其它的則在使用時(shí)自動(dòng)從本目錄中裝入。 /usr/local/share/emacs/$VERSION/etc - 與GNU Emacs一同使用的各種程序,還有一些文件的信息。 /usr/local/share/emacs/$VERSION/etc/DOC.* - 包含了Lisp原語(yǔ)和GNU Emacs 的預(yù)裝入Lisp函數(shù)的文檔字符串。 它們被儲(chǔ)存在這里以減小Emacs的體積。 /usr/local/share/emacs/$VERSION/etc/OTHER.EMACSES 討論GNU Emacs與其它版本的Emacs之間的不同。
/usr/local/share/emacs/$VERSION/etc/SERVICE 列舉為幫助GNU Emacs的用戶提供各種服務(wù)的人們,包括教學(xué)、疑難解答、移植和定制。
這些文件還含有對(duì)那些希望用Emacs Lisp擴(kuò)展語(yǔ)言編寫程序的人有用的信息,該語(yǔ)言含沒(méi)有完整的文檔。 /usr/local/com/emacs/lock - 為使用Emacs修改的所有文件保存鎖文件,以防止由兩個(gè)用戶在同時(shí)對(duì)一個(gè)文件進(jìn)行修改。 /usr/lib/X11/rgb.txt - 合法的X顏色名的列表。
臭蟲
此處有一個(gè)郵件列表,因特網(wǎng)上的bug-gnu-emacs@prep.ai.mit.edu,用于報(bào)告Emacs的臭蟲和修補(bǔ)。但在報(bào)告作為一個(gè)臭蟲的 某件事之前,請(qǐng)盡量肯定它真是一個(gè)臭蟲,而不是一個(gè)誤會(huì)或一個(gè)故意的特性。我們要求你閱讀在此參考手冊(cè)末尾附近的"Reporting
Emacs Bugs"(報(bào)告 Emacs 臭蟲)章節(jié)(或Info系統(tǒng)),用于提示如何和什么時(shí)候報(bào)告臭蟲。 還有,在每個(gè)你發(fā)送的臭蟲報(bào)告中包含你所運(yùn)行的Emacs的版本號(hào)。 不要期望對(duì)一個(gè)錯(cuò)誤報(bào)告給出個(gè)人的答案。報(bào)告錯(cuò)誤的目的是為了大家在下一個(gè)版本中可以修復(fù)它。 對(duì)個(gè)人來(lái)說(shuō),我們可以去參考服務(wù)文件(見上)的一個(gè)列表。 除非是向這個(gè)郵件列表報(bào)告臭蟲,請(qǐng)不要發(fā)任何東西到這里來(lái)。你可以將申請(qǐng)加入郵件列表的請(qǐng)求寄到 info-gnu-emacs-request@prep.ai.mit.edu(或者相應(yīng)的UUDP地址)中去。關(guān)于Emacs(UNIX編輯程序宏指 令)郵件列表的詳情,請(qǐng)閱讀文件
/usr/local/emacs/etc/MAILINGLISTS。 如果錯(cuò)誤是孤立的,往往是可以修復(fù)的。因此如果你對(duì)報(bào)道那些錯(cuò)誤感興趣的話,你可以很容易將它復(fù)制出來(lái)。
我所知道的一些錯(cuò)誤是:在一些UNIX版本中,SHELL不能很好的和應(yīng)用程序一起工作。
非限制的
Emacs 是免費(fèi)的; 任何人都可以按照與每個(gè) Emacs 的副本在一起的 Emacs General Public License中陳述的條款把 Emacs 的副本分發(fā)?p> 任何人,該許可證的也出現(xiàn)在參考手冊(cè)中。
Emacs 的副本有時(shí)與UNIX系統(tǒng)在一起打包進(jìn)行分發(fā),但是它永遠(yuǎn)不會(huì)包含在任何哺欽廡┎僮饗低車男砜芍さ姆段е凇O笳庋シ戳頌蹩畹陌鍤潛輝市淼模率瞪 希珿eneral Public License的主要目的是讓那些分發(fā) Emacs. 的人可以免受更多的干擾。
Richard Stallman鼓勵(lì)你改善和擴(kuò)展Emacs,鼓勵(lì)你把你對(duì)GNU庫(kù)的擴(kuò)展貢獻(xiàn)給GNU庫(kù)。最后GNU(Gnus Not Unix)將成為伯克利UNIX最好的替代品。每個(gè)人都可以自由的使用,拷貝,研究和更改GNU的系統(tǒng)。
參見
X(1), xlsfonts(1), xterm(1), xrdb(1)
作者
Emacs 是由Richard Stallman和自由軟件基金會(huì)合作完成的。 Joachim Martillo和Robert Krawitz為系統(tǒng)加入了X界面。
posted @ 2007-06-29 09:10 笨蛋啊帆 閱讀(565) | 評(píng)論 (0) | 編輯 收藏
C- 意思是當(dāng)敲入字符 時(shí)同時(shí)按住控制鍵,因此,C-f表 示:按住控制鍵并且按 f 。 M- 表示當(dāng)鍵入 時(shí)按住META或ALT或EDIT鍵。如果沒(méi)有META 或ALT或EDIT鍵,則用ESC鍵代替。 表示ESC鍵
注意:退出Emacs,按C-x C-c(兩個(gè)字符)。在文本左邊區(qū)域的“>>”符號(hào)表示讓你試著使用一個(gè)命令。比如:
>> 現(xiàn)在鍵入C-v(觀看下一屏)移動(dòng)到下一屏。(就象前面說(shuō)的,按v的同時(shí)也按住控制鍵)。從現(xiàn)在開始,每當(dāng)你讀完一屏的時(shí)候都可以用它來(lái)翻屏。
注意在翻屏后會(huì)保留上屏的最后一行;這是為你繼續(xù)閱讀文本提供某些連貫性。
你所需要知道的第一件事是如何把光標(biāo)從一個(gè)地方移動(dòng)到另一個(gè)地方。你已經(jīng)知道了如何向前翻一屏--用 C-v。要向后翻一屏,鍵入M-v。
>> 試著鍵入 M-v 和 C-v 幾次。
* 摘要(SUMMARY)
---------------------------
下面幾個(gè)命令對(duì)整屏觀看時(shí)有用:
C-v 向前翻一整屏。
M-v 向后翻一整屏。
C-l 清除屏幕并重新顯示所有的文本,然后把光標(biāo)移動(dòng)到屏幕的中央。 (注意是Control-L,而不是 Control-1)。
>> 尋找光標(biāo),并且注意它在文本里的位置。然后鍵入C-l。再尋找光標(biāo)你會(huì)注意到光標(biāo)現(xiàn)在會(huì)出現(xiàn)在同樣的文本附近。
* 基本光標(biāo)控制(BASIC CURSOR CONTROL)
-----------------------------------------------------------------
整屏整屏的移動(dòng)是很有用的,可是如何把光標(biāo)移動(dòng)到屏幕上文本里的一個(gè)指定的地方呢?
有好幾個(gè)方法可以實(shí)現(xiàn)。最基本的方法是用命令 C-p,C-b,C-f,和C-n。這些命令每個(gè)都使光標(biāo)在屏幕上往特定的方向移動(dòng)一行或者一列。下面是一個(gè)圖表顯示了這四個(gè)命令和它們所移動(dòng)的方向:
上一行,C-p
:
:
向前,C-b ...... 當(dāng)前光標(biāo)的位置 ...... 向后,C-f
:
:
下一行,C-n
>> 用C-n或C-p把光標(biāo)移動(dòng)到圖表中間。然后鍵入C-l會(huì)看到整個(gè)圖表出現(xiàn)在屏幕的中央。
你也許會(huì)發(fā)現(xiàn)這些字母很容易記住:P 代表上面的(previous),N 代表下一個(gè) (next),B 代表向前(backward),F(xiàn) 代表向后(forward)。這些是基本的光標(biāo)位置命令,你將經(jīng)常會(huì)用到它們。所以現(xiàn)在學(xué)習(xí)它們很有好處。
>> 用幾次 C-n 把光標(biāo)向下移動(dòng)到這一行。
>> 用 C-f 把光標(biāo)移動(dòng)到行里,再用C-p把光標(biāo)上移。觀察當(dāng)光標(biāo)在行的中間時(shí) C-p做了些什么。
每一個(gè)文本行都以一個(gè)換行符結(jié)尾,它用來(lái)當(dāng)作行與行之間的分格。你的文件的最后一行的尾部應(yīng)該有一個(gè)換行符(但Emacs并不要求一定要有一個(gè))。
>> 試著在行的開頭使用C-b。它將會(huì)把光標(biāo)移到上一行的末尾。這是因?yàn)樗蚝笠频臅r(shí)候穿過(guò)了換行符。
C-f 也能象 C-b一樣穿過(guò)換行符。
>> 使用幾次C-b,使您能知道光標(biāo)在哪。然后用C-f移動(dòng)到行的末尾。然后再用一次C-f,使光標(biāo)移動(dòng)到下一行。
當(dāng)你移動(dòng)超過(guò)屏幕的頂部或底部,光標(biāo)回移動(dòng)到下一屏的中間,這叫做“滾屏 (scrolling)”。它使得Emacs滾屏移動(dòng)到文本上指定的部位而不是移出屏幕。
>> 試著用C-n把光標(biāo)移過(guò)屏幕的底部,看看回發(fā)生什么。
如果覺得一個(gè)一個(gè)字符的移動(dòng)太緩慢,可以一個(gè)單詞一個(gè)單詞的移動(dòng)。M-f(Meta-f) 向前移一個(gè)單詞,M-b向后移一個(gè)單詞。
>> 鍵入幾個(gè)M-f和M-b。
當(dāng)光標(biāo)在一個(gè)單詞的中間,M-f移動(dòng)到單詞的末尾。當(dāng)光標(biāo)在兩個(gè)單詞間的空白部分 M-f移動(dòng)到后一個(gè)單詞的末尾。M-b與M-f一樣,只是移動(dòng)的方向相反。
>> 鍵入M-f和M-b幾次,中間穿插一些C-f和C-b以使你能觀察到M-f和M-b在單詞中和單詞間的不同行為。
注意比較C-f,C-b與M-f,M-b。通常情況下Meta鍵用于有關(guān)語(yǔ)言單位(詞,句,段落) 的操作;而控制鍵用于編輯時(shí)的基本單位(字符,行等)。
這是句與行的比較:C-a和C-e移動(dòng)到一行的開頭和末尾,M-a和M-e移動(dòng)到一個(gè)句子的開頭和末尾。
>> 鍵入一對(duì)C-a,再鍵入一對(duì)C-e。 鍵入一對(duì)M-a,再鍵入一對(duì)M-e。
你會(huì)看到重復(fù)鍵入的C-a什么也不做,而重復(fù)鍵入的M-a則會(huì)移動(dòng)一個(gè)以上的句子。
光標(biāo)在文本中的位置也叫“點(diǎn)(point)”。在段落里,光標(biāo)標(biāo)示出了點(diǎn)在屏幕上文本里的位置。
下面是簡(jiǎn)單的光標(biāo)移動(dòng)命令的總結(jié),包括單詞和句子的移動(dòng)命令:
C-f 向前移動(dòng)一個(gè)字符。
C-b 向后移動(dòng)一個(gè)字符。
M-f 向前移動(dòng)一個(gè)單詞。
M-b 向后移動(dòng)一個(gè)單詞。
C-n 移動(dòng)到下一行。
C-p 移動(dòng)到上一行。
C-a 移動(dòng)到行首。
C-e 移動(dòng)到行尾。
M-a 向前移動(dòng)到句子的開頭。
M-e 向后移動(dòng)到句子的末尾。
>> 試著對(duì)每一個(gè)命令都實(shí)踐幾次,它們都是經(jīng)常要用到的命令。
另外兩個(gè)重要的光標(biāo)移動(dòng)命令是M-<(Meta小于),它移動(dòng)光標(biāo)到整個(gè)文本的開頭,M-> (Meta大于)它移動(dòng)光標(biāo)到整個(gè)文本的末尾。
在多數(shù)終端上,“<”在逗號(hào)的上面,所以你必須用Shift鍵來(lái)輸入它。在這些終端上,你也必須用Shift鍵來(lái)輸入M-<;沒(méi)有Shift鍵,你可以輸入M-逗號(hào)。
>> 現(xiàn)在就試試M-<,移動(dòng)到本教程的開頭,然后再用C-v移回這里。 現(xiàn)在就試試M->,移動(dòng)到本教程的末尾,然后再用M-v移回這里。
你也可以用方向鍵來(lái)移動(dòng)光標(biāo),如果你的終端有方向鍵的話。我們建議學(xué)習(xí)C-b, C-f,C-n和C-p有三個(gè)原因。第一,它們能在所有類型的終端上工作。第二,你獲得了使用Emacs的鍛煉,你將會(huì)發(fā)現(xiàn)輸入這些CTRL加字符比按方 向鍵要快(因?yàn)槟悴槐匕涯愕氖謴逆I盤上移開)。第三,一旦你養(yǎng)成了使用這些CTRL加字符的命令的習(xí)慣,你就能一樣容易的學(xué)習(xí)其他高級(jí)的光標(biāo)移動(dòng)命令。
大多數(shù)Emacs命令接收一個(gè)數(shù)字參數(shù);對(duì)大多數(shù)命令來(lái)說(shuō),這表示命令重復(fù)的次數(shù)。輸入重復(fù)命令次數(shù)的方法是在輸入命令之前按C-u和數(shù)字。如果你有 META(或EDIT或 ALT)鍵,則有另一種方法輸入數(shù)字參數(shù):在按住META鍵的時(shí)候輸入數(shù)字,我們建議學(xué)習(xí)C-u方法,因?yàn)樗茉谌魏谓K端上工作。
例如,C-u 8 C-f 向前移動(dòng)8個(gè)字符。
>> 試著使用帶數(shù)字參數(shù)的C-n或C-p,只用一個(gè)命令就把光標(biāo)移動(dòng)到與本行相鄰的 行上。
絕大多數(shù)命令把數(shù)字參數(shù)當(dāng)作重復(fù)次數(shù),但也有幾個(gè)例外。C-v和M-v就是。當(dāng)給出一個(gè)參數(shù),只是上滾或下滾數(shù)字指定的行數(shù)而不是屏數(shù)。比如,C-u 4 C-v滾動(dòng)4行屏幕。
>> 現(xiàn)在試試 C-u 8 C-v。
這將使屏幕滾動(dòng)8行,如果你想往回滾動(dòng)的話,鍵入一個(gè)帶參數(shù)的M-v。
如果你正在使用X窗口,在Emacs窗口的左手邊有一個(gè)叫做滾動(dòng)條的矩形區(qū)域。你能通過(guò)用鼠標(biāo)點(diǎn)擊滾動(dòng)條來(lái)滾動(dòng)文本。
>> 試著在滾動(dòng)條頂部的高亮區(qū)域點(diǎn)擊中鍵。這將使文本滾動(dòng),滾動(dòng)的位置取決于 你點(diǎn)擊的長(zhǎng)短。
>> 試著按住鼠標(biāo)中鍵上移或下移鼠標(biāo),你將看到當(dāng)你移動(dòng)鼠標(biāo)時(shí)文本會(huì)上下滾動(dòng)。
* 當(dāng)EMACS掛起時(shí)(WHEN EMACS IS HUNG)
------------------------------------------------------------------
當(dāng)Emacs停止響應(yīng)你的命令時(shí),你能用C-g把它安全的停止。當(dāng)一個(gè)命令執(zhí)行了太長(zhǎng)的時(shí)間時(shí)你可以用C-g把它終止。
你也可以用C-g來(lái)取消數(shù)字參數(shù)和輸入后又不想執(zhí)行的命令。
>> 鍵入C-u 100 產(chǎn)生一個(gè)值為100的數(shù)字參數(shù),然后按C-g。再按C-f。它只會(huì)移動(dòng) 一個(gè)字符,因?yàn)槟阌肅-g取消了參數(shù)。
如果錯(cuò)誤的輸入了一個(gè) ,你能用C-g消掉它。
* 禁止命令(DISABLED COMMAND)
----------------------------------------------------
一些Emacs命令是“禁止”的,所以新手不會(huì)因偶然而執(zhí)行它。
如果你鍵入了一個(gè)禁止命令,Emacs會(huì)顯示一條消息說(shuō)明這條命令是干什么的,并且問(wèn)你是否需要執(zhí)行它。
如果你真的想要執(zhí)行,敲空格鍵繼續(xù)。通常,如果你不想執(zhí)行禁止命令,用“n”來(lái)回答。
>> 輸入 :(一條禁止命令),然后用n來(lái)回答。
* 窗口(WINDOWS)
-----------------------------
Emacs 能有好幾個(gè)窗口,每一個(gè)顯示自己的文本。我們將在后面解釋怎樣對(duì)多窗口操作。現(xiàn)在我們要解釋怎樣去除多余的窗口屏回到基本的單窗口編輯狀態(tài)。這是一個(gè)例子:
C-x 1 一個(gè)窗口(也就是除去其他所有的窗口)。
因?yàn)镃ontrol-x跟了數(shù)字1。C-x 1使包含光標(biāo)的窗口占滿整個(gè)屏幕,屏刪除其他所有窗口。
>> 把光標(biāo)移動(dòng)本行并輸入 C-u 0 C-l。
>> 鍵入Control-h k Control-f。 看這個(gè)窗口如何縮小,并在按Control-f的時(shí)候出現(xiàn)了一個(gè)新的文檔窗口。
>> 鍵入C-x 1 并且看到那個(gè)文檔窗口消失了。
* 插入和刪除(INSERTING AND DELETING)
---------------------------------------------------------------
如果你要插入文本,只須輸入文本。輸入的字符你能見到,比如A,7,*等等。Emacs 會(huì)立即把它們插入。鍵入 (回車鍵)插入一個(gè)換行符。
你能用 刪除你輸入的最后一個(gè)字符。 就是鍵盤上標(biāo)著“Del”的鍵。在某些情況下,“Backspace”鍵作用和 一樣,但不總是這樣!
通常, 立即刪除光標(biāo)前面的那個(gè)字符。
>> 輸入幾個(gè)字符,然后用 刪除它們。不必?fù)?dān)心這個(gè)文件回被改變;你不會(huì) 替換主教程。這只是你的個(gè)人拷貝。
當(dāng)一行文本太長(zhǎng)而超過(guò)屏幕寬度時(shí),這一行會(huì)在屏幕的下一行被“繼續(xù)”。文本的右邊會(huì)有一個(gè)反斜杠“”表示它被繼續(xù)。
>> 插入文本直到最右邊,然后再插入。你將看到一個(gè)繼續(xù)了的行。
>> 使用 刪除文本直到行的長(zhǎng)度在屏幕的寬度以內(nèi)。繼續(xù)的行將會(huì)消失。
你能像刪除其他任何字符一樣刪除換行符。刪除兩個(gè)行間的換行符會(huì)使它們合并為一行。如果這一行很長(zhǎng)屏幕顯示不下的話,將會(huì)用一個(gè)繼續(xù)的行來(lái)表示。
>> 把光標(biāo)移動(dòng)到一行的開頭按 這將使本行和上一行合為一行。
>> 按 重新插入你刪除的換行符。
記住大多數(shù)的Emacs命令能接收一個(gè)重復(fù)次數(shù)。這包括文本字符,把一個(gè)文本字符重復(fù)的插入幾次。
>> 鍵入這個(gè)-- C-u 8 * 來(lái)插入 ********
你現(xiàn)在已經(jīng)學(xué)習(xí)了Emacs的大多數(shù)輸入和排錯(cuò)的方法。你也能一樣的刪除單詞或行。這是刪除操作的摘要:
刪除光標(biāo)前面的字符
C-d 刪除光標(biāo)后面的字符
M- 除去光標(biāo)前面的單詞
M-d 除去光標(biāo)后面的單詞
C-k 除去從光標(biāo)位置到行尾的內(nèi)容
M-k 除去到當(dāng)前句子的末尾
注意比較 ,C-d與M ,M-d和C-f,M-f( 不是一個(gè)控制字符,但不用擔(dān)心)。C-k和M-k就象C-e,M-e。
當(dāng)你一次除去不止一個(gè)字符時(shí),Emacs將保存著這些文本,所以你可以恢復(fù)它們。恢復(fù)那些被除去的文本稱作“拉(yanking)”。你能在除去文本的同一地方拉回它們,或是在文本的其他地方。你能對(duì)文本拉上幾次以產(chǎn)生它們的多個(gè)拷貝,拉的命令是 C-y。
注意“除去(killing)”與“刪除(Deleting)”之間的區(qū)別,被除去的東西能被拉回來(lái),而被刪除的不能。通常除去能除去很多的文本屏保存,而刪除只能除去一個(gè)字符,或是空行或空格,并且不保存。
>> 把光標(biāo)移到一個(gè)空行的開頭,鍵入C-k除去這一行。
>> 按第二次C-k,你將看到剩下的空行也被除去了。
注意單個(gè)的C-k除去行的內(nèi)容,第二個(gè)C-k除去行本身,并且使后面的所有行上移。特別要注意數(shù)字參數(shù):它除去很多行和它們的內(nèi)容,這不僅僅是重復(fù)。C-u 2 C-k 除去兩行和它們剩下的空行;而按兩次C-k并不會(huì)這樣做。
要在當(dāng)前光標(biāo)處找回上次被除去的文本;按C-y
>> 試一試,用C-y把文本拉回來(lái)。
把C-y考慮為你把某人從你這里拿走的東西再拿回來(lái)。注意你如果在一行上按了幾次 C-y,所有被除去的文本是存在一起的,所以按一次C-y將拉回全部的行。
>> 現(xiàn)在就試一下,按幾次C-k。 現(xiàn)在找回被除去的文本;
>> 按C-y。然后把光標(biāo)下移幾行再按一次C-y,你現(xiàn)在會(huì)看到怎樣拷貝這些文本。
當(dāng)你要拉回一些被除去的文本該怎樣做呢?C-y只能拉回最近被除去的文本。但以前的文本并沒(méi)有消失。你能用M-y來(lái)恢復(fù)它。當(dāng)你用C-y拉回最近被除去的 文本后,換成 M-y可以拉回以前被除去的文本。鍵入一次又一次的M-y可以拉回更早以前被除去的文本。當(dāng)你找到要尋找的文本,不必做任何事來(lái)保持它,只須離開拉文本的 地方繼續(xù)你的編輯。
如果你M-y了足夠多的次數(shù),你會(huì)回到開始點(diǎn)(最近被除去的)。
>> 除掉一行,移開,再除掉另一行。 然后用C-y拉回第二行。 然后換成M-y拉回被除掉的第一行。 再按一次M-y看看得到了什么。繼續(xù)按直到拉回被除去的第二行;然后再做幾次。 如果原意的話,你可以給M-y加正的或負(fù)的數(shù)字參數(shù)。
* 撤銷(UNDO)
--------------------
如果你對(duì)文本作了一些改動(dòng),然后又發(fā)現(xiàn)這樣做是錯(cuò)誤的,你能用撤銷命令,C-x u 撤銷這些改變。
通常,一次C-x u撤銷一個(gè)改變;如果你在一行上重復(fù)幾次C-x u,就會(huì)重復(fù)幾次撤銷操作。
但有兩個(gè)例外:不改變文本的操作(包括光標(biāo)移動(dòng)和滾屏命令)不算在內(nèi);只能處理20 次。
>> 用C-k除去這一行,然后按C-x u 它將重現(xiàn)出來(lái)。
C-_是一個(gè)可選擇的撤銷命令;它所作的工作和C-x u 完全一樣,只是更容易輸入。 C-_的缺點(diǎn)是有些鍵盤上沒(méi)有它,這就是為什么還提供C-x u的原因。在某些終端上你可以按住CTRL的時(shí)候再敲/來(lái)輸入C-_。C-_或C-x u把數(shù)參數(shù)字當(dāng)作重復(fù)次數(shù)。
* 文件(FILES)
-------------------
為了永久保存你編輯的文本,你必須把它放到一個(gè)文件里。否則當(dāng)你退出Emacs的時(shí)候它就會(huì)消失。你通過(guò)“查找(finding)”文件,把你編輯的內(nèi)容放到文件里。(也稱為 “訪問(wèn)(visiting)文件”)。
(譯注:為了保持與原文的一致性,把find譯為“查找”,但是這里和后面出現(xiàn)的 “查找文件”指的都是打開文件的意思。)
查找(finding)一個(gè)文件意味著你在Emacs里看文件的內(nèi)容,在多數(shù)情況下,也就是你在編輯它。但是,你用Emacs對(duì)它作的改變并不是永久行 的,除非你“保存(saving)” 它。所以你可以避免把一個(gè)改了一半的文件留在系統(tǒng)上。甚至你保存了文件,Emacs也會(huì)把原始文件換個(gè)名字保留下來(lái),以防過(guò)后你發(fā)現(xiàn)對(duì)文件的改動(dòng)是錯(cuò)誤 的。
如果你觀察屏幕的你將看見一個(gè)開始和結(jié)尾都是破折號(hào)的行,并且以“--:**-- TUTORIAL”或之類的東西開始。屏幕的這部分通常顯示你正在訪問(wèn)的文件的名字。現(xiàn)在,一個(gè)叫做“TUTORAL”的文件,它是你的Emacs教程的 個(gè)人拷貝。當(dāng)你用Emacs 查找一個(gè)文件,文件名會(huì)出現(xiàn)在同樣的位置。
查找和保存文件命令不像前面學(xué)的那些命令。它們都以字符Control-x開始。以 Control-x起頭的是一個(gè)完整的命令系列;它們中的許多都是對(duì)文件,緩沖,和相關(guān)的東西進(jìn)行操作的。這些命令有兩個(gè),三個(gè)或四個(gè)字符長(zhǎng)。
關(guān)于查找文件命令的另一件事是你必須給出你需要的文件的文件名。我們說(shuō)這個(gè)命令 “從終端讀取一個(gè)參數(shù)”。(在這種情況下,參數(shù)是文件的名字);當(dāng)你鍵入命令C-x C-f后,Emacs會(huì)提示你輸入文件的名字。你輸入的文件名會(huì)出現(xiàn)在屏幕底部的行上。這個(gè)底部的行稱為微型緩沖(minibuffer)用于這類較短的 輸入。你能用Emacs本身的編輯命令來(lái)編輯文件名。
當(dāng)你正在輸入文件名(或其他任何微型緩沖區(qū)輸入),你能用命令C-g來(lái)取消。
>> 鍵入命令C-x C-f,然后輸入C-g。這將取消微型緩沖,也取消了C-x C-f命令所使 用的微型緩沖,所以你不查找任何文件。
當(dāng)你輸完文件名后用 來(lái)結(jié)束。然后C-x C-f開始工作,并開始尋找你所選擇的文件。當(dāng)C-x C-f命令結(jié)束后微型緩沖區(qū)也消失了。
過(guò)一小會(huì)兒文件的內(nèi)容就會(huì)顯示在屏幕上,然后你就能對(duì)它進(jìn)行編輯了。當(dāng)想永久保留你的改動(dòng)時(shí)用命令:
C-x C-s 保存文件(save the file)。
這個(gè)操作會(huì)把Emacs里的文本拷貝到文件里。在你第一次作的時(shí)候,Emacs把原始文 件改為一個(gè)新名字以使它不至于丟失。新名字是在原來(lái)名字的后面加一個(gè)“~”。
保存結(jié)束后,Emacs打印出被寫的文件的文件名。你應(yīng)當(dāng)經(jīng)常的保存,萬(wàn)一系統(tǒng)崩潰 的話你不至于丟失太多的工作。
>> 鍵入C-x C-s來(lái)保存你的教程的拷貝。屏幕的底部會(huì)打印出“Wrote.....TUTORIAL”。
注意:在某些系統(tǒng)上,輸入C-x C-s 會(huì)把屏幕凍結(jié)住使你從Emacs看不到更多的輸出。這 表示這個(gè)操作系統(tǒng)的“特性”叫做“控制流程”,它攔截了C-x不讓它到達(dá)Emacs那里。 要使屏幕解凍,輸入C-q,然后看Emacs手冊(cè)里的“Spontaneous Entry to Incremental Search”一節(jié),按上面的建議來(lái)對(duì)付這種“特性”。
你能查找一個(gè)已存在的文件,來(lái)查看它或編輯它。你也可以查找一個(gè)尚未存在的文件。這是 Emacs:里創(chuàng)建文件的方法:查找文件,將會(huì)出現(xiàn)一個(gè)空白,然后插入文件的文本。當(dāng)你 “保存(saving)”的時(shí)候,Emacs將會(huì)用你插入的文本創(chuàng)建文件。從那時(shí)候起,你可以認(rèn)為你在編輯一個(gè)存在的文件了。
* (緩沖)BUFFERS
--------------------------
如果你用C-x C-f查找第二個(gè)文件,第一個(gè)文件仍然留在Emacs里。你可以再用C-x C-f查找一次來(lái)切換回去。用這種方法你在Emacs里有很多文件。
>> 輸入C-x C-f foo 來(lái)建立一個(gè)名為foo的文件。然后插入一些文本,編輯它,并 用C-x C-s來(lái)保存“foo”。 最后輸入C-x C-f TUTORIAL 以回到本教程。
Emacs把每個(gè)文件的文本都保存在一個(gè)叫“緩沖(buffer)”的東西里。查找(打開)一個(gè)文件就會(huì)在Emacs里產(chǎn)生一個(gè)新的緩沖。要看你當(dāng)前運(yùn)行的Emacs里存在的緩沖列表,輸入:
C-x C-b 列出緩沖(list buffers)
>> 輸入 C-x C-b
觀察每個(gè)緩沖都有一個(gè)名字,它可能也有一個(gè)它所保存的文件的文件名。一些緩沖不對(duì)應(yīng)文件。比如,叫“*Buffers List*”的緩沖沒(méi)有任何文件。這個(gè)緩沖只包含由C-x C-b產(chǎn)生的緩沖列表。你在Emacs窗口里看到的任何文本都是某個(gè)緩沖的一部分。
>> 輸入 C-x 1 消除緩沖列表。
如果你對(duì)一個(gè)文件的文本作了改動(dòng),然后查找另一個(gè)文件,第一個(gè)文件并不保存。它的改變保存在Emacs里,在那個(gè)文件的緩沖里。被建立或編輯的第二個(gè)文件 的緩沖并不影響第一個(gè)的。這一點(diǎn)很有用,但這也意味著要有一個(gè)便捷的方法來(lái)保存第一個(gè)文件的緩沖。如果要用 C-x C-f切換回去只是為了按C-x C-s保存它將會(huì)是一件令人討厭的事。所以我們用
C-x s 保存緩沖(save the buffer)
C-x s 向你詢問(wèn)每個(gè)改動(dòng)過(guò)但未存盤的緩沖,對(duì)每個(gè)這樣的緩沖都詢問(wèn)是否保存。
>> 插入一行文本,然后按C-x s。 將會(huì)問(wèn)你是否保存叫TUTORIAL的緩沖。 輸入“y”來(lái)回答是。
* 擴(kuò)展命令集(EXTENDING THE COMMAND SET)
-----------------------------------------------------------------------
有太多的Emacs命令,大大超過(guò)了Contorl和meta加上字符所能表示的數(shù)量。Emacs用X(擴(kuò)展 eXtand)命令來(lái)解決這個(gè)問(wèn)題。有兩種風(fēng)格:
C-x 字符擴(kuò)展,后跟一個(gè)字符。
M-x 名字命令擴(kuò)展,后跟一個(gè)長(zhǎng)名字。
這些命令通常有用,但不如你已經(jīng)學(xué)過(guò)的那些命令使用的頻繁。你已經(jīng)見過(guò)了它們中的兩個(gè):文件命令C-x C-f 用于查找和C-x C-s用于保存。
另一個(gè)例子是結(jié)束Emacs的命令C-x C-c(不必?fù)?dān)心你所作的改動(dòng)會(huì)丟失,在退出Emacs 之前,C-x C-c會(huì)提示你保存每一個(gè)改動(dòng)過(guò)的文件)。
C-z命令用于*臨時(shí)*退出Emacs,所以你能回到原來(lái)運(yùn)行的Emacs里。在允許這樣做的系統(tǒng)上,C-z把Emacs“掛起”;就是說(shuō)回到外殼(shell)下,但并不破壞運(yùn)行的Emacs。在大多數(shù)外殼上,你能用‘fg'命令或‘%emacs'來(lái)繼續(xù)Emacs。
在不支持掛起的系統(tǒng)上,C-z建立一個(gè)子外殼(subshell)運(yùn)行于Emacs下以使你能運(yùn)行其他程序然后回到Emacs;這并不是真正的“退出” Emacs。在這種情況下,通常從子外殼回到Emacs的外殼命令是‘exit'。 有很多C-x 命令,這是已學(xué)過(guò)的一個(gè)列表:
C-x C-f 查找文件
C-x C-s 保存文件
C-x C-b 緩沖列表
C-x C-c 退出Emacs
C-x u 撤銷操作
被稱作擴(kuò)展命令的命令的使用頻率都不太高。或者是只在某些模式下使用。一個(gè)例子是替換字符串的命令,它在全文里把字符串替換為其他的。當(dāng)你鍵入M-x, Emacs會(huì)在屏幕的底部提示你輸入命令;在這種情況下,是“replace-string”。比如輸入“repl s ”, Emacs會(huì)把命令補(bǔ)全。用 來(lái)結(jié)束命令。
替換字符串命令要求兩個(gè)參數(shù)--要被替換的字符串和用來(lái)替換的字符串。你必須用 來(lái)結(jié)束兩個(gè)參數(shù)。
>> 把光標(biāo)移上兩行,然后輸入M-x repl s changed altered 。 注意現(xiàn)在這一行改變了:你把光標(biāo)初始位置后的所有單詞c-h-a-n-g-e-d替換為了 “altered”
* 自動(dòng)保存(AUTO SAVE)
------------------------------------
當(dāng)你改動(dòng)了一個(gè)文件還未存盤的話,所作的改動(dòng)也許會(huì)由于系統(tǒng)崩潰而丟失。為防止這種情況發(fā)生,Emacs在編輯時(shí)為每個(gè)文件提供了“自動(dòng)保存(auto save)”。自動(dòng)保存的文件的文件名前后都有一個(gè)#號(hào);例如,如果你編輯的文件名叫“hello.c”,自動(dòng)保存的文件的文件名就叫 “#hello.c#”。當(dāng)你正常的保存了文件后,Emacs會(huì)刪除這個(gè)自動(dòng)保存的文件。如果遇到死機(jī),你能打開那個(gè)文件后按M-x recover file 來(lái)恢復(fù)你的編輯,(是你編輯的文件而不是自動(dòng)保存的文件)。當(dāng)提示確認(rèn)時(shí),輸入yes 來(lái)繼續(xù)恢復(fù)自動(dòng)保存的數(shù)據(jù)。
* 回顯區(qū)域(ECHO AREA)
------------------------------------
如果Emacs發(fā)現(xiàn)你輸入命令的速度很慢的話它會(huì)在屏幕底部為你顯示出來(lái),這個(gè)區(qū)域叫 “回顯區(qū)域”。
* 模式行(MODE LINE)
---------------------------------
回顯區(qū)域上面的一行稱為“模式行(mode line)”。模式行顯示與下面類似的東西:
--**-Emacs: TUTORIAL (Fundamental)--L670--58%----------------
這一行給出了有關(guān)你在編輯的文件和Emacs狀態(tài)的有用信息。
你已經(jīng)知道了文件名意味著什么。--NN%--指出你現(xiàn)在在文本里的位置;它意味著上面還有NN%的文本。如果是在文件的開頭,會(huì)用--Top-- 來(lái)代替--0%--。如果是在行的末尾,會(huì)顯示--Bot--。如果你正在看的文本內(nèi)容很少,可以全部顯示在屏幕上,模式行會(huì)說(shuō) --All--。
前面的星號(hào)表示你已經(jīng)改動(dòng)過(guò)文本了。一旦你保存了文件或打開了一個(gè)新文件,模式行的這部分就不是星號(hào)而是破折號(hào)了。
模式行上括號(hào)里的部分是現(xiàn)在的編輯模式。現(xiàn)在是缺省的基本(Fundamental)模式。它是 “主模式(major mode)”的一種。
Emacs有很多不同的主模式。有些意味著不同的語(yǔ)言或不同的文本。如Lisp模式(Lisp mode),文本模式(text mode)等等。在任何時(shí)候有且只能有一種主模式被激活。并且它的名字會(huì)出現(xiàn)在現(xiàn)在顯示“Fundamental”的位置上。
每一個(gè)主模式都有些自己的命令。就象不同的編程語(yǔ)言的注釋看起來(lái)不同一樣。每種主模式插入的注釋也不同。可以用擴(kuò)展命令切換進(jìn)某種主模式。例如,M-x fundamental-mode 是切換進(jìn)基本模式。
>> 輸入 M-x text-mode
不必?fù)?dān)心,沒(méi)有命令會(huì)給Emacs帶來(lái)很大改變。但是你可以看到現(xiàn)在M-f和M-b把省略號(hào)當(dāng)作單詞的一部分。而先前,在基本模式里,M-f 和M-b把省略號(hào)當(dāng)成當(dāng)成分隔符。
主模式通常作諸如此類微小的變化:大多數(shù)命令在每個(gè)主模式里作“同樣的工作”,但又有些微小的不同。
要觀看關(guān)于你現(xiàn)在的主模式的文檔,按C-h m。
>> 鍵入C-u C-v一次和多次使本行接近屏幕的頂端。
>> 輸入C-h m ,看看文本模式和基本模式有些什么不同。
>> 按C-x 1 從屏幕上關(guān)掉這個(gè)文檔。
主模式之所以叫做主模式是因?yàn)橐泊嬖趶哪J剑瑥哪J脚c主模式完全不同。每個(gè)從模式可以自己打開或者關(guān)閉,獨(dú)立于所有其他從模式,也獨(dú)立于你的主模式。所以你可以不用從模式或者同時(shí)用很多種從模式。
有一種從模式很有用,特別是在編輯英文文本時(shí)。它是自動(dòng)填充模式(auto fill mode)。當(dāng)這個(gè)模式打開的時(shí)候,當(dāng)輸入的文本過(guò)寬的時(shí)候就會(huì)自動(dòng)折行。
你能用M-x auto-fill-mode 來(lái)打開自動(dòng)填充模式。如果此模式已經(jīng)打開M-x auto- fill-mode 則把它關(guān)閉。我們把這叫做切換開關(guān)。
>> 輸入M-x auto-fill-mode 。然后插入一些“asdf”直到看到這行被分為兩行。你必須在中間放一些空格,只有到空格的時(shí)候才會(huì)換行。
通常邊界寬度是70,但你能用帶數(shù)字參數(shù)的C-x f 命令來(lái)改變它。
>> 鍵入帶參數(shù)20的C-x。(C-u 20 C-x f) 然后輸入一些文本看現(xiàn)在每行只有20個(gè)字符了。然后用C-x f把它改回70。
如果你在一個(gè)段落的中間產(chǎn)生了改變,自動(dòng)填充模式將不會(huì)重新填充。要想重新填充段落,當(dāng)光標(biāo)在段落里的時(shí)候按M-q。
>> 把光標(biāo)移到上一段按 M-q。
* 搜索(SEARCHING)
-----------------------------
Emacs 能朝前和朝后搜索字符串(指相鄰的一些字符或單詞)。搜索是一個(gè)移動(dòng)光標(biāo)的操作,它把光標(biāo)移動(dòng)到字符串出現(xiàn)的下一個(gè)地方。
Emacs 的搜索命令和其他大多數(shù)編輯器不同,它是“增量式(incremental)”的,這意味著搜索在你鍵入字符串時(shí)就開始了。
開始一個(gè)向前搜索的命令是C-s,C-r是往回搜索。但等等,先別忙。
當(dāng)你輸入C-s是你將注意到在回顯區(qū)域會(huì)出現(xiàn)一個(gè)字符串“I-search”。這告訴你Emacs開始了一個(gè)增量搜索,并在等待你輸入要搜索的東西。 結(jié)束查詢。
>> 現(xiàn)在鍵入C-s開始一個(gè)搜索。慢慢的輸入單詞‘cousor',在輸入每一個(gè)字母的時(shí)候停頓一 下,注意看光標(biāo)發(fā)生了什么。
>> 再輸入一次C-s,來(lái)搜索“cursor”出現(xiàn)的下一個(gè)地方。
>> 現(xiàn)在輸入 四次看看光標(biāo)移到了哪里。
>> 輸入 結(jié)束搜索。
看到發(fā)生什么了嗎?在Emacs的增量搜索里,你輸入多少字符串它就試著搜索這些字符出現(xiàn)的地方。到字符串出現(xiàn)的下一個(gè)地方,只須再按一次C-s。要搜索 的字符串不存在的話,Emacs 會(huì)發(fā)出蜂鳴并告訴你當(dāng)前的搜索“失敗(failing)”,按 C-g 也是終止搜索。
注意:在某些系統(tǒng)上,輸入 C-s 會(huì)把屏幕凍結(jié)住使你從Emacs看不到更多的輸出。這 表示這個(gè)操作系統(tǒng)的“特性”叫做“控制流程”,它攔截了C-s不讓它到達(dá)Emacs那里。 要使屏幕解凍,輸入C-q,然后看Emacs手冊(cè)里的“Spontaneous Entry to Incremental Search”一節(jié),按上面的建議來(lái)對(duì)付這種“特性”。
如果你在搜索的過(guò)程里按了 ,你將注意到要搜索的字符串的最后一個(gè)字符會(huì)被刪除并且光標(biāo)會(huì)回到上一個(gè)被搜索到的地方。比如,假設(shè)你鍵入了“c”,將會(huì)搜索“c”第一次出現(xiàn)的地方。然 后如果你鍵入“u”,光標(biāo)將移到“ cu”第一次出現(xiàn)的地方。現(xiàn)在鍵入 。這將從搜索的字符串里把“u”刪掉,這時(shí)光標(biāo)回到“c”第一次出現(xiàn)的地方。
如果你在搜索時(shí)按了Control或meta鍵加字符(少數(shù)幾個(gè)少數(shù)命令例外,如C-s和C-r),搜索將被終止。
C-s向當(dāng)前光標(biāo)的后面搜索字符串出現(xiàn)的地方。如果你需要搜索前面文本里的東西,用C-r來(lái)代替。我們所介紹的C-s的每個(gè)特性C-r也支持,除了方向相反。
* 多窗口(MULTIPLE WINDOWS)
------------------------------------------------
Emacs有一個(gè)非常好的特性是能同時(shí)在屏幕上顯示不止一個(gè)的窗口。
>> 把光標(biāo)移到本行上按C-u 0 C-l。
>> 現(xiàn)在按C-x 2,它把屏幕分裂成兩個(gè)窗口,每個(gè)窗口都顯示本教程。光標(biāo)在上面的窗口里。
>> 按C-M-v 滾動(dòng)到下面的窗口里。(如果你沒(méi)有一個(gè)真正的Meta鍵,那么按ESC C-v)
>> 按 C-x o (“o” 指 “其他(other)”) 把光標(biāo)移到到下面的窗口里。
>> 用 C-v 和 M-v 滾動(dòng)下面窗口里的文本。 在上面的窗口里看本教程。
>> 再次按 C-x o 使光標(biāo)回到上面的窗口里。 現(xiàn)在光標(biāo)象以前一樣在上面的窗口里了。
你能一直用C-x o在窗口間切換。每個(gè)窗口都有它自己的光標(biāo)位置,但僅有一個(gè)窗口能顯示活動(dòng)的光標(biāo)。所有的編輯命令都發(fā)生在那個(gè)顯示光標(biāo)的窗口上。我們把這個(gè)窗口叫做“選中窗口( selected window)”。
當(dāng)你在一個(gè)窗口里編輯文本,而用另一個(gè)窗口作參考時(shí)命令C-M-v非常有用。你總是能把光標(biāo)留在所編輯的地方,而用C-M-v來(lái)翻閱另一窗口。
C-M-v 是 CONTROL-META 加字符的一個(gè)例子。 如果你有一個(gè)真正的META 鍵,你能同時(shí)按住 CTRL 和 META 再按“v”來(lái)輸入C-M-v。CTRL 和 META 誰(shuí)先按誰(shuí)后按無(wú)所謂。
如果你沒(méi)有一個(gè)真正的META 鍵, 你可以用 ESC 來(lái)代替。這時(shí)候次序是有關(guān)系的: 你必須讓 ESC 跟在 CTRL-v后面; 否則 CTRL-ESC v 將不工作。 這是因?yàn)?ESC 是一個(gè)有意義的字符而不是一個(gè)修飾字符。
>> 輸入 C-x 1 (在上面的窗口里) 以消除下面的窗口。
(如果你在下面的窗口里鍵入C-x 1,將會(huì)把上面的窗口去掉。可以把這個(gè)命令看作是“只保留你現(xiàn)在在的那個(gè)窗口。)
你不必一定要在兩個(gè)窗口里顯示同樣的緩沖。如果你在一個(gè)窗口里鍵入C-x C-f查找文件,另一個(gè)窗口的內(nèi)容不會(huì)改變。你能獨(dú)立的在每個(gè)窗口里查找文件。
這是讓兩個(gè)窗口顯示不同內(nèi)容的另一種方法:
>> 在你輸入的文件名后再輸入C-x 4 C-f,然后用 結(jié)束。會(huì)看到指定的文件出現(xiàn)在下面 的窗口里。光標(biāo)也在那里面。
>> 鍵入C-x o 回到上面的窗口,然后輸入C-x 1刪掉下面的窗口。
* 遞歸編輯層(RECURSIVE EDITING LEVELS)
----------------------------------------------------------------
有時(shí)候你會(huì)進(jìn)入“遞歸編輯層(recursive editing level)”。由模式行上的方括號(hào)指示。它在主模式名的括號(hào)外面。例如你也許會(huì)看到(Fundamental)變成了[(Fundamental)]。
要退出遞歸編輯層,按ESC ESC ESC。這是一個(gè)通用的退出命令,你也可以用它除去額外的窗口,或者退出微型緩沖。
>> 輸入 M-x 進(jìn)入一個(gè)微型緩沖; 然后用 ESC ESC ESC 離開。
你不能用C-g來(lái)退出遞歸編輯層。這是因?yàn)镃-g只能取消在遞歸編輯層里面的命令。
* 獲取更多的幫助(GETTING MORE HELP)
--------------------------------------------------------------
在本教程里我們?cè)囍鵀槟汩_始使用Emacs提供了足夠多的信息。但是有關(guān)Emacs的信息實(shí)在是太多以至于不能全部都在這里說(shuō)明。但是,你還應(yīng)該學(xué)習(xí)更多 有關(guān)Emacs的東西,因?yàn)樗硗膺€有很多有用的特性。Emacs提供了很多讀取有關(guān)命令的文檔的命令。這些“幫助”命令都以 Control-h開頭,叫做“幫助字符”。
為了使用幫助特性,輸入字符C-h,然后再輸入一個(gè)字符來(lái)說(shuō)明你需要哪種幫助。如果你真的不知道,輸入C-h ? 然后 Emacs會(huì)告訴你它能給你什么樣的幫助。如果你輸入了C-h 又覺得不需要任何幫助,你可以用C-g來(lái)取消它。
(在有的地方,C-h的作用被改變了。如果按C-h在屏幕的底部沒(méi)有出現(xiàn)有關(guān)幫助的信息的話,試試用F1和M-x help RET來(lái)代替。)
最基本的幫助特性是C-h c。輸入C-h,然后是字符 c,然后輸入一個(gè)命令字符和序列;然后 Emacs 會(huì)顯示這個(gè)命令的簡(jiǎn)潔的描述。
>> 輸入 C-h c Control-p.
顯示的消息看起來(lái)會(huì)象這樣:
C-p runs the command previous-line
這告訴你“功能的名字”。功能的名字主要用于對(duì)Emacs的功能擴(kuò)充和定制。但因?yàn)楣δ艿拿种赋隽嗣畹挠猛荆宰詈貌灰膭?dòng)它。
C-h c后面可跟多字符命令,比如 C-x C-s 和 (如果你沒(méi)有 META 或者 EDIT 或者 ALT 鍵) v 。
要獲取有關(guān)命令的更多信息,用C-h k 代替 C-h c。
>> 輸入 C-h k Control-p.
這將在一個(gè)Emacs窗口里顯示命令的文檔。當(dāng)你讀完后可以用C-x 1除去幫助文本。如果不想馬上離開,你可以一邊編輯一邊參考幫助文本,然后再按C-x 1。
這是一些有用的 C-h 選項(xiàng):
C-h f 描述一個(gè)功能,在你輸入了這個(gè)功能的名字后。
>> 輸入 C-h f previous-line 。 將打印出C-p命令所實(shí)現(xiàn)的所有功能。
C-h a 命令查找。輸入一個(gè)關(guān)鍵字,Emacs將列出所有名字里有這個(gè)關(guān)鍵字的命令。 包括所有以Meta-x開始的命令。對(duì)有些命令,C-h a 也將列出實(shí)現(xiàn)同一功能的 幾個(gè)命令序列。
>> 輸入 C-h a file .
這將在窗口里顯示所有名字里有單詞“file”的M-x命令。
>> 輸入 C-M-v 來(lái)滾動(dòng)幫助窗口,做上幾次。
>> 輸入 C-x 1 來(lái)刪除幫助窗口。
* 總結(jié)(CONCLUSION)
--------------------------------
記住,永遠(yuǎn)都用C-x C-c來(lái)退出Emacs。用C-z來(lái)退到一個(gè)臨時(shí)的外殼里,以使你過(guò)后還能回到 Emacs。
本教程盡量讓所有的初學(xué)者都能理解,如果你發(fā)現(xiàn)有些東西不清楚的話,別責(zé)備你自己-抱怨吧!
posted @ 2007-06-29 09:07 笨蛋啊帆 閱讀(918) | 評(píng)論 (0) | 編輯 收藏
理解finalize()-析構(gòu)函數(shù)的替代者
by Tim Gooch
在許多方面,Java 類似于 C++。Java 的語(yǔ)法非常類似于 C++,Java 有類、方法和數(shù)據(jù)成員;Java 的類有構(gòu)造函數(shù); Java 有異常處理。
但是,如果你使用過(guò) C++ 會(huì)發(fā)現(xiàn) Java 也丟掉一些可能是你熟悉的特性。這些特性之一就是析構(gòu)函數(shù)。取代使用析構(gòu)函數(shù),Java 支持finalize() 方法。
在本文中,我們將描述 finalize() 與 C++ 析構(gòu)函數(shù)的區(qū)別。另外,我們將創(chuàng)建一個(gè)簡(jiǎn)單的 Applet 來(lái)演示 finalize() 是如何工作的。
最終的界限
與 Java 不同,C++ 支持局部對(duì)象(基于棧)和全局對(duì)象(基于堆)。因?yàn)檫@一雙重支持,C++ 也提供了自動(dòng)構(gòu)造和析構(gòu),這導(dǎo)致了對(duì)構(gòu)造函數(shù)和析構(gòu)函數(shù)的調(diào)用,(對(duì)于堆對(duì)象)就是內(nèi)存的分配和釋放。
在 Java 中,所有對(duì)象都駐留在堆內(nèi)存,因此局部對(duì)象就不存在。結(jié)果,Java 的設(shè)計(jì)者覺得不需要析構(gòu)函數(shù)(象 C++ 中所實(shí)現(xiàn)的)。
取而代之,Java 定義了一個(gè)特殊的方法叫做finalize() ,它提供了 C++ 析構(gòu)函數(shù)的一些功能。但是,finalize() 并不完全與 C++ 的析構(gòu)函數(shù)一樣,并可以假設(shè)它會(huì)導(dǎo)致一系列的問(wèn)題。finalize() 方法作用的一個(gè)關(guān)鍵元素是 Java 的垃圾回收器。
垃圾回收器
在 C/C++、Pascal和其他幾種多種用途的編程語(yǔ)言中,開發(fā)者有責(zé)任在內(nèi)存管理上發(fā)揮積極的作用。例如,如果你為一個(gè)對(duì)象或數(shù)據(jù)結(jié)構(gòu)分配了內(nèi)存,那么當(dāng)你不再使用它時(shí)必須釋放掉該內(nèi)存。
在 Java 中,當(dāng)你創(chuàng)建一個(gè)對(duì)象時(shí),Java 虛擬機(jī)(JVM)為該對(duì)象分配內(nèi)存、調(diào)用構(gòu)造函數(shù)并開始跟蹤你使用的對(duì)象。當(dāng)你停止使用一個(gè)對(duì)象(就是說(shuō),當(dāng)沒(méi)有對(duì)該對(duì)象有效的引用時(shí)),JVM 通過(guò)垃圾回收器將該對(duì)象標(biāo)記為釋放狀態(tài)。
當(dāng)垃圾回收器將要釋放一個(gè)對(duì)象的內(nèi)存時(shí),它調(diào)用該對(duì)象的finalize() 方法(如果該對(duì)象定義了此方法)。垃圾回收器以獨(dú)立的低優(yōu)先級(jí)的方式運(yùn)行,只有當(dāng)其他線程掛起等待該內(nèi)存釋放的情況出現(xiàn)時(shí),它才開始運(yùn)行釋放對(duì)象的內(nèi)存。(事實(shí)上,你可以調(diào)用System.gc() 方法強(qiáng)制垃圾回收器來(lái)釋放這些對(duì)象的內(nèi)存。)
在以上的描述中,有一些重要的事情需要注意。首先,只有當(dāng)垃圾回收器釋放該對(duì)象的內(nèi)存時(shí),才會(huì)執(zhí)行finalize()。如果在 Applet 或應(yīng)用程序退出之前垃圾回收器沒(méi)有釋放內(nèi)存,垃圾回收器將不會(huì)調(diào)用finalize()。
其次,除非垃圾回收器認(rèn)為你的 Applet 或應(yīng)用程序需要額外的內(nèi)存,否則它不會(huì)試圖釋放不再使用的對(duì)象的內(nèi)存。換句話說(shuō),這是完全可能的:一個(gè) Applet 給少量的對(duì)象分配內(nèi)存,沒(méi)有造成嚴(yán)重的內(nèi)存需求,于是垃圾回收器沒(méi)有釋放這些對(duì)象的內(nèi)存就退出了。
顯然,如果你為某個(gè)對(duì)象定義了finalize() 方法,JVM 可能不會(huì)調(diào)用它,因?yàn)槔厥掌鞑辉尫胚^(guò)那些對(duì)象的內(nèi)存。調(diào)用System.gc() 也不會(huì)起作用,因?yàn)樗鼉H僅是給 JVM 一個(gè)建議而不是命令。
finalize() 有什么優(yōu)點(diǎn)呢?
如果finalize() 不是析構(gòu)函數(shù),JVM 不一定會(huì)調(diào)用它,你可能會(huì)疑惑它是否在任何情況下都有好處。事實(shí)上,在 Java 1.0 中它并沒(méi)有太多的優(yōu)點(diǎn)。
根據(jù) Java 文檔,finalize() 是一個(gè)用于釋放非 Java 資源的方法。但是,JVM 有很大的可能不調(diào)用對(duì)象的finalize() 方法,因此很難證明使用該方法釋放資源是有效的。
Java 1.1 通過(guò)提供一個(gè)System.runFinalizersOnExit() 方法部分地解決了這個(gè)問(wèn)題。(不要將這個(gè)方法與 Java 1.0 中的System.runFinalizations() 方法相混淆。)不象System.gc() 方法那樣,System.runFinalizersOnExit() 方法并不立即試圖啟動(dòng)垃圾回收器。而是當(dāng)應(yīng)用程序或 Applet 退出時(shí),它調(diào)用每個(gè)對(duì)象的finalize() 方法。
正如你可能猜測(cè)的那樣,通過(guò)調(diào)用System.runFinalizersOnExit() 方法強(qiáng)制垃圾回收器清除所有獨(dú)立對(duì)象的內(nèi)存,當(dāng)清除代碼執(zhí)行時(shí)可能會(huì)引起明顯的延遲。現(xiàn)在建立一個(gè)示例 Applet 來(lái)演示 Java 垃圾回收器和finalize() 方法是如何相互作用的。
回收垃圾
通過(guò)使用Java Applet Wizard 創(chuàng)建一個(gè)新的 Applet 開始。當(dāng)提示這樣做時(shí),輸入 final_things 作為 Applet 名,并選擇不要生成源文件注釋。
接下來(lái),在Java Applet Wizard 進(jìn)行第三步,不要選擇多線程選項(xiàng)。在第五步之前,根據(jù)需要修改 Applet 的描述。
當(dāng)你單擊Finish 后,Applet Wizard 將生成一個(gè)新的工作空間,并為該項(xiàng)目創(chuàng)建缺省的 Java 文件。從列表 A 中選擇適當(dāng)?shù)拇a輸入(我們已經(jīng)突出顯示了你需要輸入的代碼)。
當(dāng)你完成代碼的輸入后,配置Internet 瀏覽器將System.out 的輸出信息寫到Javalog.txt 文件中。(在IE 選項(xiàng)對(duì)話框的高級(jí)頁(yè)面中選擇起用 Java Logging。)
編譯并運(yùn)行該 Applet。然后,等待 Applet 運(yùn)行(你將在狀態(tài)欄中看到 Applet 已啟動(dòng)的信息),退出瀏覽器,并打開Javalog.txt 文件。你將會(huì)發(fā)現(xiàn)類似于下列行的信息:
1000 things constructed
0 things finalized
正如你能夠看到的那樣,建立了1,000個(gè)對(duì)象仍然沒(méi)有迫使垃圾回收器開始回收空間,即使在 Applet 退出時(shí)也沒(méi)有對(duì)象被使用。
現(xiàn)在,刪除在stop() 方法第一行中的注釋符以起用System.gc() 方法。再次編譯并運(yùn)行該 Applet ,等待 Applet 完成運(yùn)行,并退出瀏覽器。當(dāng)你再次打開Javalog.txt 文件,你將看到下列行:
1000 things constructed
963 things finalized
這次,垃圾回收器認(rèn)為大多數(shù)對(duì)象未被使用,并將它們回收。按順序,當(dāng)垃圾回收器開始釋放這些對(duì)象的內(nèi)存時(shí),JVM 調(diào)用它們的finalize() 方法。
繼承finalize()?
順便,如果你在類中定義了finalize() ,它將不會(huì)自動(dòng)調(diào)用基類中的方法。在我們討論了finalize() 與 C++ 的析構(gòu)函數(shù)的不同點(diǎn)后,對(duì)這個(gè)結(jié)論不會(huì)驚訝,因?yàn)闉槟硞€(gè)類定制的清除代碼另一個(gè)類不一定會(huì)需要。
如果你決定要通過(guò)派生一個(gè)類的finalize() 方法來(lái)調(diào)用基類中的finalize() 方法,你可以象其他繼承方法一樣處理。
protected void finalize()
{
super.finalize();
// other finalization code...
}
除了允許你控制是否執(zhí)行清除操作外,這個(gè)技術(shù)還使你可以控制當(dāng)前類的finalize() 方法何時(shí)執(zhí)行。
結(jié)論
然而有益的是,Java 的自動(dòng)垃圾回收器不會(huì)失去平衡。作為便利的代價(jià),你不得不放棄對(duì)系統(tǒng)資源釋放的控制。不象 C++ 中的析構(gòu)函數(shù),Java Applet 不會(huì)自動(dòng)執(zhí)行你的類中的finalize() 方法。事實(shí)上,如果你正在使用 Java 1.0,即使你試圖強(qiáng)制它調(diào)用finalize() 方法,也不能確保將調(diào)用它。
因此,你不應(yīng)當(dāng)依靠finalize() 來(lái)執(zhí)行你的 Applet 和應(yīng)用程序的資源清除工作。取而代之,你應(yīng)當(dāng)明確的清除那些資源或創(chuàng)建一個(gè)try...finally 塊(或類似的機(jī)制)來(lái)實(shí)現(xiàn)。
列表 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 笨蛋啊帆 閱讀(367) | 評(píng)論 (0) | 編輯 收藏