可可熊的窝

Category Archives: Linux

使用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

F7中启动Mysql出错

IN:Linux   Tags: ,    Comments:6

F7在默认安装Mysql后启动时会出错:

使用mysqld_safe启动:

[cocobear@cocobear mysql]$ sudo mysqld_safe
nohup: ignoring input and redirecting stderr to stdout
Starting mysqld daemon with databases from /var/lib/mysql
STOPPING server from pid file /var/lib/mysql/cocobear.pid
070725 09:27:34 mysqld ended

使用service启动:

[cocobear@cocobear mysql]$ sudo service mysqld start
Timeout error occurred trying to start MySQL Daemon.
启动 MySQL: [失败]

这种情况下mysql.log出错提示为:

070725 09:28:59 mysqld started
070725 9:28:59 InnoDB: Operating system error number 13 in a file operation.
InnoDB: The error means mysqld does not have the access rights to
InnoDB: the directory.
InnoDB: File name ./ibdata1
InnoDB: File operation call: ‘open’.
InnoDB: Cannot continue operation.
070725 09:28:59 mysqld ended

根据日志文件的出错信息大致可以认定为权限问题,修改/var/lib/mysql/下的这几个文件权限:
ibdata1 ib_logfile0 ib_logfile1

[cocobear@cocobear mysql]$ sudo chmod 766 ib*

然后重新启动:

[cocobear@cocobear mysql]$ sudo service mysqld start
启动 MySQL: [确定]

很奇怪为什么会产生这样的问题,纳闷~

07-25
2007

我F7下Opera中的字体

IN:Linux   Tags: , ,    Comments:0

screenshot.png

screenshot-1.png

使用的是雅黑字体,看起来挺不错的,而且右边的最近留言也不会出错乱码了。

第一个是我的博客,第二个是Gmail。

06-22
2007

F7安装后的配置

IN:Linux   Tags: ,    Comments:10

3j001-qxcpos-f2ney640-1-f2nffdow-38
不知道大家安装完后做的第一件事是什么,我做的第一件事是调整scim的激活热键,因为打算搜索个东西,结果发现没办法用快捷键把scim调出来,于是在“scim设置”--“全局设置”中添加“开关键”,设置为ctrl+space。顺便删除一些没用的输入法、语言。

如果你不喜欢scim,想要安装fcitx,那么首先要做的是

rpm -qa | grep scim

然后删除scim相关的软件包,kill掉所有的scim进程,

killall -o scim*

接下来就可以安装fcitx了,你可以选择源码编译,也可以直接使用二进制包,我使用的是二进制包,但是安装后无法激活,找了些相关的文章,但仍然没有成功,就没再继续研究下去,直接用scim了,反正以前不用scim是因为它有些bug,但是F7里暂时没发现,就将就着用;而且正好使用scim不用担心和opera有冲突了。

第二件事就是源加livna、freshrpms的yum源:

rpm -ivh http://rpm.livna.org/livna-release-7.rpm

rpm -ivh http://ftp.freshrpms.net/pub/freshrpms/fedora/linux/7/freshrpms-release/freshrpms-release-1.1-1.fc.noarch.rpm

或者你可以使用fedora-cn的镜像源:

rpm -ivh ftp://ftp.fedora.cn/pub/fedora-cn/linux/7/i386/fedora-cn-release-7-2.y0.noarch.rpm

因为我装许多软件都使用的是yum,所以刚装完系统就把这些源设置好。

接着安装必备的软件:

浏览器是必不可少的,当然F7已经自带有firefox2.0,不过我还是喜欢opera,所以从我以前的软件备份里找到opera,使用rpm包安装。上面的几个源里似乎没有opera,所以如果要安装opera的话可以去opera官方下载。

yum install chmsee //chm阅读器也是不可缺少的

yum install bluefish //一个不错的web编辑器,不过我目前似乎更习惯使用vim

yum install xmms xmms-mp3 xmms-wma

这个不用说了吧,要注意的是后面两个必须装的,不然无法播放歌曲。

这里顺便提一点,F7中的xmms菜单已经可以完美显示中文了,歌曲列表只要你在“首选项”--“字体”中选择合适的中文字体就可以了。

yum install mplayer mplayer-gui mplayer-fonts mplayerplug

建议上面几个都装上,尤其是最后一个可以使firefox在线播放百度的mp3,还有其它一些在线视频。

yum install stardict

星际译王,也少不了的,不过词典似乎无法安装,我是直接使用以前的软件备份中的rpm包安装的,可以在星际译王主页去下载。

yum install rar //不可缺少的一个。

yum install gvim //似乎安装的时候没有这个

yum install eva //如果你觉得QQ对你来说还是必须的话。

到此为止,该装的软件应该装完了,接着应该对系统进行一些配置、优化。有关F7启动项目的优化可以参考下面的文章:

http://www.linuxsir.org/bbs/showthread.php?t=304624

或者参考我以前写的加快Linux的启动速度一文。

关于字体我觉得F7已经做得非常好了,可以不做任何修改,可能只有在opera下面字体不是很好,可以通过安装新的字体来解决。笔记本推荐使用雅黑字体。

F7默认的主题、图标都挺不错的,如果你想继续美化的话可以去FOR GNOME或者FOR KDE看看。

06-07
2007

不小心rm掉了ext3中的文件

IN:Linux   Tags: ,    Comments:9

 装完系统后准备把以前硬盘里的资料移过来,也不知道怎么回事,本来应该是用

cp -r Picture ~/Picutures

但不知道怎么回事就敲成了rm -r Picture  ~/Pictures  ,在网上找了许多关于误删ext3下的文件的文章,基本上都说无法恢复,只有一两篇文章提到了可以使用扫描整个分区的方法,有一篇作者自己用python写了一个脚本来搜索,但觉得效率太低,而且也不是很可靠,他也提到只有对ext3文件系统做很深入的了解才能写出更可靠的恢复工具,目前似乎网上没有专门的可以恢复ext3文件系统中文件的工具。

TO:wangcong,你对ext3文件系统了解的怎么样呢?能不能试着写这样的一个工具?

郁闷,幸亏删掉的只是一个Pictures文件夹,也就是自己的一些图片,不是很重要,如果是其它资料那就玩完了:-(

马上在.bashrc文件中加了一句

alias rm=’rm -i’

06-03
2007
Page 5 of 10« First...3456710...Last »
loading...