自己写emacs/gvim插件:自动识别并打开RTL filelist光标所在行的文件

Posted ExASIC

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自己写emacs/gvim插件:自动识别并打开RTL filelist光标所在行的文件相关的知识,希望对你有一定的参考价值。

假设我们有一个verilog的filelist,内容如下。我们希望把光标放在第3行可以很方便的打开b.v,当把光标放在第4行也可以很方便的打开${c_path}/c.v(其中${c_path}是系统环境变量)。


1 #filelist

2 a.v

3 b.v

4 ${c_path}/c.v


先想想如果自己来实现大概是个什么样的思路。。。

  1. 获取光标所在行的内容

  2. 对内容进行简单处理,比如去除前后的空格

  3. 如果其中包括环境变量,则需要做替换

  4. 把处理完的字符串当作一个参数,传递给打开文件的函数


emacs的解决方案  


在~/.emacs文件中增加如下elisp函数:


 1 (defun fastopen ()

 2     "get current line as filename and open it"

 3     (interactive)

 4     (let* ((p1 (line-beginning-position))

 5             (p2 (line-end-position))

 6             (myfilename (buffer-substring-no-properties p1 p2)))

 7         (find-file (substitute-env-vars myfilename))))

 8

 9 (global-set-key [f6] 'fastopen)


其中,

第1行,定义一个函数fastopen,输入参数为空

第2行,一段描述,文档也是代码的一部分,不可省略

第3行,函数的互交模式,可以用M-x来调用

第4行,取得光标所在行行头相对与全文的偏移量

第5行,取得光标所在行行尾相对与全文的偏移量

第6行,取出光标所在行的内容

第7行,替换环境变量,然后打开文件

第9行,把函数绑定快捷键F6,一键打开


使用方法:emacs filelist,移动光标到文件所在行,按F6即可打开文件。或者M-x fastopen手动调用函数。


缺点:只能把一整行当作文件名。如果根据前后空格或其它分隔符来更智能地断句会更好一些。


感兴趣的同学可以参考下面的资料来实现一个更智能的解决方案:

find-file-at-point

http://ergoemacs.org/emacs/emacs_open_file_path_fast.html

https://stackoverflow.com/questions/259354/goto-file-in-emacs


gvim的解决方案  


gvim有自带的命令来打开光标处的文件:

gf               在当前窗口打开

ctrl-w f       在新窗口中打开

ctrl-w gf     在新tab中打开

(gf是goto file的简写)


当路径中包括环境变量时,也同样可以用gf来打开。有时识别光标处文件名不太准确时,可以先用鼠标选中路径,然后再按gf。这时gvim只会根据选择的文本来打开文件。


更多细节请参考下面的链接(请复制到浏览器查看)。

http://vim.wikia.com/wiki/Open_file_under_cursor



广告时间


欢迎关注ExASIC


分享数字集成电路设计中的经验和方法

Sharing makes work smoother



以上是关于自己写emacs/gvim插件:自动识别并打开RTL filelist光标所在行的文件的主要内容,如果未能解决你的问题,请参考以下文章

写好的Markdown怎么生成HTML

分享一个自己写的简单的自动更新插件

浏览器中嵌入自己写的Javascript脚本

如何写一个Andorid下自动更新的插件

C++中怎样把两个升序数组合并

#Python恶搞#用Python写一个自动关机程序