编程知识 购物 网址 新闻 笑话 | 软件 日历 阅读 图书馆 China
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
vbs/VBScript DOS/BAT hta htc python perl 游戏相关 VBA 远程脚本 ColdFusion ruby专题 autoit seraphzone PowerShell linux shell Lua Golang Erlang 其它教程 CSS/HTML/Xhtml html5 CSS XML/XSLT Dreamweaver教程 经验交流
站长资讯 .NET新手 ASP.NET C# WinForm Silverlight WCF CLR WPF XNA VisualStudio ASP.NET-MVC .NET控件开发 EntityFramework WinRT-Metro Java C++ PHP Delphi Python Ruby C语言 Erlang Go Swift Scala R语言 Verilog 其它语言 架构设计 面向对象 设计模式 领域驱动 Html-Css JavaScript jQuery HTML5 SharePoint GIS技术 SAP OracleERP DynamicsCRM K2 BPM 信息安全 企业信息 Android开发 iOS开发 WindowsPhone WindowsMobile 其他手机 敏捷开发 项目管理 软件工程 SQLServer Oracle MySQL NoSQL 其它数据库 Windows7 WindowsServer Linux
   -> 其它语言 -> Godef 插件无法跳转问题 -> 正文阅读

[其它语言]Godef 插件无法跳转问题

安装完 Godef 插件后,有些文件的代码跳转总是报下面的错误
=================[Godef]Begin=================
[Godef]INFO: using godef: C:\gopath\bin\godef.exe
[Godef]INFO: selcet_begin: 636 offset: 798
[Godef]INFO: spawning: C:\gopath\bin\godef.exe -f D:\development\go\go-example\src\example\test\net\httpserver\form\login.go -o 798
[Godef]ERROR: no definition found: b'godef: no identifier found\n'
=================[Godef] End =================
到底是 Godef.py 代码中的输入参数 offset 错了呢?还是  godef.exe 解析出错了呢?我琢磨了下,发现 Godef.py 中打印的 selcet_begin 就是 sublime 提供的光标所在的字符位置(一个中文字符算一个字符) - 在 sublime 用鼠标从文件起始位置选中拖到刚才光标的位置,所选中的区域总共的字符个数在左下脚状态栏中会显示出来。而 offset 是上面区域字符串的字节长度 (注意是字节不是字符,一个中文字符有多个字节)。下面是 Godef.py 计算 offset 的代码。我就纳闷了上面打印的 offset > selcet_begin ,计算出来的应该就是字节,没有问题啊!而且 godef.exe 要求的参数肯定也是按字节计算的,因为有些带有中文注释的代码也是可以正常跳转的!
view = self.window.active_view()
        filename = view.file_name()
        select = view.sel()[0]
        select_begin = select.begin()
        select_before = sublime.Region(0, select_begin)
        string_before = view.substr(select_before)
        string_before.encode("utf-8")           
        buffer_before = bytearray(string_before, encoding="utf8")
        offset = len(buffer_before)
        print("[Godef]INFO: selcet_begin: %s offset: %s" %
              (str(select_begin), str(offset)))
我使用notepad 打开该文件,发现用鼠标从文件起始位置选中拖到刚才光标的位置,notepad 状态栏显示的选中长度居然比上面的 offset 大,我再用这个值在命令行中执行 godef.exe ...\login.go -o xxx 命令,发现正确输出了要跳转的文件名和光标应所处的位置。看来是 Godef.py 插件提供的 offset 错了导致的!
为什么会错,我又细心的分析起这段文本,终于发现 notepad 显示这段文本的换行符是 Dos\Windows (\r\n),意识到可能是换行符的问题,我把换行符转为 unix 后,就可以正常跳转了!也就是说 Godef.py 计算出的 offset 每一行少计算了一个 \r 字符!
我尝试修改 Godef.py 代码,但是发现这不是 Godef.py 的错,可以肯定是 sublime text 提供的这个方法 view.substr() 方法把 windows 的换行符转为了 unix 的换行符!我查了一下 sublime text 的 api ,寄希望于 Region 提供的一个 size() 方法,使用下面的代码打印后发现返回的是字符的个数,看来此路不通。
         print("[Godef]INFO: size:%d" % select_before.size())
好吧,那就把 windows 换行符转换为 unix 换行符吧。好在 sublime 已经为我们提供了该功能,我修改了下 sublime text 下面的配置。在状态栏右下脚就出现了换行符转换的功能按钮,点击后转换到 unix 即可!
    "show_line_endings": true,
    "default_line_ending": "unix"
  其它语言 最新文章
markdown入门杂记
Oracle数据库的安装
PHP 中 SESSION 反序列化机制
开发Maven插件
bat脚本:windows下一键启动zookeeper+kafka
3.指针
java分页三个类 PageBean ResponseUtil Str
c语言函数传参详解
自动扫描和暴力破解
汇编语言之寻址方式
上一篇文章      下一篇文章      查看所有文章
加:2016-01-10 19:03:34  更:2017-05-16 02:00:35 
 
360图书馆 软件开发资料 购物精选 新闻资讯 Chinese Culture 三丰软件 开发 中国文化 阅读网 日历 万年历 2019年10日历
2019-10-19 21:19:00
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  编程知识