欢迎你客人 ( 登录 | 注册 )

  评价 ---

4 页 V < 1 2 3 4 >
entry 2006-2-6, 19:10 PM
global是一个程序分析器,但它在vim使用时配合的gtags.vim中生成的列表信息没有列出符合的信息原文。使用起来很不方便。

cscope 可以列出找到的匹配信息所在文件,行号以及函数。
global 却只是简单的列出所在文件和行号,后面跟着没有什么意义的查询信息原始内容。

解决的方法也很简单。就是修改gtags.vim中显示信息部分。

修改
第 302 行:

原文:
代码
let cmd = 'global' . sep . '-tq' . option . sep . pattern

修改后:
代码
let cmd = 'global' . sep . '-xq' . option . sep . pattern


第 319 行:

原文:
代码
let &efm="%m%\\t%f%\\t%l"

修改后:
代码
let &efm="%*[^ ]%*[ ]%l\ %f\ %m"

 | 分类: Linux
entry 2006-2-5, 03:06 AM
由于本人比较喜欢在终端状态下的vim,所以gvim下的扩展使用的不多。这里介绍的也是我简单的使用以上扩展的一点点体会。请大家指正。 emacs 不会用,也没有比较过拉。 biggrin.gif



1、大体感觉,(因为使用时间不长,不全面)
总体使用的感觉定位查找类型定义基本可以用,但自动补全类型方面由于ctags的功能有限,感觉在大工程时,不一定很好用。

大型程序一定要global的参与,它的分析比较全面,但在vim中的提示信息有限。

taglist 精干,需要ctags的支撑 ,直接可以在左边列出函数列表,全局参数列表。(可以排序)

cscope 比较强大,可以对函数以及部分类型定义进行跳转,但有些BUG,好像在某些条件下无法正确找到分析枚举的定义。

cppcomplete 需要ctags的支撑,可以补全类型或者函数名(可不是普通Ctrl+P/N的那种)

global 新版本可以嵌入vim使用,提供比较完整解析和类型索引,和cscope比,稍微差些的就是对类型引用的打印列表中没有标识这个引用在什么函数中进行的。其实我的感觉global可能不是为vim所生,它的主要目的是用html的方式进行表达相关的关联关系和索引,使用起来感觉没有cscope的那么贴切。



2、相关的扩展的安装
代码
apt-get install  exuberant-ctags  cscope global

cppcomplete 和 taglist 要到www.vim.org的扩展列表中下载。

taglist 的下载地址:
http://www.vim.org/scripts/script.php?script_id=273
cppcomplete 的下载地址:
http://www.vim.org/scripts/script.php?script_id=527

然后在 建立目录
代码
$HOME/.vim/plugin


将下载的cppcomplete.vim 和 taglist.vim拷贝到$HOME/.vim/plugin中。
安装了global后,最新4.8.6 以上版本有带vim的扩展,将它也拷贝到 $HOME/.vim/plugin

debian sid 版本global安装后扩展文件在
代码
/usr/share/doc/global/examples/gtags.vim.gz

需要拷贝到$HOME/.vim/plugin后解压,解压方法:
代码
gzip -d  gtags.vim.gz



3、使用这些工具
1)准备工作,先修改一下$HOME/.vimrc文件

为了更好的使用cscope请添加如下内容,这样Ctrl-]的跳转将由cscope的tags进行分析。
代码

if has("cscope")
set csprg=/usr/bin/cscope
set csto=0
set cst
set nocsverb
" add any database in current directory
if filereadable("cscope.out")
cs add cscope.out
" else add database pointed to by environment
elseif $CSCOPE_DB != ""
cs add $CSCOPE_DB
endif
set csverb
set cscopetag
set cscopequickfix=s-,g-,c-,d-,t-,e-,f-,i-
endif


2)使用cscope
cscope的tag生成最简单的方法是:
在你的开发工程的最上层目录执行cscope-indexer,它会遍历下面的所有目录,生成两个文件,一个是cscope.files,这个文件记录需要生成tags的文件名,可以手工修改,另一个是cscope格式的tags文件cscope.out。

完成后,你在生成了cscope.out的目录打开工程的任意文件,就可以使用Ctrl-]跳转查找类型定义了。
代码

cs f s xxxx  查找xxxx出现的地方,它能详细列出哪些文件的哪行的哪个函数引用,以及该行的内容,比较不错。 :)


它的所有命令的使用请参考:
代码

help cscope


3)使用taglist
taglist的功能是即时生成当前文件的函数列表和全局变量列表,便于索引。
在vim中命令模式下使用
Tlist 打开或者关闭当前文件的索引;
TlistSync 立即在打开的索引窗口中定位当前的光标所在位置属于哪个函数或者结构定义中。
还有其他命令,请参考它的帮助文件。

4)ctags的使用
其实cscope是用来替代ctags功能的,ctags的应用广泛,还有其他很多的软件依赖它。

例如要生成cppcomplete需要的tags文件的话,需要运行下面的命令:
代码

ctags -n -f cppcomplete.tags --fields=+ai --C++-types=+p * -L cscope.files

注意,我在最后使用了参数"-L cscope.files" 这仅仅是借用拉cscope生成的文件索引来帮助ctags去查询相关工程文件生成tags。

5)使用cppcomplete
cppcomplete的使用我只是简单的发现它可以根据上述方法生成的tags文件来自动补全类型成员。
使用很简单,就是在你需要补全类型成员时,按F8键就可以拉。它一般第一次使用时,需要让你确认是使用已有的tags文件还是再生成一次。一般我们自己控制生成tags文件的时机,它就使用就行拉。
但它也受到ctags的分析能力比较差的限制,可能不是每次都能帮到你。

6)使用global
在工程的最上层目录执行命令:
gtags
等待它完成所有需要的global自己格式的tags的生成
生成完后,需要的就是在生成tags的目录打开你的工程的任意文件,用如下命令查询相关类型引用和关联关系:
代码

Gtags xxxx      查找xxxx的定义
Gtags -r xxxx   查找xxxx的引用
Gtags -s xxxx   查找xxxx出现的地方


它的提示信息很有显,不如cscope更直观,但对大型分析的比较完整。
有时它无法正常分析的类型 可以试试用带-s 的参数的方式找找类型定义。再不行,我就不清楚拉 smile.gif


4、草草的收尾
我使用它们也是一点一点的摸索的没有系统的完整的使用过,也受限于本人的Linux使用经验和工作关系,所以非常简单的使用体会给大家一个参考,希望能有所帮助。更希望后来者能不断补充相关的使用体会。大家都需要交流提高,呵呵。


此文首先发表于LinuxSir.Org,在此仅做收录。
http://www.linuxsir.org/bbs/showthread.php?t=241578

 | 分类: Debian
entry 2006-1-26, 23:54 PM
代码
gpg --keyserver keyring.debian.org --recv-keys xxxx
gpg --armor --export xxxx | apt-key add -
apt-get update

entry 2006-1-11, 14:35 PM
lftp支持本地和远程不同字符集的转换

vi ~/.lftp/rc
增加
代码

set ftp:charset cp936

指定远程是cp936 即gbk的字符集,就不再有以前ftp命令本地和远程不同字符集的困扰了。

 | 分类: GUN
entry 2005-12-20, 17:29 PM
呵呵发现urxvt为什么启动速度那么慢,原来是输入法的配置方式不是Root时,它要自动找相关渲染字体。
只要将输入法方式改为Root就瞬间启动 biggrin.gif


命令参数 -pt Root
资源配置 URxvt.preeditType:Root


终于可以体验速度的快感 !

 | 分类: GUN
entry 2005-12-20, 10:14 AM
一般在工程目录下运行 gtags,则自动生成global需要的引用文件 GPATH GTAGS GRTAGS GSYMS。

如果不使用vim,可以直接用命令查询相关变量和函数的引用

global yourvar

查询被引用的地方:
global -r yourvar

查询symbol
代码
global -s yoursymbol


交叉打印
代码
global -sx yoursymbol
global -rx yourfunc


这里有些我也没有实验的很清楚,以后再补充


在Vim中使用也很清楚

在生成了上述文件的目录执行vim 打开你的工程文件
然后输入 Gtags ma<tab> 它会自动补全为:Gtags main
代码
Gtags -r 查询引用
Gtags -s 查询symbol
Gtags -f 查询相关文件的内部引用


速度还是很快的。

不过我目前是在debian 的sid下使用的,好像sarge的global不完善,而且无法和vim联合使用。

 | 分类: Linux
entry 2005-12-2, 19:49 PM
在linux里,如果你使用utf-8作为默认的字符集设置,那么以下对samba的使用技巧将对你有用。

当samba服务器,为其他客户端提供共享服务:
请修改 /etc/samba/smb.conf文件,在全局设定的地方添加如下内容
代码

#自己的swat系统之类打印错误消息时的字符集
   display charset = utf8
#dos客户端连接时,给他们发送的字符集
   dos charset = cp936
#unix客户端连接时,给他们发送的字符集
   unix charset = utf8


当samba客户端时,要mount其他windows机器的共享资源命令行:

代码
smbmount //win_machine/dir local_mount_point/ -o iocharset=utf8,codepage=cp936

或者
代码
mount -tsmbfs -o iocharset=utf8,codepage=cp936 //win_machine/dir local_mount_point/

注意:
iocharset这里是本地使用的编码方式,
codepage则指定的是对方机器的编码方式。

在(smb)mount其他windows机器时一定不能写错。否则看到的就是乱码。 smile.gif


利用bash 的别名特性我们还可以简单的应用


呵呵,还有个技巧,那么长的参数可以简化 wink.gif

# 简化挂载windows的共享时参数的输入 smile.gif
代码
alias winmnt='mount -tsmbfs -o iocharset=utf8,codepage=cp936'


这样上面那些长长的挂载命令可以简单缩写为:
代码
winmnt -o username=guest //winserver/share /local

不错吧。

下面吗,是有时自己用些不同编码的文本输出时的工具 wink.gif
代码
# 将GBK的编码的输出转换为UTF8
alias g2u='iconv -fcp936 -tutf8'
# 将UTF8的编码的输出转换为GBK
alias u2g='iconv -futf8 -tcp936'

 | 分类: Debian
entry 2005-11-23, 22:03 PM
修改“选项-》字体”的两个字体设置为如下内容。
如果没有安装unifont字体请apt-get install unifont

-gnu-unifont-medium-r-normal-*-*-160-*-*-c-*-iso10646-1

 | 分类: Debian
entry 2005-10-20, 13:50 PM
呵呵,这个经历好象挺顺利 tongue.gif

我安装了sarge并且将默认的taskel的桌面安装完成。
这样系统中的KDE和gnome都比较全。
开始担心升级后可能系统都无法使用,但经历之后发现挺好的。

升级时,由于sid是unstable的版本,所以就先修改/etc/apt/source.list文件,将sarge替换为sid

1、apt-get update;apt-get upgrade的操作告诉我要有200M左右的升级。
2、执行apt-get dist-upgrade命令。这样进行相关软件的版本切换。这下可大了400M左右的升级文件要下载,于是耐心等待。
3、其中碰到一个问题就是升级udev时无法成功,发现它的提示信心告诉我原因就是hotplug无法升级,于是手动apt-get install hotplug,又失败,它又依赖kernel的版本。好吧升级kernel,想想也是毕竟是2.6.8到2.6.12的大跳跃吗。apt-get install linux-image-2.6.12-1-686呵呵,直接下载20M左右的内核安装完成。
注意:其中升级udev失败的话,需要手动删除两个创建了一半的文件/etc/udev/rules.d/zxxxx 文件软链接。
4、继续apt-get dist-upgrade旅程。后面都是默认配置就可以了。
cool.gif


Debian 2.6.12的内核重新支持了tg3的网卡,桌面变的更酷了。真不错! wink.gif

 | 分类: Linux
entry 2005-10-18, 13:47 PM
方案一: ssh 远程连接建立桌面

1、服务器端的sshd的X11转发功能要打开,Debian下修改 /etc/ssh/sshd_config中
X11Forwarding no
改为
X11Forwarding yes

2、在你的linux桌面中ssh -Y user@remotehost方式登陆到远程机器
注意-Y参数可以让你接收X11的数据转发

3、登陆完,并没有完成远程桌面的显示,需要在登陆后运行相关程序才能启动相关X程序。
运行xterm 就可以启动远程的xterm程序了。
运行gnome-about看看是否是你远程机器的上的版本信息 smile.gif

如果运行 startkde
这样就可以在你的桌面上看到远程的X的启动界面了。
试试吧。不过有个问题,就是它会把你桌面启动的程序也显示在远程桌面的的任务栏中。


方案二:
1、在远程机器上按照gdm/kdm等登陆管理器,
2、并且打开他们的XDMCP的功能(当然这个带有安全隐患)
3、我实验的过程中发现,本地机器好象要和远程机器的xdm一致(应该没有这个道理)
4、以gdm为例子,选择行动(Action)中的运行XDMCP管理器,
这样它就可以探测到局域网中可以用的XDMCP的服务器了。

选择后,你就完全进入了远程系统的桌面系统了,和本地没有任何关系了。

cool.gif

4 页 V < 1 2 3 4 >  
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31



我的 Blog 链接