vim

vim

文本編輯器
Vim是一個類似于Vi的文本編輯器,不過在Vi的基礎上增加了很多新的特性,Vim普遍被推崇為類Vi編輯器中最好的一個,事實上真正的勁敵來自Emacs的不同變體。1999年Emacs被選為Linuxworld文本編輯分類的優勝者,Vim屈居第二。但在2000年2月Vim赢得了Slashdot Beanie的最佳開放源代碼文本編輯器大獎,又将Emacs推至二線,總的來看,Vim和Emacs同樣都是非常優秀的文本編輯器。[1]Vim(和Vi)一個最大的優勢在于它最常用的命令都是簡單的字符,這比起使用複雜的控制組合鍵要快得多,而且也解放了手指的大量工作,學習使用這些命令的時間很快。
    中文名: 外文名:vim 所屬學科: 使用類型:文本編輯器 應用範圍:計算機 功 能:代碼編寫

發展曆程

Vim是從 vi 發展出來的一個文本編輯器。代碼補完、編譯及錯誤跳轉等方便編程的功能特别豐富,在程序員中被廣泛使用。和Emacs并列成為類Unix系統用戶最喜歡的編輯器。

使用vim先知道其設計理念是很重要的,有助于記憶,舉一反三;

1.vim的設計理念是組合;

命令組合: Vim強大的編輯能力中很大部分是來自于其普通模式命令。vim的設計理念是命令的組合。例如普通模式命令"dd"删除當前行,"dj"代表删除到下一行,原理是第一個"d"含義是删除,"j"鍵代表移動到下一行,組合後"dj"删除當前行和下一行。另外還可以指定命令重複次數,"2dd"(重複"dd"兩次),和"dj"的效果是一樣的。"d^","^"代表行首,故組合後含義是删除到光标開始到行首間的内容(不包含光标);"dquot; quot;代表行尾,删除到行尾的内容(包含光标);用戶學習了各種各樣的文本間移動/跳轉的命令和其他的普通模式的編輯命令,并且能夠靈活組合使用的話,能夠比那些沒有模式的編輯器更加高效的進行文本編輯。

模式間的組合: 在普通模式中,有很多方法可以進入插入模式。比較普通的方式是按"a"(append/追加)鍵或者"i"(insert/插入)鍵。

3. vim針對程序語言代碼編寫者;

寫代碼的時候手需要時刻保持在鍵盤上,随機定位代碼、随機删除代碼、移動代碼、插入代碼的操作大大多于閱讀、翻頁操作,中間卡頓一下效率就大大降低了;但對普通用戶而言,順序寫、設置字體格式、翻頁讀多于随機寫删除操作, 且每個動作之間本身就有很多的停頓,用其他UI編輯器(word,notePad++等)效率反而比VIM高效,使用vim進行操作隻會徒增你的疑惑: vim為什麼這麼流行。(如果你不是一個代碼開發者,估計你看完這段話也無法感同身受,建議先去學一門編程語言,新手推薦學C,java入門,做一道50行代碼的課後習題,來感受下寫代碼的過程)

Bram Moolenaar 在 80 年代末購入他的Amiga計算機時,Amiga 上沒有他最常用的編輯器vi。Bram 從一個開源的 vi 複制 Stevie 開始,開發了 Vim 的 1.0 版本。最初的目标隻是完全複制 vi 的功能,那個時候的 Vim 是Vi IMitation(模拟)的簡稱。1991 年 Vim 1.14 版被 "Fred Fish Disk #591" ——Amiga 用的免費軟體集收錄了。1992 年 1.22 版本的 Vim 被移植到了 UNIX 和MS-DOS上。從那個時候開始,Vim 的全名就變成 Vi IMproved(改良)了。

在這之後,Vim 加入了不計其數的新功能。做為第一個裡程碑的是 1994 年的 3.0 版本加入了多視窗編輯模式(分割視窗)。從那之後,同一熒幕可以顯示的 Vim 編輯文件數可以不止一個了。1996 年發布的 Vim 4.0 是第一個利用圖型接口(GUI)的版本。1998 年 5.0 版本的 Vim 加入了 highlight(語法高亮)功能。

2001 年的 Vim 6.0 版本加入了代碼折疊、插件、多國語言支持、垂直分割視窗等功能。2006 年 5 月發布的 Vim 7.0 版更加入了拼字檢查、上下文相關補完,标簽頁編輯等新功能。 2008 年 8 月發布的 Vim 7.2,該版本合并了 vim 7.1 以來的所有修正補丁,并且加入了腳本的浮點數支持,2010年08月15日,曆時兩年的時間,vim又發布了vim 7.3這個版本,這個版本修複了前面版本的一些bug,以及添加了一些新的特征,這個版本比前面幾個版本來的要更加優秀。

主要功能

根據設定可以和原始vi完全兼容

多緩沖編輯

任意個數的分割窗口(橫,豎)

具備列表和字典功能的腳本語言

可以在腳本中調用 Perl, Ruby, Python, Tcl, MzScheme ,C,C++

單詞縮寫功能

動态單詞補完

多次撤銷和重做

對應400種以上文本文件的語法高亮

C/C++, Perl, Java, Ruby, Python 等40種以上語言的自動縮排

利用ctags的标簽中跳轉

崩潰後文件恢複

光标位置和打開的緩沖狀态的保存 複原(session功能)

可以對兩個文件進行差分,同步功能的diff模式

遠程文件編輯 。

移動效率

高效率移動

1、在插入模式之外

基本上來說,你應該盡可能少的呆在插入模式裡面,因為在插入模式裡面 VIM 就像一個“啞巴”編輯器一樣。很多新手都會一直呆在插入模式裡面,因為這樣易于使用。但 VIM 的強大之處在于他的命令模式!你會發現,在你越來越了解 VIM 之後,你就會花越來越少的時間使用插入模式了。

2、使用 h、j、k、l

使用 VIM 高效率編輯的第一步,就是放棄使用箭頭鍵。使用 VIM,你就不用頻繁的在箭頭鍵和字母鍵之間移來移去了,這會節省你很多時間。當你在命令模式時,你可以用 h、j、k、l 來分别實現左、下、上、右箭頭的功能。一開始可能需要适應一下,但一旦習慣這種方式,你就會發現這樣操作的高效之處了。

在你編輯你的電子郵件或者其他有段落的文本時,你可能會發現使用方向鍵和你預期的效果不一樣,有時候可能會一次跳過了很多行。這是因為你的段落在 VIM 看來是一個大的長長的行。這時你可以在按 h、j、k 或者 l 之前鍵入一個 g,這樣 VIM 就會按屏幕上面的行如你所願的移動了。

3、在當前行裡面有效的移動光标

很多編輯器隻提供了簡單的命令來控制光标的移動(比如左、上、右、下、到行首/尾等)。VIM 則提供了很多強大的命令來滿足你控制光标的欲望。當光标從一點移動到另外一點,在這兩點之間的文本(包括這兩個點)稱作被“跨過”,這裡的命令也被稱作是 motion。(簡單說明一下,後面會用到這個重要的概念)

4、常用到的一些命令(motion)

fx:移動光标到當前行的下一個 x 處。很明顯,x 可以是任意一個字母,而且你可以使用;來重複你的上一個 f 命令。

tx:和上面的命令類似,但是是移動到 x 的左邊一個位置。(這真的很有用)

Fx:和 fx 類似,不過是往回找。使用 , 來重複上一個F命令。

Tx:和 tx 類似,不過是往回移動到 x 的右邊一個位置。

b:光标往前移動一個詞

w:光标往後移動一個詞

0:移動光标到當前行首(是數字0)

^:移動光标到當前行的第一個字母位置

$:移動光标到行尾

):移動光标到下一個句子

( :移動光标到上一個句子

5、在整個文件裡面有效移動光标

VIM 有很多命令,可以用來到達文件裡面你想到達的地方。下面是一些在文件裡面移動的命令:

:向下移動一屏

:向下移動半屏

:向上移動一屏

:向上移動半屏

G:到文件尾

numG:移動光标到指定的行(num)。(比如 10G 就是到第 10 行)

gg:到文件首

H:移動光标到屏幕上面

M:移動光标到屏幕中間

L:移動光标到屏幕下面

*:讀取光标處的字符串,并且移動光标到它再次出現的地方。

#:和上面的類似,但是是往反方向尋找。

/text:從當前光标處開始搜索字符串 text,并且到達 text 出現的地方。必須使用回車來開始這個搜索命令。如果想重複上次的搜索的話,按 n移動到下個 text 處,N 移動到上一個 text 處 。

?text:和上面類似,但是是反方向。

m{a-z}:在當前光标的位置标記一個書簽,名字為 a-z 的單個字母。書簽名隻能是小寫字母。你看不見書簽的存在,但它确實已經在那裡了。

`a:到書簽 a 處。注意這個不是單引号,它一般位于大部分鍵盤的 1 的左邊。

`.:到你上次編輯文件的地方。這個命令很有用,而且你不用自己去标記它。

%:在成對的括号等符号間移動,比如成對的 [ ] , { }, ( ) 之間。将光标放到任意符号上,然後通過 % 來移動到和這個符号匹配的符号上,% 還可以正确的識别括号的嵌套層數,總是移動到真正匹配的位置上。因此這個命令在編輯程序代碼的時候非常有用,可以讓你方便的在一段代碼的頭尾間移動。

高效輸入

1、使用關鍵詞自動完成

VIM 有一個非常漂亮的關鍵詞自動完成系統。這表示,你可以輸入一個長詞的一部分,然後按一下某個鍵,然後 VIM 就替你完成了這個長詞的輸入了。舉個例子:你有一個變量名為 iAmALongAndAwkwardVarName 在你寫的代碼的某個地方。也許你不想每回都自己一個一個字母的去輸入它。

使用關鍵詞自動完成功能,你隻需要輸入開始幾個字母(比如 iAmAL),然後按 (按住 Ctrl,再按 N)或者 。如果 VIM 沒有給出你想要的詞,繼續按,直到你滿意為止,VIM 會一直循環它找到的匹配的字符串。

2、聰明的進入插入模式

很多新手進入插入模式都隻是用 i。這樣當然可以進入插入模式,但通常不是那麼合适,因為 VIM 提供了很多進入插入模式的命令。下面是最常用的一些:

i:在當前字符的左邊插入

I:在當前行首插入

a:在當前字符的右邊插入

A:在當前行尾插入

o:在當前行下面插入一個新行

O:在當前行上面插入一個新行

c{motion}:删除 motion 命令跨過的字符,并且進入插入模式。比如:c$,這将會删除從光标位置到行尾的字符并且進入插入模式。ct!,這會删除從光标位置到下一個歎号(但不包括),然後進入插入模式。被删除的字符被存在了剪貼闆裡面,并且可以再粘貼出來。

d{motion}:和上面差不多,但是不進入插入模式。

3、有效的移動大段的文本

使用可視選擇(visual selections)和合适的選擇模式

不像最初的 VI,VIM 允許你高亮(選擇)一些文本,并且進行操作。這裡有三種可視選擇模式:

v:按字符選擇。經常使用的模式,所以親自嘗試一下它。

V:按行選擇。這在你想拷貝或者移動很多行的文本的時候特别有用。

:按塊選擇。非常強大,隻在很少的編輯器中才有這樣的功能。你可以選擇一個矩形塊,并且在這個矩形裡面的文本會被高亮。

在選擇模式的時候使用上面所述的方向鍵和命令(motion)。比如,vwww,會高亮光标前面的三個詞。Vjj 将會高亮當前行以及下面兩行。

4、在可視選擇模式下剪切和拷貝

一旦你高亮了選區,你或許想進行一些操作:

d:剪貼選擇的内容到剪貼闆。

y:拷貝選擇的内容到剪貼闆。

c:剪貼選擇的内容到剪貼闆并且進入插入模式。

在非可視選擇模式下剪切和拷貝

如果你很清楚的知道你想拷貝或者剪切什麼,那你根本就不需要進入可視選擇模式。這樣也會節省時間:

d{motion}:剪切 motion 命令跨過的字符到剪貼闆。比如,dw 會剪切一個詞而 dfS 會将從當前光标到下一個 S 之間的字符剪切至剪貼闆。

y{motion}:和上面類似,不過是拷貝。

c{motion}:和 d{motion} 類似,不過最後進入插入模式。

dd:剪切當前行。

yy:拷貝當前行。

cc:剪切當前行并且進入插入模式。

D:剪切從光标位置到行尾到剪貼闆。

Y:拷貝當前行。

C:和 D 類似,最後進入插入模式。

x:剪切當前字符到剪貼闆。

s:和x類似,不過最後進入插入模式。

5、粘貼

粘貼很簡單,按 p。

6、使用多重剪貼闆

很多編輯器都隻提供了一個剪貼闆。VIM 有很多。剪貼闆在 VIM 裡面被稱為寄存器(Registers)。你可以列出當前定義的所有寄存器名和它們的内容,命令為“:reg”。最好使用小寫字母來作為寄存器的名稱,因為大寫的有些被 VIM 占用了。

使用寄存器的命令為雙引号 “。

比如:要拷貝當前行到寄存器 k。你應該按 “kyy。(你也可以使用 V”ky。為什麼這樣也可以呢?)行應該已經存在了寄存器 k 裡面直到你又拷貝了一些東西進入寄存器 k。你可以使用命令 “kp 來粘貼寄存器 k 裡面的内容到你想要的位置。

7、避免重複

令人驚奇的 . 命令

在 VI 裡面,輸入 . (小數點符号),将會重複你輸入的上一個命令。比如,你上個命令為“dw”(删除一個詞),VI 将會接着再删除一個詞。

8、使用數字

使用數字也是 VIM 強大的而且很節省時間的重要特性之一。在很多 VIM 的命令之前都可以使用一個數字,這個數字将會告訴 VIM 這個命令需要執行幾次。比如:

3j 将會把光标向下移動三行。

10dd 将會删除十行。

y3t″ 将會拷貝從當前光标到第三個出現的引号之間的内容到剪貼闆。

數字是擴展 motion 命令作用域非常有效的方法。

高效讀代碼

建議在vim上安裝Taglist+cscope+ctags插件有利于高效讀代碼,有利于學習!

1、安裝

對于小編我來說我使用的是Ubuntu,安裝軟件一般使用的命令是apt-get install ***!

對于vim+Taglist+cscope+ctags組合編輯器的創建,vim , cscope , ctags安裝起來比較方便使用上述命令即可安裝!

(對于不同的Linux發行版本安裝軟件的命令不太一樣,需要根據自己的安裝版稍微修改,比如說Fedora即使用yum命令安裝)

對于Taglist使用這個方法安裝不了,我們需要先下載,然後安裝完成:

首先上網下載Taglist插件,下載完成後解壓,再将文件下的taglist.vim使用cp命令拷貝到HOME/.vim/plugin文件夾下(cp -r taglist.vim ~/.vim/plugin)

2、vim的配置

vim是一個非常好用的編輯工具,以下介紹幾個常用的底行模式命令:

(1). 設置縮進

:set smartindent // 設置縮進

:set smartindent shiftwidth=4 // C語言自動縮進,縮進值為4個字符寬度

(2). 顯示光标行列信息

:set ruler // 顯示光标信息(右下角)

(3). 查看制表符

:set list // 顯示制表符,以^符号顯示制表符的位置

(4). 查看行數信息

:set number //顯示行号(左邊)

(5). 關鍵字高亮

:syntax on //關鍵字高亮

(6). 多文件編輯 ,在編寫程序時有可能需要同時編輯多個文件,在這種情況下,需要如下設置

: split two.c // 多文件編輯

當然,如果不嫌麻煩,可以在每次打開Vim時 輸入如上命令,如我經常用的是:set number :set ruler :syntax on :set smartindent 命令,如果将平時在底行模式下輸入的命令直接寫入配置文件,則以後使用Vim時不用再次輸入這些命令。

首先,試着在Vi的底行模式下輸入如下命令,如果不支持的話,去下載一個Vim的全版本,sudo apt-get install vim-full。

以下是修改配置文件的方法:

(1). 找到Vimrc文件。

(2) 查看文件的權限:

ls -l vimrc

shisir@shisir-desktop:/usr/share/vim$ cd /etc/vim

shisir@shisir-desktop:/etc/vim$ ls

gvimrc vimrc vimrc.tiny

shisir@shisir-desktop:/etc/vim$ ls -l vimrc

-r--r--r-- 1 root root 2492 2009-04-10 08:08 vimrc

(3) 如果沒有寫權限的話,修改權限,使我們可以修改該配置文件

sudo chmod a+w vimrc

(4)根據個人需要将上述命令寫入配置文件

比如,我個人的設置是: syntax on , set ruler ,set number , set smartindent shiftwidth=4

下面貼上我的vimrc文件的配置信息:

"顯示行号

set number

"檢測文件的類型

filetype on

"記錄曆史的行數

set history=1000

"自動對齊

set autoindent

set cindent

"智能選擇對齊方式

set smartindent

"tab為4個空格

set tabstop=4

"當前行之間交錯時使用4個空格

set shiftwidth=4

"設置匹配模式,輸入左括号會出現右括号

set showmatch

"編輯時顯示光标狀态

set ruler

"快速匹配

set incsearch

"修改文件自動備份

if has("vms")

set nobackup

else

set backup

endif

"""""""""""""設置開啟ctags"""""""""""""

settags=/home/zhouyl/linux-3.4.7/tags;"這邊設置的是你使用ctags -R的目錄,後面有介紹!你根據自己的使用修改這個路徑

set autochdir

"""""""""""""""""Taglist設置"""""""""""""""""

""let Tlist_Auto_Open = 1

let Tlist_Ctags_Cmd = '/usr/bin/ctags'

let Tlist_Show_One_File = 1

let Tlist_Exit_OnlyWindow = 1

""""""""""""""""""""""cscope設置""""""""""""""""""

set cscopequickfix=s-,c-,d-,i-,t-,e-

if has("cscope")

set csprg=/usr/bin/cscope

set csto=1

set cst

set nocsverb

" add any database in current directory

if filereadable("cscope.out")

cs add cscope.out

endif

set csverb

endif

因為我的文檔中的原配置文件已經有了語法高亮:

" Vim5 and later versions support syntax highlighting. Uncommenting the next

" line enables syntax highlighting by default.

if has("syntax")

syntax on

endif

所以我就沒寫了,您如果vimrc文件裡面沒有此項建議自己加上syntax on 設置語法高亮

PS:在配置文件中"符号後的内容是注釋,而且在配置文件中是不需要添加符号的 ,這裡關于cscope、ctags和Taglist的設置可以先寫上,後面将對這三個插件有介紹。好了,去開一個Vim,編輯一個程序看看,是不是感覺很不一般呢?

好了,下面順便演示下,智能補全的用法,我分四種情況:1、前面申明過的變量或者函數名的補全;2、結構體等自建結構的補全;3、STL等标準庫的補全;4、括号、引号等自動匹配補全。

對于第一種情況,寫程序的過程中,直接用CTRL+p即可選擇,對于第二種情況,如果想申明了結構體T,想在輸入T.時彈出成員供選擇,隻需在用之前按一下:CTRL+F12

3、Taglist插件的使用

TagList插件,是一款基于ctags,在vim代碼窗口旁以分割窗口形式(如上圖所示)顯示當前的代碼結構概覽,增加代碼浏覽的便利程度的vim插件.

在Vim中加載代碼文件後,可以使用以下命令控制taglist

:TlistOpen 打開并将輸入焦點至于标簽列表窗口,效果如上圖所示

:TlistClose 關閉标簽列表窗口

:TlistToggle 切換标簽列表窗口狀态(打開←→關閉),标簽列表窗口是否獲得焦點取決于其他配置

ctl-w + w 或ctl-w + 方向鍵 窗口切換(taglist本質上是一個vim分隔窗口,因此可以使用ctl-w系列快捷鍵對窗口進行切換操作)

在Taglist窗口主要有以下操作

按F1:打開幫助

回車鍵:跳到光标所在的标記的定義處(如将光标移到main函數,按回車鍵)

o:新建一個窗口,跳到标記定義處

p:預覽标記定義(仍然在taglist窗口)

空格:顯示标記的原型(如函數原型)

u:更新标記列表(比如源文件新增了一個函數,并在保存後,可在taglist窗口按u)

s:選擇排序字段(暫時我也不知道什麼意思)

d:删除光标所在的taglist文件(如用vi打開了兩個文件f1.c,f2.c可以删除f1.c的标記)

x:n放大/縮小taglist窗口

+:展開(指标記)

-:折疊

*:全部展開

=:全部折疊

[[:将光标移到前一個文件的起點

]]:将光标移到後一個文件的起點

q:退出taglist窗口

F1:關閉幫助

4、ctags插件的使用

VIM簡單易用,大家隻要看看VIM自帶的vitutor,大約隻要20分鐘就能掌握VIM的用法,上面也簡單介紹了點vim的用法。但是對于Linux下的C/C++的 程序員,使用VIM+Ctags的組合來寫程序也許是最佳的選擇。^_^

盡管ctags也可以支持其它編輯器,但是它正式支持的隻有VIM。并且VIM中已經默認安裝了Ctags,它可以幫助程序員很容易地浏覽源代碼。

熟練的使用ctags僅需記住下面七條命令:(很簡單吧,呵呵)

1. $ ctags–R * ($ 為Linux系統Shell提示符)

2. $ vi –t tag (請把tag替換為您欲查找的變量或函數名)

3. :ts (ts 助記字:tagslist, “:”開頭的命令為VI中命令行模式命令)

4. :tp (tp 助記字:tagspreview)---此命令不常用,可以不用記

5. :tn (tn 助記字:tagsnext) ---此命令不常用,可以不用記

6. Ctrl + ] 跳到光标所在函數或者結構體的定義處

7. Ctrl + T 返回查找或跳轉

下面我們逐條的解釋上面的命令:

“$ ctags–R *”:“-R”表示遞歸創建,也就包括源代碼根目錄(當前目錄)下的所有子目錄。“*”表示所有文件。這條命令會在當前目錄下産生一個“tags”文件, 當用戶在當前目錄中運行vi時,會自動載入此tags文件。Tags文件中包括這些對象的列表:

用#define定義的宏

枚舉型變量的值

函數的定義、原型和聲明

名字空間(namespace)

類型定義(typedefs)

變量(包括定義和聲明)

類(class)、結構(struct)、枚舉類型(enum)和聯合(union)

類、結構和聯合中成員變量或函數

VIM用這個“tags”文件來定位上面這些做了标記的對象。

剩下的命令就是定位這些對象的方法:

“$ vi –t tag” :在運行vim的時候加上“-t”參數,例如:

[/usr/src]$ vim -t main

這個命令将打開定義“main”(變量或函數或其它)的文件,并把光标定位到這一行。如果這個變量或函數有多處定義,在VI命令行模式“:ts”命令就能 列出一個列表供用戶選擇。 “:tp”為上一個tag标記文件,“:tn”為下一個tag标記文件。當然,若當前tags文件中用戶所查找的變量或函數名隻有一 個,“:tp,:tn”命令不可用。 :(

最方便的方法是把光标移到變量名或函數名上,然後按下“ Ctrl+] ”,這樣就能直接跳到這個變量或函數定義的源文件中,并把光标定位到這一行。用 “ Ctrl+T ”可以退回原來的地方。即使用戶使用了N次“Ctrl+]”查找了N個變量,按N次“Ctrl+t”也能回到最初打開的文件,它會按原路返 回 。 ^_^

注意:運行vim的時候,必須在“tags”文件所在的目錄下運行。否則,運行vim的時候還要用“:settags=”命令設定“tags”文件的路 徑,這樣vim才能找到“tags”文件。在完成編碼時,可以手工删掉tags文件(帚把不到,灰塵不會自己跑掉^_^)。

5、cscope插件的使用

Cscope是一個類似 ctags的工具。 你可以把它想作是超過頻的 ctags,因為它功能比ctags 強大很多。 在 Vim 裡,通過 cscope 查詢結果來跳轉就象跳轉到其他的标簽完全一樣;它被保存在标簽棧裡。這樣你就可以象使用 ctags一樣在函數等等之間便捷的跳轉。

在VIM中使用cscope非常簡單,首先調用“cscope add”命令添加一個cscope數據庫,然後就可以調用“cscope find”命令進行查找了。VIM支持8種cscope的查詢功能,如下:例如,我們想在代碼中查找調用work()函數的函數,我們可以輸入:“:cs find c work”,回車後發現沒有找到匹配的功能,可能并沒有函數調用work()。我們再輸入“:cs find s work”,查找這個符号出現的位置,vim列出了這個符号出現的所有位置。我們還可以進行字符串查找,它會雙引号或單引号括起來的内容中查找。還可以輸入一個正則表達式,這類似于egrep程序的功能。

在源代碼目錄下打開vim。要使用cscope查找就必須加載cscope.out文件.在vim命令行下執行:(按照上述方法配置好的vimrc中有這一步)

:cs add cscope.out

在vim命令行下執行:

:cs help

cscope commands:

add : Add a new database (Usage: add file|dir [pre-path] [flags])

find : Query for a pattern (Usage: find c|d|e|f|g|i|s|t name)

c: Find functions calling this function //查找調用本函數的函數

d: Find functions called by this function //查找本函數調用的函數

e: Find this egrep pattern //查找egrep模式,相當于egrep功能,但查找速度快多了

f: Find this file //查找并打開文件,類似vim的find功能

g: Find this definition //查找函數、宏、枚舉等定義的位置,類似ctags的功能

i: Find files #including this file //查找包含本文件的文件

s: Find this C symbol //查找C語言符号,即查找函數名、宏、枚舉值等出現的地方

t: Find assignments to //查找指定的字符串

help : Show this message (Usage: help)

kill : Kill a connection (Usage: kill #)

reset: Reinit all connections (Usage: reset)

show : Show connections (Usage: show)

例如:使用cscope查找do_fork函數的定義:

在vim命令行下執行: :cs f g do_fork

版本信息

Emacs和Vim二款神一樣的代碼編輯器

今天有一位從事程序猿N年的哥們在QQ上給本小編吐槽,“你個啥子網站,連個Emacs這樣神一樣的編輯器都沒有,你弄些啥嘛”,俺沉默了10秒外加5秒的發呆,Emacs?神一樣的編輯器?這種說法讓UltraEdit和Editplus情以何堪,還有那個号稱程序員們最喜愛的編輯器Notepad++聽完一定會痛哭流淚。趕快找度娘,問問是否如此,在看到一篇文章“Emacs和Vim,神的編輯器和編輯器之神”之後,讓我覺得有一種不發布Emacs和Vim簡直就是犯罪的沖動,于是急沖沖發布Emacs和Vim這二款編輯器神器,讓那些未睹這二款編輯器芳容的同學一睹神的風采。

要詳細介紹這二款編輯器真是難于找到合适的文字,“古老、經典、強大”等一切詞語相對于Jiqing Wu這位作者博客所寫都顯得那麼的蒼白無力,現引用些有關描述這二款編輯器的原話,你一定會為Emacs和Vim特立獨行的魅力所着迷。

●Windows下用UltraEdit和Editplus的人質問:它們到底比UltraEdit和Editplus好在哪裡鳚我說:不可同日而語。

連UltraEdit和EditPlus都沒用過的同學問:它們就相當于Linux上的 Notepad吧鳚我說:請你從我的眼前消失。

●Linux和開源軟件漸漸流行起來,人們才發現:可擴展性才能給軟件強大的生命。在MS的VS橫行的今天,Eclipse為什麼被評為最好的IDE鳚就是因為它在IDE中最具可擴展性。在IE幾乎一統天下的時候,為什麼Firefox能奪走越來越多的用戶,也是因為它的可擴展性。提供了良好的擴展接口,用戶自然會寫出各種各樣的插件,來滿足用戶自己形形色色的要求。這樣,軟件在用戶的推動下自然變得強大了,Emacs和Vim沒有被時代淘汰,反而越發強大,也正是因為在數不清的編輯器中,他們具有無可匹敵的可擴展性。

●有這麼牛逼的擴展語言,注定Emacs向着無所不能的方向發展。漸漸地,人們用Emacs不再限于寫程序,寫文檔,而且在Emacs裡管理文件系統,運行終端,收郵件,上網,聽音樂……,真是一發不可收拾。甚至,有人用Emacs控制咖啡機煮咖啡。

●這種大而全的擴展,背離了“一個程序隻做一件事并做好它”的 Unix哲學,被Unix的忠誠用戶所诟病。可是真的背離了嗎鳚 Emacs說過自己是一個編輯器嗎鳚

●正是因為Emacs的無敵的可擴展性,人們才分不清Emacs到底是不是一個編輯器了。但,就是有人喜歡這種All-in-One的哲學,喜歡在Emacs中完成每件事。所以才會有人寫《生活在Emacs中》,所以, Emacs才會成為一種信仰。

●Linux之父Linus多年來用的是一款 MicroEmacs,它比GNU Emacs或XEmacs少許多功能,但Linus就是用它在維護Linux。 微軟的大牛Don Box,Com之父,一直用Emacs,他說誰也不能奪走他的編輯器。他還在網上放了一段他用Emacs寫C#程序的視頻。

●編程大師們的選擇,也是Emacs和Vim被追捧為神器的原因之一。

●可擴展性讓你傾注了靈魂

●獨特的操作方式讓你中了毒

●黑客的編輯器,一劍在手,夫複何求

●Emacs和Vim神器引發的聖戰争鬥不斷

相關詞條

相關搜索

其它詞條