| 導購 | 订阅 | 在线投稿
分享
 
 
 

改良的Perl:程序員面向Linux的設置

2008-05-19 06:26:00  編輯來源:互聯網  简体版  手機版  評論  字體: ||
 
  作者:Teodor Zlatanov

  優化機器來滿足需要

  爲面向 Java 和 Perl 的編程環境定制了 tcsh、Enlightenment、Eterm 和 Emacs 後,Teodor 爲我們展示了他桌面的 Linux 配置。這是爲 Java 和 Perl 編程設置優化的,但毫無疑問,其他程序員也會在其中發現許多有用的竅門。

  幾年前,我就開始了在 Unix 中構建我的編程環境。這項工作至今仍未完成!我在這裏所介紹的是我所使用的環境的一個縮影,但請您理解,它並不完整,也不夠完美。您應該不斷地改進計算環境。做些修修補補的事很有趣,因爲可能會在過程中學到許多新知識。

  所有的過錯都是我犯的,但我仍要感激幾年來曾幫助過我的那些人。(人數衆多,以至我無法一一列出他們的名字。)如果沒有他們的幫助,無論是個人還是新聞組,我都無法寫出下面的文章。

  入門

  本文旨在面向中高級 Linux 用戶。應該安裝 Perl 5.6.0,或至少 5.005 才能完成某些示例。這裏將會提到 Emacs 編輯器,如果希望嘗試 Emacs 示例,需要安裝它。還會提到 Enlightenment 窗口管理器,它需要和 Eterm 終端仿真器一起安裝,但大多數最近的窗口管理器和終端仿真器都具有與 Enlightenment 和 Eterm 在本文環境中提供的類似的那些特性。

  您應該習慣于編輯文件,進行系統修改、從源碼安裝 Linux 軟件包,並願意使用 Linux。如果您不熟悉這些任務的話,在嘗試這裏描述的任何操作的時候要格外小心,並且注意將每樣事物進行備份。(在任何情況下這都不失爲一個好的做法。)

  tcsh 定制

  我使用 tcsh 作爲主要登錄 shell。很容易將示例轉換成由 bash、zsh 或其它 shell 使用。我使用 tcsh shell 好幾年了,但這並不意味著說對每個人都適合。

  tcsh shell 使用一些初始化 (rc) 文件。在 UNIX 中,rc(發音爲:"ar cee")文件是由程序在初始化時讀取的文件。rc 名字來自文件名的公共 "rc" 後綴(例如,"tcshrc" 用于 tcsh shell,"exrc" 用于標准 vi 編輯器)。rc 文件有時還稱作 "dot" 文件,因爲它們以一個點 (dot) 開頭,這樣可以在正常的目錄列表中隱藏起來。

  我所進行的 tcsh shell 定制位于 .cshrc、.login 和 .logout 文件中。其他人使用 .tcshrc 而不是 .cshrc,但除非您也使用 C (csh) shell(其實不應該使用它;tcsh 更好),否則沒什麽差異。

  .login 文件是爲登錄 shell 執行的第一個文件:

  清單 1:我的 .login 文件

  stty erase \^?

  echo TERM = $TERM

  switch ($HOST)

  case "workmachine":

  fetchmail

  breaksw

  case "homemachine":

  fortune

  echo "---"

  from | tail

  mesg y

  echo "---"

  breaksw

  default:

  breaksw

  endsw

  "stty erase" 那一行將擦除字符設置成刪除鍵。我比較喜歡這個設置,因爲我習慣于使用刪除鍵來向後擦除,但如果您覺得缺省值很適合您,就不必更改它。

  然後,echo 語句打印出當前的終端。我之所以這樣做是因爲可以知道是否支持 xterm 能力,但這不那麽重要。

  後面跟著 switch 語句。它在形式上與 C switch() 語句類似(畢竟 C [csh] shell 以及稍後的 tcsh shell 都沿襲了它)。根據不同的主機名,可以運行 fetchmail(我在我的工作機器上每個登錄 shell 中運行它,因爲多個 fetchmail 的副本相互之間不影響),或者在本地運行其它一些命令。

  本地機器的命令如下:print a fortune(試一下;非常有趣!);然後是除數 ("---");然後是郵箱中最後幾條消息;然後打開分頁面許可權;然後打印另一個除數。

  命令還有一種缺省情況,應該可以隨處運行。但未在我的環境中使用。

  在 .login 文件之後,tcsh shell 經過 .cshrc 文件(它更喜歡使用 tcshrc 文件,但如果只能使用 .cshrc 的話也只能將就了)。

  清單 2:我的 .cshrc 文件,第 1 部分:特定于 shell 的設置

  清單 2 中的代碼是特定于 shell 的,意味著它不直接與任何其它 shell 相接。一般來說,特定于 shell 的設置是使用 "set" 命令設置的,而環境設置是使用 "setenv" 設置的。路徑是個例外,因爲 tcsh shell 維護著 $PATH 和 $path 的同步,所以可以使用 set 或 setenv 來設置路徑。這是個人喜好的問題。

  set 和 setenv 的反操作是 unset 和 unsetenv。只有 set 或 setenv 才打印出 shell 和環境設置的列表。

  就我個人來看,我認爲環境和 shell 設置之間的差異是 tcsh 最糟糕的一個方面。我會使用其中一個,但不會同時使用它們。當前的設計強迫我同時使用它們。

  清單 3:我的 .cshrc 文件,第 2 部分:環境

  # another switch statement

  switch ($HOST)

  case "homemachine":

  # from home, I use my work machine's external network interface

  setenv CVSROOT tzz@workmachine-external:/cvsroot

  # of course, ssh is the only protocol allowed. rsh is insecure.

  setenv CVS_RSH ssh

  # my NNTP server at home

  setenv NNTPSERVER nntp

  # give Emacs a name, for Enlightenment positioning

  alias emacs emacs -name workmachine-emacs

  breaksw

  case "homemachine-2":

  # same as homemachine

  setenv CVSROOT tzz@workmachine-external:/cvsroot

  setenv CVS_RSH ssh

  # but this is a Solaris machine, so use mailx (I could have used

  # OSTYPE instead of $HOST for generality)

  alias mail mailx

  breaksw

  default:

  # default CVS root for all machine at work. Leave rsh as the

  # default transport.

  setenv CVSROOT tzz@workmachine:/cvsroot

  breaksw

  endsw

  清單 3 中的環境設置主要考慮是否正確設置了 CVS 資源庫根。如果使用 CVS,這是自動設置事物以使所有 CVS 命令可以從任何機器上使用的一種簡便方法。另外,我給主要 Emacs 窗口提供了一個名稱,這樣 Enlightenment 可以准確地找到它。

  我應該使用 $OSTYPE 而不是 $HOST,並設置單獨的 switch() 語句來處理 Solaris;但所有爲將 mail 取別名爲 mailx 的語句對我來說都似乎有些多余。

  清單 4:我的 .cshrc 文件,第 3 部分:別名

  要嘗試下面定義的別名,只需要在提示上輸入它們。"abc" 別名將自己在一行上打印 "foreach?" 並等待您的輸入。例如,如果輸入 "echo $a",然後在下一個提示上輸入 "end", "echo" 命令將在 $a 中運行 1 到 9,然後從 A 到 Z,然後從 a 到 z。

  最後,我的 .logout 非常簡單。它是在登錄 shell 退出時執行的一系列命令,但只在我的本地機器上。在所有其它機器上,它什麽都不做。

  清單 5:我的 .logout 文件

  switch ($HOST)

  case "homemachine":

  # save the list of subscribed newsgroups, just in case:

  # save only the first 2000 characters of each lines (the

  # .newsrc file can have very long lines), then filter out the

  # unsubscribed newsgroups, and save the output in ~/.subbed

  cut -c 1-2000 ~/.newsrc | egrep -v "!" ~/.subbed

  # remove any dead letter files (/bin/mail generates them)

  rm ~/dead.letter

  breaksw

  default:

  breaksw

  endsw

  Enlightenment 和 Eterm 定制

  我最常用的窗口管理器是 Enlightenment。我喜歡它所以使用它。您可能不喜歡 Enlightenment(以下稱爲 "E"),但不管怎樣,您的窗口管理器也可能支持 E 中我所喜歡的大多數特性。要複制 Eterm 的功能比較困難,盡管 aterm 程序在目的和效果上與之類似。

  E 和 Eterm 都使用主題。主題是給人看的,在實際當中不派什麽用場。我發現它們對于 Eterm 很有用,但對于 E,我不會將主題用于編程支持。

  我對 E 進行的最重要的一項修改就是更改了與 e16keyedit 程序的缺省鍵綁定。我將 Alt-F1 到 Alt-F12 映射成桌面 1 到 12,這樣可以快速地在不同任務之間切換。我給某些桌面取了別名,添加了按鍵 -- 例如,Alt-Shift-M 可以帶我到郵件桌面。

  另外,我還讓 Ctrl-Alt-M 啓動一個郵件窗口(實際上是 "emacs -name gnus -f gnus",因爲我使用 Gnus 來閱讀郵件)。以類似的方式,我讓 Alt-Shift-Letter 轉到特定桌面,而 Ctrl-Alt-Letter 啓動該桌面上的一個程序。

  E 可以記住程序的位置和命令行調用。這意味著如果程序具有獨特的名稱,E 可以在下次您登錄的時候重新啓動它,或者在下次您啓動它的時候記住它的位置。名稱是窗口的 X 名,通常用 -name 參數指定給程序。

  Eterm 使用主題來指定定制行爲。可以嘗試 Eterm 所帶的所有缺省主題(例如,"Eterm -t mutt" 用于面向 mutt 的終端,或

  
 
  作者:Teodor Zlatanov   優化機器來滿足需要   爲面向 Java 和 Perl 的編程環境定制了 tcsh、Enlightenment、Eterm 和 Emacs 後,Teodor 爲我們展示了他桌面的 Linux 配置。這是爲 Java 和 Perl 編程設置優化的,但毫無疑問,其他程序員也會在其中發現許多有用的竅門。   幾年前,我就開始了在 Unix 中構建我的編程環境。這項工作至今仍未完成!我在這裏所介紹的是我所使用的環境的一個縮影,但請您理解,它並不完整,也不夠完美。您應該不斷地改進計算環境。做些修修補補的事很有趣,因爲可能會在過程中學到許多新知識。   所有的過錯都是我犯的,但我仍要感激幾年來曾幫助過我的那些人。(人數衆多,以至我無法一一列出他們的名字。)如果沒有他們的幫助,無論是個人還是新聞組,我都無法寫出下面的文章。   入門   本文旨在面向中高級 Linux 用戶。應該安裝 Perl 5.6.0,或至少 5.005 才能完成某些示例。這裏將會提到 Emacs 編輯器,如果希望嘗試 Emacs 示例,需要安裝它。還會提到 Enlightenment 窗口管理器,它需要和 Eterm 終端仿真器一起安裝,但大多數最近的窗口管理器和終端仿真器都具有與 Enlightenment 和 Eterm 在本文環境中提供的類似的那些特性。   您應該習慣于編輯文件,進行系統修改、從源碼安裝 Linux 軟件包,並願意使用 Linux。如果您不熟悉這些任務的話,在嘗試這裏描述的任何操作的時候要格外小心,並且注意將每樣事物進行備份。(在任何情況下這都不失爲一個好的做法。)   tcsh 定制   我使用 tcsh 作爲主要登錄 shell。很容易將示例轉換成由 bash、zsh 或其它 shell 使用。我使用 tcsh shell 好幾年了,但這並不意味著說對每個人都適合。   tcsh shell 使用一些初始化 (rc) 文件。在 UNIX 中,rc(發音爲:"ar cee")文件是由程序在初始化時讀取的文件。rc 名字來自文件名的公共 "rc" 後綴(例如,"tcshrc" 用于 tcsh shell,"exrc" 用于標准 vi 編輯器)。rc 文件有時還稱作 "dot" 文件,因爲它們以一個點 (dot) 開頭,這樣可以在正常的目錄列表中隱藏起來。   我所進行的 tcsh shell 定制位于 .cshrc、.login 和 .logout 文件中。其他人使用 .tcshrc 而不是 .cshrc,但除非您也使用 C (csh) shell(其實不應該使用它;tcsh 更好),否則沒什麽差異。   .login 文件是爲登錄 shell 執行的第一個文件:   清單 1:我的 .login 文件   stty erase \^?   echo TERM = $TERM   switch ($HOST)   case "workmachine":   fetchmail   breaksw   case "homemachine":   fortune   echo "---"   from | tail   mesg y   echo "---"   breaksw   default:   breaksw   endsw   "stty erase" 那一行將擦除字符設置成刪除鍵。我比較喜歡這個設置,因爲我習慣于使用刪除鍵來向後擦除,但如果您覺得缺省值很適合您,就不必更改它。   然後,echo 語句打印出當前的終端。我之所以這樣做是因爲可以知道是否支持 xterm 能力,但這不那麽重要。   後面跟著 switch 語句。它在形式上與 C switch() 語句類似(畢竟 C [csh] shell 以及稍後的 tcsh shell 都沿襲了它)。根據不同的主機名,可以運行 fetchmail(我在我的工作機器上每個登錄 shell 中運行它,因爲多個 fetchmail 的副本相互之間不影響),或者在本地運行其它一些命令。   本地機器的命令如下:print a fortune(試一下;非常有趣!);然後是除數 ("---");然後是郵箱中最後幾條消息;然後打開分頁面許可權;然後打印另一個除數。   命令還有一種缺省情況,應該可以隨處運行。但未在我的環境中使用。   在 .login 文件之後,tcsh shell 經過 .cshrc 文件(它更喜歡使用 tcshrc 文件,但如果只能使用 .cshrc 的話也只能將就了)。   清單 2:我的 .cshrc 文件,第 1 部分:特定于 shell 的設置   清單 2 中的代碼是特定于 shell 的,意味著它不直接與任何其它 shell 相接。一般來說,特定于 shell 的設置是使用 "set" 命令設置的,而環境設置是使用 "setenv" 設置的。路徑是個例外,因爲 tcsh shell 維護著 $PATH 和 $path 的同步,所以可以使用 set 或 setenv 來設置路徑。這是個人喜好的問題。   set 和 setenv 的反操作是 unset 和 unsetenv。只有 set 或 setenv 才打印出 shell 和環境設置的列表。   就我個人來看,我認爲環境和 shell 設置之間的差異是 tcsh 最糟糕的一個方面。我會使用其中一個,但不會同時使用它們。當前的設計強迫我同時使用它們。   清單 3:我的 .cshrc 文件,第 2 部分:環境   # another switch statement   switch ($HOST)   case "homemachine":   # from home, I use my work machine's external network interface   setenv CVSROOT tzz@workmachine-external:/cvsroot   # of course, ssh is the only protocol allowed. rsh is insecure.   setenv CVS_RSH ssh   # my NNTP server at home   setenv NNTPSERVER nntp   # give Emacs a name, for Enlightenment positioning   alias emacs emacs -name workmachine-emacs   breaksw   case "homemachine-2":   # same as homemachine   setenv CVSROOT tzz@workmachine-external:/cvsroot   setenv CVS_RSH ssh   # but this is a Solaris machine, so use mailx (I could have used   # OSTYPE instead of $HOST for generality)   alias mail mailx   breaksw   default:   # default CVS root for all machine at work. Leave rsh as the   # default transport.   setenv CVSROOT tzz@workmachine:/cvsroot   breaksw   endsw   清單 3 中的環境設置主要考慮是否正確設置了 CVS 資源庫根。如果使用 CVS,這是自動設置事物以使所有 CVS 命令可以從任何機器上使用的一種簡便方法。另外,我給主要 Emacs 窗口提供了一個名稱,這樣 Enlightenment 可以准確地找到它。   我應該使用 $OSTYPE 而不是 $HOST,並設置單獨的 switch() 語句來處理 Solaris;但所有爲將 mail 取別名爲 mailx 的語句對我來說都似乎有些多余。   清單 4:我的 .cshrc 文件,第 3 部分:別名   要嘗試下面定義的別名,只需要在提示上輸入它們。"abc" 別名將自己在一行上打印 "foreach?" 並等待您的輸入。例如,如果輸入 "echo $a",然後在下一個提示上輸入 "end", "echo" 命令將在 $a 中運行 1 到 9,然後從 A 到 Z,然後從 a 到 z。   最後,我的 .logout 非常簡單。它是在登錄 shell 退出時執行的一系列命令,但只在我的本地機器上。在所有其它機器上,它什麽都不做。   清單 5:我的 .logout 文件   switch ($HOST)   case "homemachine":   # save the list of subscribed newsgroups, just in case:   # save only the first 2000 characters of each lines (the   # .newsrc file can have very long lines), then filter out the   # unsubscribed newsgroups, and save the output in ~/.subbed   cut -c 1-2000 ~/.newsrc | egrep -v "!" ~/.subbed   # remove any dead letter files (/bin/mail generates them)   rm ~/dead.letter   breaksw   default:   breaksw   endsw   Enlightenment 和 Eterm 定制   我最常用的窗口管理器是 Enlightenment。我喜歡它所以使用它。您可能不喜歡 Enlightenment(以下稱爲 "E"),但不管怎樣,您的窗口管理器也可能支持 E 中我所喜歡的大多數特性。要複制 Eterm 的功能比較困難,盡管 aterm 程序在目的和效果上與之類似。   E 和 Eterm 都使用主題。主題是給人看的,在實際當中不派什麽用場。我發現它們對于 Eterm 很有用,但對于 E,我不會將主題用于編程支持。   我對 E 進行的最重要的一項修改就是更改了與 e16keyedit 程序的缺省鍵綁定。我將 Alt-F1 到 Alt-F12 映射成桌面 1 到 12,這樣可以快速地在不同任務之間切換。我給某些桌面取了別名,添加了按鍵 -- 例如,Alt-Shift-M 可以帶我到郵件桌面。   另外,我還讓 Ctrl-Alt-M 啓動一個郵件窗口(實際上是 "emacs -name gnus -f gnus",因爲我使用 Gnus 來閱讀郵件)。以類似的方式,我讓 Alt-Shift-Letter 轉到特定桌面,而 Ctrl-Alt-Letter 啓動該桌面上的一個程序。   E 可以記住程序的位置和命令行調用。這意味著如果程序具有獨特的名稱,E 可以在下次您登錄的時候重新啓動它,或者在下次您啓動它的時候記住它的位置。名稱是窗口的 X 名,通常用 -name 參數指定給程序。   Eterm 使用主題來指定定制行爲。可以嘗試 Eterm 所帶的所有缺省主題(例如,"Eterm -t mutt" 用于面向 mutt 的終端,或   
󰈣󰈤
 
 
 
>>返回首頁<<
 
 
 
 
 熱帖排行
 
王朝網路微信公眾號
微信掃碼關註本站公眾號 wangchaonetcn
 
  免責聲明:本文僅代表作者個人觀點,與王朝網絡無關。王朝網絡登載此文出於傳遞更多信息之目的,並不意味著贊同其觀點或證實其描述,其原創性以及文中陳述文字和內容未經本站證實,對本文以及其中全部或者部分內容、文字的真實性、完整性、及時性本站不作任何保證或承諾,請讀者僅作參考,並請自行核實相關內容。
 
© 2005- 王朝網路 版權所有