自己写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
先想想如果自己来实现大概是个什么样的思路。。。
获取光标所在行的内容
对内容进行简单处理,比如去除前后的空格
如果其中包括环境变量,则需要做替换
把处理完的字符串当作一个参数,传递给打开文件的函数
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光标所在行的文件的主要内容,如果未能解决你的问题,请参考以下文章