可可熊的窝

Tag Archives: Vim

vim中使用sdcv(stardict CLI版)

IN:Linux   Tags: , ,    Comments:0

这里介绍的vim中使用辞典查词的方法不错,利用了vim的一些特性,这样平时使用vim的时候就可以手不离键盘要完成查词了。

sdvc是命令行版的Stardict,可以在这里下载,目前最新的版本是0.4.2,不过在ADM64平台下编译会出错,我在网上找到了一个补丁,不过这个补丁是针对debain用户的,有些用不上,那些找不到文件的patch就可以直接忽略掉。

如果在gvim中使用则在~/.gvimrc中添加:

function  Mybln()
     let  expl=system('sdcv  -n  '  .
           \  v:beval_text  .
           \  '|fmt  -cstw  40')
     return  expl
   endfunction 

   set  bexpr=Mybln()
   set  beval

如果直接在vim中使用,则在~/.vimrc中添加:

function!  Mydict()
   let  expl=system('sdcv  -n  '  .
         \   expand("<cword>"))
   windo  if
         \  expand("%")=="diCt-tmp"  |
         \  q!|endif
   25vsp  diCt-tmp
   setlocal  buftype=nofile  bufhidden=hide  noswapfile
   1s/^/\=expl/
   1
endfunction
nmap  F  :call  Mydict()<cr>

gvim中鼠标移动到单词上就可以得到翻译,在vim中光标移动到单词上,使用shift+f可以新分割出来一个窗口显示单词的翻译。

原文请使用梯子访问。

05-19
2008

使用vim+cscope阅读源码

IN:Linux   Tags: , ,    Comments:9

vim与cscope安装就不说了,一般的发行版都会有的。不过如果你是源码编译的vim,请使用–enable-cscope选项。

-R: 在生成索引文件时,搜索子目录树中的代码
-b: 只生成索引文件,不进入cscope的界面
-q: 生成cscope.in.out和cscope.po.out文件,加快cscope的索引速度
-k: 在生成索引文件时,不搜索/usr/include目录
-i: 如果保存文件列表的文件名不是cscope.files时,需要加此选项告诉cscope到哪儿去找源文件列表。可以使用“-”,表示由标准输入获得文件列表。
-I dir: 在-I选项指出的目录中查找头文件
-u: 扫描所有文件,重新生成交叉索引文件
-C: 在搜索时忽略大小写
-P path: 在以相对路径表示的文件前加上的path,这样,你不用切换到你数据库文件所在的目录也可以使用它了。

在使用cscope之前需要先生成一个数据库,你可以使用cscope-indexer(如果多个目录你可以使用-R选项),它会在当前目前下生成一个cscope.files的文件,这个文件包含了cscope需要生成索引的全部文件,因为cscope-indexer不会自动查到cpp,java后缀的文件,因此最后使用find来生成cscope.files文件:

[cocobear@cocobear src]$ find ./ -name “*.c” -or -name “*.h” -or -name “*.cpp” > cscope.files

上面的命令会把当前目录下所有.c,.h,.cpp文件列出并写入cscope.files文件中。接着使用cscope -bq来生成索引引。接着你就可以使用vim来打开一个文件来浏览代码了。使用cs(cscope写)命令来实现函数的调用,定义查找:

s: 查找C语言符号,即查找函数名、宏、枚举值等出现的地方
g: 查找函数、宏、枚举等定义的位置,类似ctags所提供的功能
d: 查找本函数调用的函数
c: 查找调用本函数的函数
t: 查找指定的字符串
e: 查找egrep模式,相当于egrep功能,但查找速度快多了
f: 查找并打开文件,类似vim的find功能
i: 查找包含本文件的文

例如:cs find c do_cscope 可以用来查找项目中调用了do_cscope函数的函数,在vim会以一个列表的形式列出所有相关的内容,你可以输入数字来选择。

当然如果你的源码中只含有.c,.h文件,你可以直接使用

cscope -Rbq

来生成索引文件。

如果你有兴趣的话可以在vim里输入:cs help来查看更多cscope的信息。

BTW:总觉得在kscope里面看代码不爽的很,还是喜欢vim。

10-12
2007

vim进阶

IN:Linux   Tags: ,    Comments:4

/*摘自:http://edt1023.sayya.org/vim/index.html
  *
  *里面有很多非常好用的我用蓝色标记了一下,看看你都知道这些好用的功能吗?
 *
 */

Ctrl+f 即 PageDown 翻頁(Forward,向前、下翻頁)。
Crtl+b 即 PageUp 翻頁(Backward,向後、上翻頁)。

0 是數目字 0 而不是英文字母 o。移至行首,(含空白字元)。
W 移动一个符,但會忽略一些標點符號。
e 移至後一個字字尾。
E 同上,但會忽略一些標點符號。
b 移至前一個字字首。
B 同上,但會忽略一些標點符號。
H 移至螢幕頂第一個非空白字元。
M 移至螢幕中間第一個非空白字元。
L 移至螢幕底第一個非空白字元。

) 移至下一個句子(sentence)首。
( 移至上一個句子(sentence)首。sentence(句子)是以 . ! ? 為區格。
} 移至下一個段落(paragraph)首。
{ 移至上一個段落(paragraph)首。paragraph(段落)是以空白行為區格。

R进入替换模式

I 在行首開始輸入文字。此之行首指第一個非空白字元處,要從真正的第一個字元處開始輸人文字,可使用 0i 或 gI(Vim 才有)。
A 在行尾開始輸入文字。這個好用,您不必管游標在此行的什麼地方,只要按 A 就會在行尾等著您輸入文字。
O 在游標所在行上開一新行來輸入文字。
J 將下一行整行接至本行(Joint)。

dG 刪至檔尾。
d1G 刪至檔首。或 dgg(只能用於 Vim)。
D 刪至行尾,或 d$(含游標所在處字元)。
d0 刪至行首,或 d^(不含游標所在處字元)。請回憶一下 $ 及 ^ 所代表的意義,您就可以理解 d$ 及 d^ 的動作,這就是 vi(m) 可愛之處。

5J 將五行合併成一行。
5i A 然後按 Ecs,插入五個 A。中文也可以!
2i sys Esc 插入 syssys。中文也可以!

:ce(nter) 本行文字置中。注意是冒號命令!
:ri(ght) 本行文字靠右。
:le(ft) 本行文字靠左。所謂置中、靠左右,是參考 textwidth(tw) 的設定。如果 tw 沒有設定,預設是80,就是以 80 個字元為總寬度為標準來置放。當然您也可以如 sw 一樣馬上重設。

gqap 整段重排,或 gqip,在段落中位何地方都可以使用。和中文的配合見下述。
gqq 本行重排。
gqG 全文重排,是以游標所在處的段落開始重排至檔尾。以空白行為段落的間隔。

» 整行向右移一個 shiftwidth(預設是 8 個字元,可重設)。这个好啊,写代码时缩进就方便了。
« 整行向左移一個 shiftwidth(預設是 8 個字元,可重設)。

:[range]s/pattern/string/5.1
range 指的是範圍,1,7 指從第一行至第七行,1,$ 指從第一行至最後一行,也就是整篇文章,也可以 % 代表。還記得嗎? % 是目前編輯的文章,# 是前一次編輯的文章。
pattern 就是要被替換掉的字串,可以用 regexp 來表示。
string 將 pattern 由 string 所取代。
c confirm,每次替換前會詢問。
e 不顯示 error。
g globe,不詢問,整行替換。
i ignore 不分大小寫。

mx x 代表 26 個小寫英文字母,這樣游標所在處就會被 mark。
`x 回到書籤原設定位置。` 是 backward quote,就是 Tab 鍵上面那一個。
‘x 回到書籤設定行行首。’ 是 forward quote,是 Enter 鍵隔壁那一個。

# 或 Ctrl+^ 編輯前一個檔案,用於兩檔互相編輯時相當好用。這種用法不管是 argument list 或 buffer list 檔案間皆可使用。還記得嗎?# 代表的是前一次編輯的檔案。

:f 或 Ctrl+g 顯示目前編輯的檔名、是否經過修改及目前游標所在之位置。
:f 檔名 改變編輯中的檔名。(file)
:r 檔名 在游標所在處插入一個檔案內容。(read)

vim -x [檔名] 加密编辑一个文件,每次编辑时要求输入密码,否则为乱码。也可以在编辑时使用:X命令来设置密码,不过要注意,设置以后需要保存并退出。

Ctrl+w n 即 :new。開一空的新視窗。
Ctrl+w s 即 :sp(lit),會開一新視窗,且原檔分屬兩個視窗。
Ctrl+w f 開一新視窗,並編輯游標所在處之 word 為檔名的檔案。
Ctrl+w q 即 :q 結束分割出來的視窗。
Ctrl+w o 即 :o nly! 使游標所在之視窗,成為目前唯一顯示的視窗其它視窗會隱藏起來。
Ctrl+w j 移至下視窗。
Ctrl+w k 移至上視窗。還記得 hjkl 的按鍵移動方式嗎?

:sh(ell) 執行 shell。使用 exit 回到 vim。
:r !commond 這個就妙了!會在游標所在處次一行插入外部指令 commond 執行後的輸出內容。例如 :r !date 就會插入日期時間。這在 elvis 是會插入在游標所在處那一行。
:n,mw !commond 以 n 至 m 行內之資料,當做外部指令 commond 的 input。這算是相當高級的用法了,初學者大概還用不上,不過印象中留有一個這樣的功能,以後總是會用得上的。
K 大寫 K 會顯示游標所在處之 word 的 man page 系統線上使用手冊。

09-30
2007
loading...