Geany是个比较轻量级的代码编辑器,在一些不怎么需要编辑的代码上,我比较常用它来浏览代码。不过它的 跳转到标记定义(Go to tag definition) 功能有点奇怪,一开始死活不知道怎么用,所以值得拿出来说一下。

问题

其实Geany内置了分析代码文件的能力(记得是移植了ctags的代码进来),当打开代码文件的时候,能够分析文件中的tags(包括类、函数和变量)并在 标记(Symbols) 侧边栏列出来, 也能够在文件内或者已经打开的文件间进行跳转(go to tag definition),但不能跳转到未打开的文件 —— Geany称这类tags为workspace tags

P.S. Geany还有一类Global tags,按不同编程语言提供(比如 /usr/share/geany/php.tags/usr/share/geany/python.tags,另外网站上还提供了一些额外的tags包),文件内容里不包含符号来源信息,所以只能用于自动补全和显示calltip,跟"跳转到标记定义"功能无关)。

解决方法

如何能够实现跳转到未打开的文件呢?在网上搜到如下信息:

This feature (navigating through the source code) has limitations when used alone in Geany. It can only look for definitions in the files being opened. So, to enable it to look for definitions in other closed files in the same folder, you must use this feature inside a certain project created by Geany's built-in Project feature, with the File patterns defined, and combine it with other project plugins that support Generate file list on load.

-- Top Geany features you need to know about

简单地说,方法是: 得定义工程,并启用GProject插件,在工程配置里配置好 source files 文件名匹配模式(比如*.cpp *.c *.h)并勾选上GProject页面的Generate tags for all project files。然后就可以使用了。

解决方法2: 新插件GeanyCtags

虽然用上面的方法已经可以跳转了,但有几个缺点:

  • tags是每次打开工程时动态分析得到的,如果工程比较小(比如只有100个左右的文件)的话,速度还行,但如果工程比较大就悲剧了
  • 由于tags的分析完全是geany自己在玩,用户就没法用ctags的一些配置参数选项来调整或者改进了

于是,在今年年初,Geany开发组就单独做了一个GeanyCtags插件。不过没想到快半年过去了,Geany还是没发布一个新版本,所以要用的朋友就只能自己编译。

安装方法

推荐用Geany自带的 waf 来编译(至少在Windows下只能用这个。虽然 http://www.geany.org/Support/BuildingOnWin32 这里说的是用 mingw32-make -f makefile.win32, 但 geany-plugins 的daily snapshot 包并没有提供 makefile.win32):

    wget -c http://download.geany.org/geany_plugins_git.tar.gz
tar zxf geany_plugins_git.tar.gz
cd geany_plugins_git
./waf configure --enable-plugins=geanyctags,automark
./waf build
sudo make install

然后在Geany的插件管理里面启用 GeanyCtags 插件就可以了。

P.S. 一个好消息是, 这个插件可以在Geany 1.24下编译成功,这样你可以在Geany 1.24里面使用 。但其它一些新插件不一定能行,因为可能用到了Geany主程序的新变动,比如 ProjectOrganizer 插件。

使用方法

0.. 当然,首先得安装Exuberant Ctags

1.. 在项目属性中确保 File patterns 已经设置(比如设为 *.rb *.rake)

2.. 点击菜单 Project -> Generate tags 生成tags文件,Geany会在底部的信息栏显示生成tags文件的命令和结果

3.. 在符号(函数名、变量名)上点击右键,可以看到顶部新增了两个菜单项目: Find Tag Definition (GeanyCtags)Find Tag Declartion (GeanyCtags)

4.. 主菜单里面的 Project -> Find tag 可以用来跳转到任意tag,自己输入就是了

补充说明

  • GeanyCtags生成Tags文件时会在信息栏显示生成tags文件的命令和结果:

find . -not -path '/.' ( -name ".c" -o -name ".h" ) | ctags --totals --fields=fKsSt --extra=-fq --c-kinds=+p --sort=foldcase --excmd=number -L - -f /users/bamanzi/farm/geany_plugins_git/geany_plugins.tags (in directory: /users/bamanzi/farm/geany_plugins_git)

409 files, 117412 lines (3410 kB) scanned in 0.2 seconds (17947 kB/s)

10250 tags added to tag file

10250 tags sorted in 0.01 seconds

  • 从上面的信息可以看出,生成的tags文件跟工程文件在同一个目录,不过文件名并不是 tags ,而是 prjname.tags
  • 从上面的信息可以看出,tags文件是调用ctags命令生成的,所以格式上是标准的ctags输出。如果你有特殊的配置选项(比如需要增加对vbs的支持),你知道怎么下手了吧

参考:

Geany的"跳转到标记定义“功能如何使用的更多相关文章

  1. Geany 编辑器打开 高亮所选单词 功能

    Geany 编辑器打开 高亮所选单词 功能 在Ubuntu 系统的Software Center 工具中,搜索到geany, 下方有个 Miscellanous Plugins for Geany, ...

  2. vscode跳转到函数定义处

    需要安装对应语言的插件,帮助-欢迎使用,安装javascript, php php还需要安装php7, 到官网https://windows.php.net/download#php-7.2 下载解压 ...

  3. MVVM页面跳转 技巧性标记

    刚学MVVM 百度了很多概念性的东西 也参考了网上的例子 基本有了了解 但是我发现 我做了一个登录页面以后 我跳转咋办呢? VM里面咋做跳转? 问了一下其他的群友得到了一些启发.感谢“上海*松” 我仅 ...

  4. String-自定义功能

    <script> /* *发现js中的String对象有限,想要对字符串操作的其他功能. *比如:去除字符串两端的空格.这时只能自.定义 */ //去除字符串两端的空格 function ...

  5. 利用.Net自带的票据完成BaseController的未登陆自动跳转到登陆页功能

    一:定义票据中要记录的字段类 /// <summary> /// 用户存在于浏览器端的身份票据(非持久) /// 非持久 FormsAuthenticationTicket 的isPers ...

  6. 【Java学习笔记】<集合框架>定义功能去除ArrayList中的重复元素

    import java.util.ArrayList; import java.util.Iterator; import cn.itcast.p1.bean.Person; public class ...

  7. Java基础之一组有用的类——为标记定义自己的模式(ScanString)

    控制台程序. Scanner类提供了一种方式,用来指定如何识别标记.这需要使用next()方法的两个重载版本.其中的一个版本接受Pattern类型的参数.另一个版本接受String类型的参数,用来指定 ...

  8. Activity 跳转动画 全局定义

    定义application 的 theme <application android:allowBackup="true" android:icon="@drawa ...

  9. vim的翻页、跳转到某一行功能

    第一种方式 :$ 跳转到最后一行 :1 跳转到第一行 :n 跳转到第n行 第二种方式 shift+g 跳转到最后一行 gg 跳转到第一行 command+上下箭头

随机推荐

  1. NumPy学习(让数据处理变简单)

    NumPy学习(一) NumPy数组创建 NumPy数组属性 NumPy数学算术与算数运算 NumPy数组创建 NumPy 中定义的最重要的对象是称为 ndarray 的 N 维数组类型. 它描述相同 ...

  2. 使用 Spring Boot 搭建一套增删改查(无多余代码)

    前言 这是我学习 Spring Boot 的第三篇文章,终于可以见到效果了.错过的同学可以看看之前的文章 我们为什么要学习 Spring Boot Spring Boot 入门详细分析 在入门的基础上 ...

  3. SQL sysobjects 表 详解

    sysobjects 表 在数据库内创建的每个对象(约束.默认值.日志.规则.存储过程等)在表中占一行.只有在 tempdb 内,每个临时对象才在该表中占一行. 列名 数据类型 描述 name sys ...

  4. iOS 11开发教程(二十二)iOS11应用视图实现按钮的响应(2)

    iOS 11开发教程(二十二)iOS11应用视图实现按钮的响应(2) 此时,当用户轻拍按钮后,一个叫tapButton()的方法就会被触发. 注意:以上这一种方式是动作声明和关联一起进行的,还有一种先 ...

  5. QT-1-环境搭建QT5.4.1&MinGW4.9.1

    1.最近在电脑上尝试了搭建QT的环境,原本准备利用VS2013+QT5.51环境,虽然安装很容易但是部署程序时,我是没能做到部署到其他机器,原因还是DLL搞不定: 2.参考友善之臂的MiniTools ...

  6. 每日踩坑 2018-01-09 WebAPI会如何面对 枚举 参数?

    这一块确实有些疑问, 众所周知 枚举参数我们传送枚举值所对应的数字就行了, 以前 Leader 跟我讲过,枚举参数会将字符串值也能够成功转化,而且枚举值定义之外的数字也可以被转为枚举值. 主要的问题在 ...

  7. 牛客国庆集训派对Day4 Solution

    A    深度学习 puts(n) #include <bits/stdc++.h> using namespace std; int main() { double n; while ( ...

  8. Chrome 浏览器的Secure Shell插件

    说起putty,windows下面的程序猿个个都是爱恨交加. 不小心发现一个宝贝,Chrome 浏览器的Secure Shell插件. 这是Google官方推出的插件,试用下来,putty完全可以下岗 ...

  9. APP支付宝支付接入

    1.app支付简介 买家可以在手机,掌上电脑等无线设备的应用程序内,通过支付宝(支付宝app或网页版支付宝)付款购买商品,且资金实行实时到账. 2.申请条件 1.申请前必须拥有经过实名认证的支付宝账户 ...

  10. C++.Linux下redis编程:error while loading shared libraries: libhiredis.so.0.13

    编译 sudo gcc -o sltest01 sltest01.c -L/usr/local/lib/ -lhiredis 运行 sudo ./sltest01 编译成功后运行报错信息: ./slt ...