VIM 编写 code 很强大的插件

看到一些VIM 编写代码的强大的插件:



 function parameter complete, code snippets, and much more

http://www.vim.org/scripts/script.php?script_id=1764  



echofunc.vim : Echo the function declaration in the command line for C/C++

http://www.vim.org/scripts/script.php?script_id=1735



让你的vim能够查看函数列表

http://www.fwolf.com/blog/post/253

授权方式:署名,非商业用途,保持一致,转载时请务必以超链接(http://www.fwolf.com/blog/post/253)的形式标明文章原始出处和作者信息及本声明。

图形界面下的很多编辑软件都可以列出当前编辑文件中的函数列表,以便在编辑的时候能够快速的跳转。vim虽然没有直接提供这种功能,但配合适当的工具和设定,可以完美的实现!

首先还是安装,vim不用装了,ubuntu中自带,用到的ctags需要自己安装一下,不要用旧的那个ctags,新的叫Exuberant Ctags

apt安装即可:apt-get install exuberant-ctags。

然后按照vim.org上的安装说明,下载taglist_42.zip,解压到home目录下的.vim子目录中:

~/.vim$ unzip /home/fwolf/taglist_42.zip 
Archive: /home/fwolf/taglist_42.zip 
inflating: plugin/taglist.vim 
inflating: doc/taglist.txt

进入$HOME/.vim/doc目录,打开vim,运行“:helptags .”命令,注意后面的点不要拉了,这是为了生成ctags帮助文件的索引,然后才能正常使用帮助。(原来vi帮助中的ctrl+]进入链接、ctrl+T返回也是这么来的)

现在,再启动vim,tags功能就可以用了: vim中使用ctags的效果截图

大概用法: 在使用vim的时候,使用:TlistToggle命令切换函数列表的开、关。 

按住ctrl键然后按两下w键在正常编辑区域和tags区域中切换。 

在tags区域中,把光标移动到变量、函数名称上,然后敲回车,就会自动在正常编辑区域中定位到指定内容了,很方便的。

常用的几项.vimrc设置:

“禁止自动改变当前Vim窗口的大小
 let Tlist_Inc_Winwidth=0 
“把方法列表放在屏幕的右侧
 let Tlist_Use_Right_Window=1 
“让当前不被编辑的文件的方法列表自动折叠起来, 这样可以节约一些屏幕空间
 let Tlist_File_Fold_Auto_Close=1


Vim插件-标签列表窗口插件taglist

TagList插件,是一款基于ctags,在vim代码窗口旁以分隔窗口形式显示当前文件的代码结构概览,增加代码浏览的便利程度的Vim插件。官方网址:Tag List,当前最新可用版本为v4.5.

1. 安装

①下载taglist_45.zip

②解压
将taglist.zip文件解压至~/.vim文件夹下(压缩包中包含有插件文件plugin/taglist.vim和帮助文件doc/taglist.txt)。

③生成帮助
命令行中切换当前路径至~/.vim/doc文件夹,进入vim后执行命令

:helptags .

也可以在任意文件夹下,进入vim后执行命令

:helptags ~/.vim/doc

④环境检查

taglist插件依赖于ctags及其所生成的标签文件,如果用户路径设置中未包含ctags命令所在路径,可以在vim设置文件中配置Tlist_Ctags_Cmd变量,指向ctags命令(而非ctags命令所在路径)。

检查Vim是否打开了filetype on选项。

如Vim所在终端/控制台不支持改变窗口宽度,在Vim配置文件中配置变量Tlist_Inc_Winwidth为0.

⑤重启Vim

2. 标签列表窗口

标签列表窗口中以目录树的形式组织各级标签:文档作为第一级,类别组标签(如宏标签组/函数标签组/变量标签组等)作为第二级,而具体的对象标签则为第三级(叶子结点)。

如图所示:

Taglist效果示意图

3. 基本使用

在Vim中加载代码文件后,可以使用以下命令控制taglist

  • :TlistOpen 打开并将输入焦点至于标签列表窗口
  • :TlistClose 关闭标签列表窗口
  • :TlistToggle 切换标签列表窗口状态(打开←→关闭),标签列表窗口是否获得焦点取决于其他配置
  • ctl-w + w 或ctl-w + 方向键 窗口切换(taglist本质上是一个vim分隔窗口,因此可以使用ctl-w系列快捷键对窗口进行切换操作)
  • 使用鼠标单击切换当前窗口,或在标签列表窗口某标签上双击使代码窗口内窗跳转至标签定义
  • 标签列表窗口内,当光标停留在某个标签之上时,回车键可切换代码窗口内容至标签定义; 'o',在分隔窗口中显示;'t',在vim新标签窗口中显示

4. 选项控制变量

在Vim配置文件中,可通过"let"语句设定以下变量控制taglist:

  • Tlist_GainFocus_On_ToggleOpen : 为1则使用TlistToggle打开标签列表窗口后会获焦点至于标签列表窗口;为0则taglist打开后焦点仍保持在代码窗口
  • Tlist_Auto_Open : 为1则Vim启动后自动打开标签列表窗口
  • Tlist_Close_On_Select : 选择标签或文件后是否自动关闭标签列表窗口
  • Tlist_Exit_OnlyWindow : Vim当前仅打开标签列表窗口时,是否自动退出Vim
  • Tlist_Use_SingleClick : 是否将默认双击标答打开定义的方式更改为单击后打开标签
  • Tlist_Auto_Highlight_Tag : 是否高亮显示当前标签。命令":TlistHighlightTag"也可达到同样效果
  • Tlist_Highlight_Tag_On_BufEnter : 默认情况下,Vim打开/切换至一个新的缓冲区/文件后,标签列表窗口会自动将当前代码窗口对应的标签高亮显示。TlistHighlight_Tag_On_BufEnter置为0可禁止以上行为
  • Tlist_Process_File_Always : 为1则即使标签列表窗口未打开,taglist仍然会在后台处理vim所打开文件的标签
  • Tlist_Auto_Update : 打开/禁止taglist在打开新文件或修改文件后自动更新标签。禁止自动更新后,taglist仅在使用:TlistUpdate,:TlistAddFiles,或:TlistAddFilesRecursive命令后更新标签
  • Tlist_File_Fold_Auto_Close : 自动关闭标签列表窗口中非激活文件/缓冲区所在文档标签树,仅显示当前缓冲区标签树
  • Tlist_Sort_Type : 标签排序依据,可以为"name"(按标签名排序)或"order"(按标签在文件中出现的顺序,默认值)
  • Tlist_Use_Horiz_Window : 标签列表窗口使用水平分割样式
  • Tlist_Use_Right_Window : 标签列表窗口显示在右侧(使用垂直分割样式时)
  • Tlist_WinWidth : 设定水平分割时标签列表窗口的宽度
  • Tlist_WinHeight : 设定垂直分割时标签列表窗口的高度
  • Tlist_Inc_Winwidth : 显示标签列表窗口时允许/禁止扩展Vim窗口宽度
  • Tlist_Compact_Format : 减少标签列表窗口中的空白行
  • Tlist_Enable_Fold_Column : 是否不显示Vim目录列
  • Tlist_Display_Prototype : 是否在标签列表窗口用标签原型替代标签名
  • Tlist_Display_Tag_Scope : 在标签名后是否显示标签有效范围
  • Tlist_Show_Menu : 在图型界面Vim中,是否以下拉菜单方式显示当前文件中的标签
  • Tlist_Max_Submenu_Item : 子菜单项上限值。如子菜单项超出此上限将会被分隔到多个子菜单中。缺省值为25
  • Tlist_Max_Tag_Length : 标签菜单中标签长度上限

5. 标签列表窗口快捷键

taglist快捷键:

  • <CR> : 代码窗口跳转到标签列表窗口中光标所在标签定义处
  • o : 在新建代码窗口中跳转到标签列表窗口中光标所在标签定义处
  • P : 跳转至上一个窗口的标签处
  • p : 代码窗口中内容跳转至标签定义处,光标保持在标签列表窗口中
  • t : 在Vim新标签窗口中跳转至标签定义处。如文件已经在Vim标签窗口中打开,则跳转至此标签窗口
  • Ctrl-t : 在Vim新标签窗口处跳转至标签定义处
  •  : 显示光标当前所在标签原型。对文件标签,显示文件的全路径名,文件类型和标签数量。对标签类型(指如variable/function等类别),显示标签类型和拥有标签的数量;对函数/变量等普通标签,显示其定义的原型
  • u : 更新标签列表窗口中的标签信息
  • s : 切换标签排序类型(按名称序或出现顺序)
  • d : 移除当前标签所在文件的所有标签
  • x : 扩展/收缩标签列表窗口
  • + : 展开折叠节点*
  • - : 折叠结点*
  • * : 展开所有结点
  • = : 折叠所有节点
  • [[ : 跳转至上一个文件标签的头部
  • <Backspace> : 跳转至上一个文件标签头部
  • ]] : 跳转至下一个文件标签头部
  • <Tab> : 跳转至下一个文件标签头部
  • q : 关闭标签列表窗口
  • F1 : 显示帮助**

*ubuntu10.10+Vim7.2+Taglist4.5环境下,'+'似乎也是将节点折叠起来,而非展开。左右方向键'←'和'→'可以展开节点。

**同上环境中,F1给出的是Gnome帮助手册而非Taglist帮助。

6. taglist命令

taglist在Vim中提供了以下扩展命令:

  • :TlistAddFiles {files(s)} [file(s)...] 添加一或多个指定文件(的标签项)到标签列表窗口中。文件名表达式中可使用通配符(*);如文件名中带有空格,需要使用反斜杠对空格进行转义("\ ")
  • :TlistAddFilesRecursive {directory} [{pattern}] 遍历指定路径{directory},将与模式{pattern}相匹配的文件加入标签列表窗口。如未指定pattern,则使用缺省值'*'。如路径中包含空格,需使用反斜杠'\'转义("\ ")
  • :TlistClose 关闭标签列表窗口
  • :TlistDebug [filename] 记录taglist插件的调试信息。如指定了filename,则调试信息将被写入此指定文件(如文件已存在,内容将被覆盖);如未指定filename,则调试信息写入脚本的局部变量中
  • :TlistLock 锁定标签列表,并且不处理新打开的文件
  • :TlistMessage 仅当调试信息写入脚本局部变量时有效,显示记录的调试信息
  • :TlistOpen 打开并跳转至标签列表窗口
  • :TlistSessionSave {filename} 将当前打开文件及其标签信息写入指定文件
  • :TlistSessionLoad {filename} 从指定文件载入所保存的会话信息
  • :TlistShowPrototype [filename] [linenumber] 显示指定文件中指定代码行或之前的标签的原型。如未指定文件名/行号,则使用当前文件名/当前行号
  • :TlistShowTag [filename] [linenumber] 显示指定文件中指定代码行或之前标签名称。如未指定文件名/行号,则使用当前文件名/当前行号
  • :TlistHighlightTag 加亮显示标签窗口中的当前标签
  • :TlistToggle 在打开和关闭状态间切换标签窗口的状态。标签窗口切换至打开状态后仍然光标保持在代码窗口中
  • :TlistUndebug 停止记录taglist插件调试信息
  • :TlistUnlock 解锁标签列表,并处理新打开的文件
  • :TlistUpdate 更新当前缓冲区的标签信息

7. 全局函数

taglist插件为Vim提供了一些全局函数,可供其他插件使用:

  • Tlist_Update_File_Tags({filename}, {filetype}) 以指定文件类型更新指定文件的标签信息。如taglist插件此前未处理过指定文件,则会调用ctags对文件进行分析
  • Tlist_Get_Tag_Prototype_By_Line([{filename}, {linenumber}]) 获取指定文件中指定行号或之前标签的原型信息。如未指定文件名/行号,则使用当前缓冲区对应文件/当前行号
  • Tlist_Get_Tagname_By_Line ([{filename}, {linenumber}]) 获取指定文件中指定行号或之前标签的名称信息。如未指定文件名/行号,则使用当前缓冲区对应文件/当前行号
  • Tlist_Set_App({appname}) 设置正在控制taglist的插件名称

8. 其他

更多帮助,可参考Taglist Manual,或在Vim中执行以下命令获取

:help taglist.txt




http://www.cnblogs.com/dubing/archive/2011/12/16/2290421.html

【linux+C】神器 vim

2011-12-16 16:48 by 熬夜的虫子, 2439 阅读, 20 评论, 收藏编辑

前篇回顾

  上篇介绍了linux下C编程基本环境配置以及相关工具使用选择。

  不过10个大牛9个用vim,那么咱们就来玩vim。linux下玩c就别依靠图形界面。好吧告别Ide,命令行才是c的王道。

  本篇文章感谢名为孙鹤同学的技术支持 感谢有爱的c大牛们

  本文中多处使用vim插件(孙鹤提供),这些插件大多是在http://www.vim.org/处下载。


 vim的配置文件

  ~/.vimrc        用户的默认配置文件
  ~/.vim/plugin/   用户的默认脚本文件的存放目录
  ~/.vim/ftplugin/ 用户的默认文件类型相关脚本文件的存放目录


 vim提供的编程支持

  文本信息(行号、文件名等)
  代码缩进
  语法高亮
  快速定位
  标记位置
  全文搜索
  补全
  多文件编辑
  多窗口编辑
  函数列表
  文件列表
  函数跳转
  语法错误
  字符集的编码
  二进制查看

  等等...


初试vim

  在终端以root启动 输入vim命令 显示vim首页

:r filename 读入一个文件内容,并写入到当前编辑器中

按i进入插入模式

编辑完后:w保存

编辑完后按esc退出插入模式 进入正常模式

然后输入:sh进入shell

编译运行


文本信息配置

set nu(写入配置文件.vimrc中) 显示行号。
ctrl-g(正常模式下使用命令) 显示文件信息和当前行。
statusline.vim(插件) 增加底部状态栏。


代码缩进配置

filetype on(写入配置文件.vimrc中) 使vim对文件类型敏感。
autocmd FileType c,cpp,h :setlocal cindent cinoptions=:0,g0,t0(写入配置文件.vimrc中) 设置c缩进风格,具体详情参见:h cinoptions-values。
autocmd FileType c,cpp,h :setlocal et sta sw=4 sts=4 tabstop=4(写入配置文件.vimrc中) 设置一次缩进的距离是4个空格。
=(正常模式或者可视模式下使用命令) 按照缩进风格排版代码。
<(可视模式下使用命令) 向左缩进一级。
>(可视模式下使用命令) 向右缩进一级。


语法高亮

filetype plugin on(写入配置文件.vimrc中) 通常安装的vim中已经加入了各种语言的语法高亮插件,我们只需要打开文件类型相关的插件就可以了。


快速定位

gd(正常模式下使用命令) 跳转到局部变量定义处。
gD(正常模式下使用命令) 跳转到全局标量定义处。
*(正常模式下使用命令) 搜索并跳到下一个光标所在的单词。
g*(正常模式下使用命令) 功能接近*,但是查找的目标不带\<和\>单词分界符号。
#(正常模式下使用命令) 搜索并跳到上一个光标所在的单词。
g#(正常模式下使用命令) 功能接近#,但是查找的目标不带\<和\>单词分界符号。


标记位置

m{a-zA-Z0-9} (正常模式下使用命令) 在当前位置制作一个标记,标记名字可以使用a-z或者A-Z之间的任意字符,例如输入ma,就是将当前位置标记为a标记。注意a-z为单文件标记,不可跨文件使用,而A-Z0-9为全局标记,可以跨文件使用。
‘{a-zA-Z0-9} (正常模式下使用命令) 跳转到本文件的标记上。
:marks [{a-zA-z0-9}] (正常模式下使用命令) 查看指定标记的内容,不写标记号则查看所有。
:delm {a-zA-z0-9} (正常模式下使用命令) 删除一个标记。


全文搜索

:vimgrep(正常模式下使用命令) 全文搜索,功能同grep命令,但是支持在vim进行多文件跳转定位。
使用方法:vimgrep 正则表达式 文件。文件支持通配符,例如*.c代表所有的.c文件。如果希望递归搜索,可以使用**/*,表示搜索所有的文件。
:cl 列举结果
:cc(正常模式下使用命令) 当前结果
:cn(正常模式下使用命令) 下一个结果
:cp(正常模式下使用命令) 上一个结果
:cw(正常模式下使用命令) 重新打开搜索结果窗口


多文件编辑

vim f1 f2 …… fn(在shell下使用命令) 打开多个文件。
:e 文件名(正常模式下使用命令) 在vim中打开新文件。
:ls(正常模式下使用命令) 所有打开文件列表。
:bn(正常模式下使用命令) 到下一个文件。
:bp(正常模式下使用命令) 到上一个文件。
:b# 或 ctrl-6(正常模式下使用命令) 到最近的前一个文件。
set  autowriteall(写入配置文件.vimrc中) 如果讨厌每次打开新文件,vim喋喋不休的要求你保存,那么可以设置自动保存。


http://fghjk.blog.51cto.com/4359709/804336

打开多个文件:
1.vim还没有启动的时候:
在终端里输入 
vim file1 file2 ... filen便可以打开所有想要打开的文件
2.vim已经启动
输入
:open file
可以再打开一个文件,并且此时vim里会显示出file文件的内容。

同时显示多个文件:
:split
:vsplit

在文件之间切换:
1.文件间切换
Ctrl+6—下一个文件
:bn—下一个文件
:bp—上一个文件
对于用(v)split在多个窗格中打开的文件,这种方法只会在当前窗格中切换不同的文件。
2.在窗格间切换的方法
Ctrl+w+方向键——切换到前/下/上/后一个窗格
Ctrl+w+h/j/k/l ——同上
Ctrl+ww——依次向后切换到下一个窗格中



多窗口编辑
:sp  文件名(正常模式下使用命令) 横向拆分窗口(多行窗口)。
:vsp 文件名(正常模式下使用命令) 纵向拆分窗口(多列窗口)。
ctrl-w h(正常模式下使用命令) 将光标移动到左一个窗口。
ctrl-w j(正常模式下使用命令) 将光标移动到下一个窗口。
ctrl-w k(正常模式下使用命令) 将光标移动到上一个窗口。
ctrl-w l(正常模式下使用命令) 将光标移动到右一个窗口。
ctrl-w +(正常模式下使用命令) 当前窗口尺寸变大。
ctrl-w -(正常模式下使用命令) 当前窗口尺寸变小。
ctrl-w o(正常模式下使用命令) 只显示当前窗口。


函数列表
taglist.vim(插件) 列表插件。
let Tlist_Use_Right_Window = 1(写入配置文件.vimrc中) 如果希望列表在右侧显示,则加入这个配置,默认是左侧。
:Tlist(正常模式下使用命令) 显示函数列表。
d(在taglist窗口下使用) 从列表中删除文件。
+(在taglist窗口下使用) 展开文件。
-(在taglist窗口下使用) 折叠文件。
=(在taglist窗口下使用) 折叠所有文件。
x(在taglist窗口下使用) 显示或隐藏正常窗口。


文件列表
NERD_tree.vim(插件) 横向拆分窗口(多行窗口)。
let NERDTreeWinPos = 'right'(写入配置文件.vimrc中) 如果希望文件树在右侧显示,则加入这个配置,默认是左侧。
:NERDTree(正常模式下使用命令) 显示文件列表。


函数跳转
ctags(软件,需要另外安装) 生成多种语言tag文件的软件。
Ctags –R *.c(在shell下使用命令) 生成当前路径所有.c文件的tag,-R代表递归。
:ta 标记 或 [g] ctrl-] 列举标签(多个标签)或者跳转到标签(单个标签)。
ctrl-t 返回上一级。
:tags 列出标签栈。


语法错误
:make(正常模式下使用命令) 执行外部make命令,并且显示所有的编译警告和错误,并且可以在vim中定位。
:cl 列举结果
:cc(正常模式下使用命令) 当前结果
:cn(正常模式下使用命令) 下一个结果
:cp(正常模式下使用命令) 上一个结果
:cw(正常模式下使用命令) 重新打开搜索结果窗口


二进制文件查看 (鉴于有同学理解出现分歧 将二进制查看更新为二进制文件查看)

:范围!xxd(正常模式下使用命令) 把指定范围的部分转化为二进制文件阅读方式。
:范围!xxd -r(正常模式下使用命令) 把指定范围的部分转回字符阅读方式。


字符集的编码
let &termencoding=&encoding
set fileencodings=utf-8,gbk,cp936(写入配置文件.vimrc中)
 加入多种字符编码支持。
:set fileencoding(正常模式下使用命令) 设定文件字符编码。


补充

ctrl-p(插入模式下使用命令) 跳出补全菜单。
ctrl-n(在跳出补全菜单后) 下一个结果。
ctrl-p(在跳出补全菜单后) 上一个结果。
ctrl-y(在跳出补全菜单后) 选择当前结果。
ctrl-x ctrl-f(插入模式下使用命令) 文件名补全。
ctrl-x ctrl-i(插入模式下使用命令) 包含的头文件。
ctrl-x ctrl-](插入模式下使用命令) ctags(将在下文中介绍)符号补全。
ctrl-x ctrl-o(插入模式下使用命令) omni补全,需要设置omnifunc变量。


vim其他命令 (参考vi(vim)教程)

打开文件、保存、关闭文件:

vi filename       //打开filename文件
:w              //保存文件
:w vpser.net  //保存至vpser.net文件
:q             //退出编辑器,如果文件已修改请使用下面的命令
:q!           //退出编辑器,且不保存
:wq              //退出编辑器,且保存文件

插入文本或行:

a      //在当前光标位置的右边添加文本
i       //在当前光标位置的左边添加文本
A     //在当前行的末尾位置添加文本
I      //在当前行的开始处添加文本(非空字符的行首)
O     //在当前行的上面新建一行
o     //在当前行的下面新建一行
R    //替换(覆盖)当前光标位置及后面的若干文本
J    //合并光标所在行及下一行为一行(依然在命令模式)

移动光标:

使用上下左右方向键

命令模式下:h   向左、j   向下 、k   向上、l  向右。
空格键 向右、Backspace  向左、Enter  移动到下一行首、-  移动到上一行首。

删除:

x         //删除当前字符
nx        //删除从光标开始的n个字符
dd      //删除当前行
ndd   //向下删除当前行在内的n行
u       //撤销上一步操作
U      //撤销对当前行的所有操作

搜索:

/vpser     //向光标下搜索vpser字符串
?vpser    //向光标上搜索vpser字符串
n           //向下搜索前一个搜素动作
N           //向上搜索前一个搜索动作

跳转:

n+        //向下跳n行
n-         //向上跳n行
nG        //跳到行号为n的行
G           //跳至文件的底部

设置行号:

:set  nu     //显示行号
:set nonu    //取消显示行号

复制:

yy    //将当前行复制到缓存区,也可以用 "ayy 复制,"a 为缓冲区,a也可以替换为a到z的任意字母,可以完成多个复制任务。
nyy   //将当前行向下n行复制到缓冲区,也可以用 "anyy 复制,"a 为缓冲区,a也可以替换为a到z的任意字母,可以完成多个复制任务。
yw    //复制从光标开始到词尾的字符。
nyw   //复制从光标开始的n个单词。
y^      //复制从光标到行首的内容。 

y$      //复制从光标到行尾的内容。
p        //粘贴剪切板里的内容在光标后,如果使用了前面的自定义缓冲区,建议使用"ap 进行粘贴。
P        //粘贴剪切板里的内容在光标前,如果使用了前面的自定义缓冲区,建议使用"aP 进行粘贴。

替换:

:s/old/new      //用new替换行中首次出现的old
:s/old/new/g         //用new替换行中所有的old
:n,m s/old/new/g     //用new替换从n到m行里所有的old
:%s/old/new/g      //用new替换当前文件里所有的old

编辑其他资源:

:e otherfilename    //编辑文件名为otherfilename的文件。

修改文件格式:

:set fileformat=unix   //将文件修改为unix格式,如win下面的文本文件在linux下会出现^M。


其他参考链接:

http://blog.csdn.net/sabalol/article/details/3426635

http://hi.baidu.com/howard1980/blog/item/3399e42668751b0a908f9d5f.html



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值