日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Emacs, Vi, Lisp, Logo, 小众语言集中营

發(fā)布時間:2023/12/20 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Emacs, Vi, Lisp, Logo, 小众语言集中营 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

http://antkillerfarm.github.io/

emacs學習心得

emacs是大名鼎鼎的Richard Stallman的作品,我聞名已久。但作為早期一直在Windows操作系統(tǒng)下打拼的程序員,很少有機會用到emacs。用的最多的還是Notepad和UltraEdit。

后來,在STE工作期間,由于代碼需要上傳Linux服務器,那個服務器上的Vi又是個命令行程序,用起來很別扭。還好那上面有個GUI式的emacs,總算幫了大忙。但是emacs更深入的功能卻沒有研究,只是知道里面有了LISP語言的解釋器而已。

現將我最近用的比較多的功能羅列如下:

M-x使用技巧:M-x下輸入的命令過長的時候,可以輸入開頭的字符串,然后按TAB,emacs會顯示所有滿足輸入前綴的命令。

復制、剪切——M-w、C-w,或者用M-x cua-mode切換到CUA模式,就可以用C-c和C-v來復制粘貼了

粘貼——C-y

搜索——C-s,如果要利用剪切板的內容來進行搜索的話,使用Esc-y

搜索下一個——繼續(xù)按C-s

向前搜索——C-r

正則式搜索和普通搜索的快捷鍵類似——C-M-s和C-M-r //在ubuntu里由于C-M-s和系統(tǒng)快捷鍵沖突,因此可以用Esc C-s的方式啟動向前的正則式搜索。

替換——M-%

保存緩沖區(qū)——C-x C-s

十六進制模式——M-x hexl-mode

十六進制模式下跳轉到某個十六進制地址——M-g

十六進制模式退出——C-c C-c

多窗口的時候切換窗口——C-x o //”o”,not zero

關閉當前的窗口——C-x 0

只保留當前的窗口——C-x 1

新建一個上下式的窗口——C-x 2

新建一個左右式的窗口——C-x 3

打開shell——M-x shell //shell模式下,如果需要按C-c,終止程序的話,可以按兩下C-c

關閉緩沖區(qū)——C-x k

比較兩個已經打開的緩沖區(qū)——M-x ediff-buffers

比較兩個文件夾——M-x edirs

緩沖區(qū)被外部程序改變之后,重新刷新緩沖區(qū)——M-x revert-buffer

Undo——C-x u

Redo——用C-f中斷Undo執(zhí)行序列,然后再Undo,就可以Undo之前做的“Undo”操作,也就是Redo操作了。

打開文件——C-x C-f//這個命令不僅可用于打開文件,還可用于確定emacs默認的操作目錄,.emacs配置文件就放在這個目錄下,這一點對Windows用戶來說十分重要。

空格變TAB——M-x tabify

在emacs中去除^M——M-x replace-string C-q C-m RET

選擇整個緩沖區(qū)——C-x h

在windows下使用ediff——windows版的emacs沒有自帶diff工具,可以用cygwin中的diff代替之,具體的辦法是將cygwin的bin文件夾加到PATH環(huán)境變量中。

高亮顯示——C-x w h//后面需要跟正則表達式,如果是要全字匹配才高亮顯示的話,可以用\的方式給出相應的正則表達式。

取消高亮顯示——C-x w r

M-x list-matching-lines 或 M-x occur——另開一個buffer列出當前buffer中所有匹配正則表達式的那些行。這個功能我找了好半天才查到,之前還以為只有UltraEdit里才有呢。。。

M-x find-grep-dired——列出文件夾下所有匹配字符串的文件的名字。這個命令只能列出文件名,而不能列出在該文件中出現的匹配字符串的位置,有的時候仍然不太好用。

M-x rgrep——這個命令可以解決上面的問題,列出匹配字符串在文件夾中所有出現的位置。

C代碼相關的內容:

選擇縮進的版式——C-c . //然后會提問使用什么風格,默認的gnu風格是縮進兩個空格,我比較喜歡bsd風格的——縮進一個TAB

代碼排版——TAB//可支持塊操作

輸入TAB——C-q TAB

塊小寫——C-x C-l

塊大寫——C-x C-u

顯示行號——(global-linum-mode t)

跳到第N行——M-g g

使用cscope+emacs在Ubuntu 12.04下的注意事項

1)除了安裝cscope還需要安裝cscope-el,不然找不到xcscope.el

sudo apt-get install cscope-el cscope

2)xcscope.el的默認路徑:/usr/share/emacs/site-lisp。安裝好之后,還需要在配置文件~/.emacs(如果當前沒有這個配置文件的話,直接創(chuàng)建一個即可)里面加上(require 'xcscope)。或者,如果希望在打開c或者c++文件的時候才加載xcsope,可以這樣寫:

(add-hook 'c-mode-common-hook '(lambda () (require 'xcscope)))

注:Windows下創(chuàng)建配置文件的步驟:

1.HKEY_CURRENT_USER\Software\GNU\Emacs,注意GNU\Emacs是需要新建的。接下來在Emacs里新建一個HOME項,值是你的emacs路徑,比如我的:D:\emacs-23.1\bin。

2.把.emacs文件在這個bin目錄下。.emacs文件不能用Windows Explorer創(chuàng)建,但可以用Emacs保存功能來創(chuàng)建。

3)進入源代碼的根目錄,然后

cscope-indexer -r

即可建立索引文件。

4)添加cscope查詢的歷史功能

http://sourceforge.net/p/cscope/patches/65/

5)csope中的initial directory表示全局的搜索目錄。如果在同一個emacs實例中,打開多個工程的代碼時,不要設置這個initial directory,否則所有工程代碼都將在這個路徑下搜索,而不是在各自的路徑下搜索了。

scratch緩沖區(qū)

這是每次啟動Emacs時,默認打開的幾個緩沖區(qū)之一。正如緩沖區(qū)最上面的說明所說的,它的目的有兩個:

1.提供一個草稿緩沖區(qū)。

2.提供一個執(zhí)行Emacs Lisp的緩沖區(qū)。需要執(zhí)行命令的時候,將光標落在相應的Lisp命令右括號的后面,執(zhí)行C-x C-e即可。

例如,計算器功能:

(+ (* 33 4) 2)

計算33*4+2,可以看出這是一個典型的逆波蘭表達式。

快速打開最近打開過的文件

在配置文件~/.emacs中添加:

(require 'recentf)
(setq recentf-max-saved-items 100)
(recentf-mode 1)

Vi

dd 刪除整行

Lisp & GUI

客觀的說,目前開源領域并沒有很好用的和Lisp配套的GUI工具集,幾個開源實現要么完工度不高,要么過于古老,好幾個的樣式都是90年代中期的風格。

更有人指出,GUI基本上是OO語言的天下了,Lisp根本不適合干這個事。

不過事實的真相是:

1.最早的交互式GUI生成工具是用Lisp寫的。沒錯,就是蘋果喬教主旗下的Interface Builder,時間是1986年。

2.PTC公司的CAD系統(tǒng)是用Lisp和C++寫的。

3.蘋果公司早期使用MCL作為GUI開發(fā)語言(from 1984),因此那個時代有大量的程序是用Lisp寫的。包括Mac上最早的MS Word。Objective-C是喬教主到NextStep之后的事,最初和蘋果并無交集。

4.由于Mac在藝術家群體的流行。很多音樂軟件是用Lisp寫的,包括Open Music, PWGL, ScoreCleaner, Igor Engraver和Symbolic Composer等。

5.有家叫做LispWorks(From 1989)的公司提供對Lisp GUI的商業(yè)支持,而且提供的界面并不遜色于GTK、Qt等當代GUI工具集。上面提到的音樂軟件基本上都是基于LispWorks的。

綜上可見,Lisp開發(fā)GUI不是可能性的問題,而是一個有待重新發(fā)掘的問題。

Logo語言的安裝

Logo語言是我學習計算機時的啟蒙語言。那是初一、初二的時候,當時的電腦還是運行Dos的386系統(tǒng),我們在原始的命令行下,津津有味的編著代碼。那時候電腦可是稀罕物,為了節(jié)約上機時間,程序都是事先寫到小本本上的,我至今還保留著當時的作業(yè)本。

話歸正傳,說說Linux下Logo語言的安裝。

1)到Berkeley的官網下載Logo語言的源代碼

http://www.cs.berkeley.edu/~bh/logo.html

2)按照源代碼包里面readme的提示,編譯之。提示缺少libbsd和libtermcap。

3)sudo apt-get install libbsd-dev libncurses5-dev

重新編譯即可。

再一次看到熟悉的命令行界面和海龜了:)

小眾語言集中營

前言

自從John Warner Backus創(chuàng)立計算機語義學以來,人們發(fā)明的計算機語言已不下千種。基本上沒有人能夠對所有的語言都精通,實際上也沒有這個必要。

但我同樣不贊成只會一種語言的工程師。因為每種語言之所以存在,必然有其合理之處,只會一種語言會嚴重局限程序員的眼界。

比如說這篇文章中提到的:

http://imgtec.eetrend.com/blog/5317

“他的單位有一位寫Ruby的老員工,一個龐大的工程,代碼里面居然只有一個上帝類,就搞定了所有的問題。”

上面這句話,在文中被作者引用來作為不會設計的典范。但是看看作者的知識背景就會發(fā)現,這個作者的眼界實際上局限在了面向對象的籠子里,他以為所有的東西都要組成對象才是合理的,反而忽視了設計的目的。

我對這件事的解讀是:如果那個老員工的代碼能夠只用一個類搞定所有的問題,且代碼運行、功能擴展都沒有大問題的話,那這個老員工就是一個優(yōu)秀的設計者。即使他的設計思想不是面向對象的。

Linus Torvalds在批評C++的時候,曾說過“好的設計才是第一位的,糟糕的設計用什么語言寫出來都是垃圾。”

反過來理解這句話,那就是:語言和設計思想都只是設計的外皮,而不是靈魂。

面向過程的語言

1.編譯型

首推C語言,沒有之一。其次可以學學Pascal。其他的諸如Basic、Fortran、COBOL,基本上已經成為了歷史,如果沒有工作上的需要,就不要理會了。

2.解釋型

一般用的比較多的是bash、Tcl、perl。隨便學一個即可,這三個的使用都挺廣泛的。

面向對象的語言

1.編譯型

首推C++。C++支持的編程泛型非常多,從某種意義上說,不是個純粹的面向對象的語言。如果需要開發(fā)Mac和iPhone程序的,可以學學Objective-C。

2.虛擬機型

C#和Java,隨便學一個。VB.NET、Groovy、Scala都屬備選,各有各的好處,尤其后兩者屬于現在的熱點,學學沒準就用上了。

3.解釋性

Python、Ruby,隨便學一個。

科學計算

首推Matlab。這是一種面向矩陣的語言,它的所有數據類型都被理解為矩陣,而不是對象。

函數式語言

1.Haskell

這種語言認為所有的數據類型都是函數。

2.Lisp

這種語言認為所有的數據和函數都是列表,也就是“數據結構”課程上所說的廣義表。

標記語言

1.Tex

這是《The Art of Computer Programming》一書的作者Donald Knuth的杰作。從中可以看到后來的HTML、JavaScript、CSS等的影子。MS Office中的格式刷也是參考了Tex的設計。

Tex最為稱道的是數學公式的排版。MS Office直到2007才有了類似的效果。

Tex廣泛應用于歐美國家科學論文的排版領域,成為頂級科學期刊事實上的格式標準,可說是科研狗的必備技能。

2.數據描述類

INI和Json。這兩個比較簡單,也非常好用,不多說了。備選有BSON、YAML、

3.網頁類

XML、HTML、JavaScript必修。PHP、ASP、JSP,選修其中之一。Nodejs近來比較流行,值得投資。

嵌入式語言

首推Lua。它首先在游戲領域得到廣泛使用,現在在其他領域用的也比較多了。我一直在想,如果Lua早發(fā)明30年,Emacs會不會使用Lua,而不是Lisp做為內置語言呢?

形式語言

并非所有的編程語言都具有實用性,有些語言的創(chuàng)制,另有其目的。

比如Brainfuck語言。這個語言以出名難用著稱,在網上,一般被歸為奇技淫巧類語言。然而從語義學的角度,這個語言證明了在馮·諾依曼模型上,最多使用8個符號,就可以構建一個圖靈完備語言。

更多這類語言的知識參見:

http://www.15yan.com/story/5Y8BZqIGwjg/

總結

以上是生活随笔為你收集整理的Emacs, Vi, Lisp, Logo, 小众语言集中营的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。