vim是Linux下一款功能十分强大的编辑器。将vim打造成编程利器,不仅仅需要学习vim的用法,还需要使用一些插件。
首先介绍vim中标签的用法。以下是对vim帮助的29章进行的翻译:
29.1使用tags
tags是定义标识符的地方。例如在c和c++程序中的函数定义。tags的列表在一个tags文件中维护。这个可以被vim用以直接的从任何地方跳转到tag,也就是定义了标识符的地方。
如果要成成所有当前目录下的C文件的tags文件,使用如下命令:
ctags *.c
ctags是一个独立的程序。多数Unix系统已经自动安装了它。如果没有安装,请访问如下地址:
http://ctags.sf.net
现在当你在vim中并且希望到达一个函数定义的时候,你可以使用如下命令进行跳转了:
:tag startlist
这个命令将会发现函数“startlist”,即使该函数在另外一个文件中。这使得查看混乱的C代码变得非常简单。例如,你在查看函数“write_block”,而该函数中调用了“write_line”。但是“write_line”做了什么呢?将光标移动到“write_line”上,并且使用CTRL_J,你就可以跳转到这个函数的定义了。
函数“write_line”调用了“write_char”。你需要查看这个函数做了什么。你将光标位置放到write_char上,然后按下CTRL_J即可跳转到函数的定义。
命令“:tags”可以显示使用的tags的列表。
如果要回去,使用CTRL-T即可跳转到之前的tag。这个命令有一个count参数作为其前缀,可以表明回转的tags数。再一次向前跳转,可以使用:tag到list的最上边。如果要跳转过数个tags,可以使用一个count参数,例如:"3tag"。CTRL-T也可以以一个count为前缀使用。
这些命令允许你使用CTRL-J正向查看调用树,然后使用CTRL-T回退。并且使用":tags"查看你在哪里。
分屏显示
”:tag“命令将会使用包含新函数的文件,替换当前window显示的文件。但是假设你不仅仅想看原来的函数,也想看到新的函数,应该怎么办?你可以分屏显示,在":tag"命令前,使用":split"命令。Vim有一个简单的命令,可以做到这一点:
:stag tagname
这样分屏,并且跳转到光标下的tag,可以使用CTRL-W J。
如果指定一个count,新的window的高度,将会是那样的。
更多的TAGS文件
当你在很多目录下有文件,你可以在每个目录下创建一个tags文件。vim将会仅仅能够跳转到这一个目录下的tags,而不能跳转到其他目录下的tags。
让vim查找更多tags文件,使用set tags命令做到。例如:
:set tags=./tags,./../tags,./*/tags
这将使得vim在上层、本次和所有子层下进行查找。你可以使用完全目录树来进行定义。
整合成一个TAGS文件
vim在不得不在多个目录下搜索tags文件的时候,将会变得较低效。这种情况下,最好做一次产生一个大的tags文件的操作。
ctags -R . 可以对当前目录下,所有目录递归的进行搜索,产生一个tags文件。
一个非常好的事情是,ctags程序能够识别多种文件类型。不仅仅对于C和C++程序,对于Eiffel甚至vim 脚本都是。了解更多请参考ctags帮助文档。
现在你仅仅需要告知vim 你的大的tags文件的目录,就可以了。
多匹配
当一个函数多次被定义的时候(或者一个类中的方法),":tag"将跳转到第一个。如果在当前文件中有匹配,则这个就是第一个。你可以使用如下命令跳转到另外一个匹配tag上:
:tnext
如果匹配很多,你可以选择一个跳转。
:tselect tagname
这样,vim将给你显示一个选择的表。
表中的第一列是匹配号。输入这个号,你就可以跳转到这个匹配上。
在匹配tags中进行转换,你可以使用如下命令:
:tfirst :[count]tprevious :[count]tnext :tlast。count默认是1.
猜测TAG名字
使用tab键可以进行tag名字补足。tab将会先产生第一个匹配,继续tab即可切换到下一个。你也可以使用模糊匹配。例如,
:tag /block ,跳转到有block的tag。
现在,使用tab,vim将会查找所有包含block的匹配,并使用第一个。
在tag名字前的/告诉vim,跟随的是模式匹配。你可以使用模式匹配的方式使用任何命令。例如选择,
:tselect /^write_ 是告诉vim选择以”write_“开始的tag。^表示以其开头,$表示以其结尾。
TAGS的浏览
CTRL-J带你跳转到光标指定tag的定义,你可以将标识符名称作为一个表格的内容。这是个例子。
首先,创建一个标识符列表,这需要ctags。
ctags --c-types=f -f functions *.c
现在开启vim,并不使用file作为参数。在vim中编辑这个文件,以垂直分屏方式。
vim
:vsplit functions
Windows包含所有函数的列表。当然,还有更多你可以忽略的东西。使用:setlocal ts=99可以整理下。在这个Window,定义一个映射:
:nnmoremap <buffer> <CR> 0ye<C-W>w:tag <C-R>"<CR>
将鼠标移到包含你想跳转的函数的哪行,输入回车。vim将会跳转到另外一个window并且跳转到选择的函数。
相关选项
你可以 设置 ‘ignorecase’使得tag名字的大小写被忽略。
tagbsearch选项告知,是否tags文件被排序或者不排序。默认是假定是一个排序的tags文件,这使得匹配更快,但是如果没排序,则没有什么用了。
taglength则可以告知vim在一个tag中忽略的标识符多少。
当你使用SNiFF+程序,你可以使用vim提供给sniff的接口。SNiFF+是一个商业程序。
Cscope是一个免费程序。它不仅仅发现标识符在哪声明,也可以发现在哪被使用。
分享到:
相关推荐
Linux 实操篇- Vi 和Vim 编辑器-开机、重启和用户登录注销-用户管理
Linux编辑器-vim使用
Atom-atom-vim-mode-plus是针对Atom文本编辑器的一个扩展插件,主要目的是增强其内置的VIM编辑模式。VIM(Vi Improved)是一种高度可配置的文本编辑器,以其高效的操作方式和丰富的命令集而闻名。在Atom中,VIM模式...
Vim有许多优秀的插件,如NERDCommenter用于注释管理,Vim-Fugitive用于Git操作。通过.vimrc文件,你可以定制个人的Vim环境,如设置颜色方案、修改默认行为等。 **9. 学习资源** Vim有详尽的在线文档和用户手册,如...
vim-colors-solarized, vim文本编辑器的精确 colorscheme 标题描述作者创建的颜色已经修改用于Vim的Solarized colorscheme机器和人员的精确颜色Schoonover浅黄色2011 152011年 16用于Vim的 Solarized colorsche
Linux 基础 002-vi简介-02-vi和vim以及vi的特点.flv
05.1 文本编辑器Vim-Vim常用操作.mp4 05.2 文本编辑器Vim-Vim使用技巧.mp4
"Linux文本编辑器Vim的使用和应用" Linux文本编辑器Vim是一个功能丰富且强大的文本编辑器,被广泛用于Linux系统。它是Vi的增强版本,提供了更多的功能和改进,同时可以通过插件扩展其功能。Vim提供了三种模式:命令...
《Vi Improved-----Vim》是一本关于Vim编辑器的全面使用教程,本书共分为17章,内容覆盖从基础到高级的Vim使用技巧,旨在满足不同水平用户的需求。Vim编辑器是文本编辑领域极为强大的工具之一,它以高效著称,能够...
Linux开发领域中,Vim作为一个强大的文本编辑器,深受程序员喜爱。然而,其默认界面相对简洁,有时缺少一些现代化IDE的便利特性,如代码迷你地图。"Linux-vimminimap"项目正是为了解决这个问题,它为Vim添加了一个...
Linux运维-云计算 基础全栈-153 服务管理-2.2 1vim编辑技巧02.mp4
`vim-go`是Vim编辑器中一个强大的Go语言开发插件,由fatih维护。它为Vim提供了丰富的功能,旨在提升Go程序员的开发效率和代码质量。这个插件包含了调试、语法高亮、自动补全、代码跳转、格式化、重构等多个方面的...
2. **获取插件**:从源码仓库(如GitHub)下载xmake.vim-master压缩包。 3. **解压安装**:将压缩包解压到Vim的插件目录,通常为~/.vim/bundle或~/.config/nvim/plugged(取决于Vim版本和配置)。 4. **启用插件管理...
在Linux开发环境中,Vim作为一个强大的文本编辑器,以其高度可定制性和高效性深受程序员喜爱。然而,有时候我们需要在编辑代码的同时运行命令或者进行交互式操作,这时内置一个终端功能就显得尤为方便。`simpleterm....
在 Linux 系统中,Vim 是一种常用的文本编辑器,但是在使用 Vim 的时候,经常会遇到 UTF-8 文档乱码的问题。为了解决这个问题,我们需要了解 Vim 中的四个与编码有关的选项:fileencodings、fileencoding、encoding ...
**Linux中的Vim编辑器** Vim(Vi Improved)是一款强大的文本编辑器,在Linux系统中广泛使用。它基于早期的Vi编辑器,并进行了大量的增强和改进,提供了丰富的特性集,适用于程序员、系统管理员以及普通用户。Vim在...