Posts Tagged ‘vim’

如何在Vim+Ctags+Taglist应用中添加自定义语言

八月 24th, 2009

Vim+Ctags+Taglist的应用是一个非常方便的解决方案,网络上关于这样的简单介绍数不胜数,只要愿意不妨搜索一下即可。但是有一个问题是大多数文章没有阐明的,那就是如何添加原本不被Ctags和taglist所支持的语言呢?花了点时间,找到了解决,姑且备忘于下,希望利人利己。

本文均以SystemVerilog为例说明:

Ctags中添加新的语言

ctags的配置文件其实在 ~/.ctags中,打开该文件,添加如下代码[1. 从某论坛上看到,做了一定修改,用以支持extern,static等前缀]:

–langdef=systemverilog
–langmap=systemverilog:.sv.svh.svi
–regex-systemverilog=/^[ \t]*(virtual)?[ \t]*class[ \t]*([a-zA-Z_0-9]+)/\2/c,class/
–regex-systemverilog=/^[ \t]*(extern)?[ \t]*(static)?[ \t]*(virtual)?[ \t]*task[ \t]*.*[ \t]+([a-zA-Z_0-9]*::)?([a-zA-Z_0-9]+)[ \t]*[(;]/\5/t,task/
–regex-systemverilog=/^[ \t]*(extern)?[ \t]*(static)?[ \t]*(virtual)?[ \t]*function[ \t]*.*[ \t]+([a-zA-Z_0-9]*::)?([a-zA-Z_0-9]+)[ \t]*[(;]/\5/f,function/
–regex-systemverilog=/^[ \t]*module[ \t]*([a-zA-Z_0-9]+)/\1/m,module/
–regex-systemverilog=/^[ \t]*program[ \t]*([a-zA-Z_0-9]+)/\1/p,program/
–regex-systemverilog=/^[ \t]*interface[ \t]*([a-zA-Z_0-9]+)/\1/i,interface/
–regex-systemverilog=/^[ \t]*package[ \t]*([a-zA-Z_0-9]+)/\1/k,package/
–regex-systemverilog=/^[ \t]*typedef[ \t]+.*[ \t]+([a-zA-Z_0-9]+)[ \t]*;/\1/e,typedef/
–systemverilog-kinds=+ctfmpie

这里从代码可以读出无非是依次定义了新的语言种类,指明了文件后缀,然后使用正则匹配来抓出你希望的关键字,熟悉正则表达式的人自然一读就懂,可以自己扩展,不熟悉的人,那就照copy吧。

Taglist中添加语言种类

打开taglist的文件,例如 ~/.vim/plugin/taglist.vim, 添加下面的内容:

” systemverilog language
let s:tlist_def_systemverilog_settings= ‘systemverilog;m:module;c:class;’ .
          \ ‘t:task;p:program;f:function;i:interface;e:typedef’

语句也很简单,就是添加了一类可以被Taglist识别的语法种类,同时规定了那些部分是需要显示在tag list当中的;

Vim当中添加File type

似乎有点本末倒置了,呵呵,其实最开始的一点就是要让vim也能够识别出systemverilog的文件,那么请打开~/.vim/filetype.vim,加入下面这一行:

au BufNewFile,BufRead *.sv,*.svh    setf systemverilog

同时不要忘记’set filetype on’来保证vim会去识别语法种类(当然,这个其实也是使用语法高亮的基本要求)。

步骤

使用的时候,无非就是按照:
1. ctags -R * 来生成tag文件;
2. vim打开文件,并且可以适当设置’ set tags=xxxxxx’ 来load文件;
3. 用:Tlist打开tag侧边栏,其余都可以按照网上教程操作。

vimperator使用精要

七月 27th, 2009


vimperator是一个极其变态强大的firefox附加组件。有了它之后,整个firefox的操作,几乎都被颠覆性的改变成了vim的习惯——作为深度的vim/gvim使用者来说,则可以称得上是得心应手。更是省却了好些Addon的安装。

最明显的改变莫过于:

1. 界面极度简化,缺省情况下,连菜单栏和地址栏全部都消失了,这样用户也不用费尽心思去安装诸如CompactMenu之类的东西来隐藏菜单栏了;而且这种情况下,基本上主题也失去了意义,default的主题兼容性就绝佳了;

2. 很多组合键在这种情况下具备的是VIM中的意义,因而原有的反而不能用了,对一般用户最明显的就是复制粘贴的组合键中,Ctrl-C被用于了Esc的意义;

3. 没有了地址栏和搜索栏,如何实现原有的功能呢?

这些细节,可能让人无所适从,总有人会想:这个以前的功能XXXX,我该如何在vimperator中实现呢?

虽然在帮助文档里,可以说写得非常清楚,但是一则是英文,二则由于是分了好些类阐述,可能一时之间还无法找到。不如我自己整理一下,方便使用时查询。

基本知识

和vim一样,移动是第一步,在页面内:

h,j,k,l:左,下,上,右移动;
ctrl-d,ctrl-u:下半页,上半页移动;
ctrl-f,ctrl-b:下页,上页;
gg,G:页面顶,页面底;
m[character], `[character]:做标记,跳转到标记。

应该说是非常好用的。

输入命令的方式,在没有输入的情况下,按照VIM习惯,用’:'来进入命令栏;否则,用Esc键或者是ctrl-c来离开文字输入框,再输入。

vimperator是支持自动完成的,方法当然就是输入部分之后,用Tab键来切换。

配置文件

和VIM一样,很多设置,是可以放在初始配置文件的,该文件的位置是:

C:\Documents and Settings\[username]\_vimperatorrc

可以使用任何一种编辑器来修改它,并且写入配置内容。

如何进行地址栏和搜索栏操作

没有了地址栏,首先就是应该如何才能使用地址栏输入地址呢?

很简单,vimperator是使用’o(pen)’作为地址栏打开的命令的,你只需要在命令模式下(即,非文字输入模式)使用o,例如,

o www.google.cn

而’t(ab)‘和o的作用一样,唯一区别在于是用新标签打开。而且t!则是在后台打开不激活。

当然,也支持自动完成,这时需要预先配置一下,自动完成的内容,有几种选择,而我这里强烈推荐的是直接enable一下Firefox的Awesome Bar就可以了,请在配置文件中加入:

set complete=l

这样,输入o之后,空格,再输入部分网址或者名称,然后,用Tab键来补全和选择自己想访问的内容,这和平时的地址栏一模一样了。
搜索栏是另外一个问题,这里就要和Firefox的搜索快捷字结合使用了。

首先需要打开搜索栏管理,为每个搜索引擎分配一个关键字,例如’g’ for google, ‘b’ for baidu, ‘t’ for Taobao;
然后,只要输入 o <关键字> <搜索内容> 回车就可以了。
例如, o g vimperator,就是在google当中搜索vimperator,这样比以前还方便。

同时,隐藏的地址栏还带来了另外一个问题,那就是如何得到当前的地址?特别是想复制它的时候?很简单,直接按y,这时的页面地址就复制进入了剪贴板。

还有一个可能有人需要的特性,那就是以前的Firefox地址栏会自动发现Feed,并且显示在地址栏。那么现在怎么办?稍微没那么直接:

用g (两下按键,第一下按g,第二下按ctrl-g),本页面的详细信息就会列出来,包括页面内含有的RSS链接信息,非常清楚。

标签页操作

我个人是非常喜欢使用VIM的Buffer操作的,简单快捷,精准。

而vimperator则是非常忠实的再现了这一特性,唯一不同的就是,这里的Buffer就相当于Tab。

那么列举如下:

:ls – 列出当前的tab清单;
:b[number]-跳到第[number]号的tab;
:bd-关闭第号的tab;
:tabo-关闭其他所有的tab。

而一般常用的前进后退,用ba(ck) 和fw就可以了。

停止和刷新则对应于st(op)和r/R (R相当于ctrl-F5)。

重新打开关闭的页面,使用u(可以配合次数使用)。

HINT模式

这个模式算是用于极度的命令行爱好者或者鼠标坏掉的用户,hint模式就是为当前页面所有的链接标上序号,然后只要敲击键盘选择对应的链接即可,你的手完全不需要离开键盘去摸鼠标——我个人很喜欢这种方式。

最基本的用法就是在页面按’f'/’F',然后根据显示的数字来选择一下,链接就打开了。f会原页面打开,F则会在新页面打开。

当然,还可以用‘;{mode}{hint}’来实现更多复杂的操作,但是对我来讲前面的就已经足够了,细节可以参考帮助文档。

其他杂项

:help – 查看帮助文件

:addons-打开附加组件窗口

:emenu <内容>-打开相关内容的菜单选项,例如 emenu 工具.选项…,支持自动补齐,勤用tab键

:Ctrl-a, Ctrl-x,-查看当前页面的最后一位数字加一或者减一之后的页面(用于快捷翻页极佳)

搜索方法和VIM中一样’/‘即可,然后可以用n,N在各个高亮结果中跳跃,遇到了链接直接回车也能跳转,非常方便。

y/Y-选择好文字之后,复制到剪贴板,小写仅用于vim内,大写则是系统剪贴板。[1. 也可以去主页下载plugin来remap按键,使之符合windows习惯]

用bmark来快速添加收藏夹,用a则是出现一些备选内容,可以修改名称和添加tag;

脚本推荐

和VIM一样,vimperator也支持插件和主题,有兴趣不妨到主页去看看,虽然目前的colortheme只有一个,但是还是很有几个不错的插件的,我目前就是用了下面的两个:

Remap copy/cut/paste keys for Windows : 重新rmap按键,使复制粘贴撤销的按键符合windows习惯;

Search Marker clone : 整合了Search Marker这个附加组件,能够在Scroll bar的位置高亮出当前页面搜索结果所在的位置,一目了然,这个是极其实用的插件,用VIM的正则搜索指令配合这个Marker,绝对完美,就算光冲着这个,vimperator都有安装的价值。

总结

总而言之,使用了这个组件之后,理论上你几乎可以拔掉鼠标来完全无障碍的上网了,Firefox摇身一变成了可以上网的Gvim;只要再装上一个All-in-one gesture,以后无论是键盘坏了,还是鼠标坏了,你都可以毫无问题的继续上网浏览,实在是神奇的不得了——当然,如果鼠标键盘都坏了,那似乎得再想点别的办法了。

活用VIM的Mark及跳转——兼论怎样读TXT小说

十二月 11th, 2008

近拿到了一堆,一大堆TXT的小说,光靠notepad是不现实的,于是想起可以用GVIM来读小说。仔细归纳了一些要点,甚至还学了一些自己都不熟悉的东西,发现VIM竟然是这样理想的一个TXT阅读器。

1. 一个舒服的,喜欢的配色方案作为自己的阅读背景:

    作为TXT阅读器,能够自由搭配的前景背景色是很重要的功能点,这个几个老牌的阅读器做的都不错,比如Readbook;
对于VIM来说,这个当然不成问题了,在_vimrc里面(Edit-Startup Settings)设置一下就ok了,加入:

Read more »