vim ctags使用方法

windows下很多人都使用source insight 编写和查看代码。linux下可以使用VIM,刚开始会觉得VIM像windows下的记事本,而如果使用得当,它并不比source insight 逊色。
在这里,我会尽我所能细致地讲清楚如何把vim变成source insight, 然而你仍然需要积极地思考,并且必须自己去摸索一些东西。
为了避免过于罗嗦,我把基础的部分放在后面,如果你越看越觉得太简单了,那么本文并不适合你;如果看完前面的仍有疑问或者看不懂前面说的是什么东西,不用担心,后面会有一些必备的知识介绍。
一、用好系统自带软件ctags
大部分的unix系统都有ctags软件,它能跟vim很好地合作。
用途:
生成c语言的标签文件,实现相关c文件之间的跳转。
用法:
1.生成标签文件
在当前目录下(运行$提示符后面的命令): 
$ctags -R .
-R表示recursive,递归,为当前目录及其子目录中的c文件生成标签文件。最后一个.表示在当前目录。
运行完当前目录会多一个文件tags,就是c标签的索引文件。
2.跳转
1)用vim打开一个已经建过标签的c文件    
2)ctrl+] 找到光标所在位置的标签定义的地方
3)ctrl+t 回到跳转之前的标签处
注意:此时运行vim,必须在"tags"文件所在的目录下运行。否则,运行它会找不到"tags"文件,而需要在vim中用":set tags="命令设定"tags"文件的路径。对于一个稍微大点的项目,你可能在任何一个目录下打开vim,然而在每个目录下都生成一个tags文件并不 是个好主意,那么如何解决呢?方法是在.vimrc中增加一行:
set tags=tags;/
这是告诉vim在当前目录找不到tags文件时请到上层目录查找。
二、需要额外安装的脚本:
1、taglist
下载地址http://www.vim.org/scripts/script.php?script_id=273
若你下载时地址已改变,请到 www.vim.org 找到正确的地址,这很简单。
用途:
打开后,可以显示源码的整体架构,方便地进行跳转。(用惯source insight的人一定勾起某些回忆了^_^)
用法:
下载插件并安装,使用时在vim中输入命令
:Tlist
即可打开/关闭taglist窗口。
一个简单的方法是设定快捷键,在.vimrc中增加一行:
nnoremap <silent> <F8> :TlistToggle<CR>
这样在vim中按F8就可以打开/关闭taglist了。
更多相关配置请看后面关于.vimrc的介绍。
三、基础知识探讨
约定:为了方便和准确,我们约定本文中"$"标示符后的命令为在终端下运行,而":"后的命令为在vim中运行。
VIM的配置文件一般放在用户主文件夹下,也就是非root状态时在终端运行
$cd ~/
会到的那个目录,文件名为.vimrc。
看不到?有两个可能:
1、文件名前面有一个点,表示是隐藏文件,ls查看时需加-a选项。
$ls -a
2、你还没有建.vimrc文件,自己创建一个就行,先建个空的吧,以后可以不断往里面填东西。
$touch .vimrc
主文件夹下还有一个.vim文件夹,没有请自己mkdir
$mkdir ~/.vim
在.vim文件夹下,再建两个子文件夹:plugin和doc
$mkdir ~/.vim/plugin
$mkdir ~/.vim/doc
plugin文件夹下放插件,doc文件夹下放相应的help文档。
去下一个taglist吧(我们应该把它叫作脚本还是插件呢?它是放在plugin文件夹下的,那么应该是插件;而在vim.org,它是作为scripts存在,那么应当是脚本。),我们当作例子来请解。
下载的是一个zip包,把它放在 ~/.vim 目录下,然后
$unzip filename.zip
它已经自动把taglist.vim和taglist.txt分别放到plugin、doc文件夹下了。
这时重新启动vim
$vim
运行
:Tlist
发现旁边多了一栏没有?如果你打开的是c文件,并且已经生成了tags文件,那么里面应当会显示一些有用的信息。
这个时候,taglist的help文档已经在 ~/.vim/doc 目录下了,但是你在vim下敲
:help Tlist
却没有任何反应,那是因为vim还没有获取帮助文档里面的tag,解决方法是在vim下
:helptags ~/.vim/doc
现在,你再
:help Tlist
看看有没有反应?
关于.vimrc
我自己的.vimrc也在不断地完善中,完善的过程中得益于从网络上获取的很多知识,感谢提供信息的朋友,也是他们促使我写下这篇东西。我把自己.vimrc的一部分贴在下面,你可以把这些根据需要加到你的.vimrc里面去。
".vimrc
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" General
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"For ctags, then it can find the 'tags' file even not in current directory
set tags=tags;/
"Get out of VI's compatible mode..
set nocompatible
"Sets how many lines of history VIM har to remember
set history=400
"Set to auto read when a file is changed from the outside
set autoread
"Have the mouse enabled all the time:
"when you need to copy from vim, maybe you have to ':set mouse=' first
set mouse=a
"""""""""""""""""""""""""""""""""""""
" Colors and Fonts
"""""""""""""""""""""""""""""""""""""
"Enable syntax highlight
syntax enable
"set colorscheme
colorscheme elflord
"endif
"""""""""""""""""""""""""""""""""""""
" VIM userinterface
"""""""""""""""""""""""""""""""""""""
"Set 7 lines to the curors away from the border- when moving vertical..
set so=7
"Turn on WiLd menu
set wildmenu
"Always show current position
set ruler
"The commandbar is 2 high
set cmdheight=2
"Show line number
set nu
"Set backspace
set backspace=eol,start,indent
"Bbackspace and cursor keys wrap to
set whichwrap+=<,>,h,l
"show matching bracets
set showmatch
"How many tenths of a second to blink
set mat=2
"Highlight search things
set hlsearch
"imediately show the search result
set is
"""""""""""""""""""""""""""""""""""""
" Folding
"""""""""""""""""""""""""""""""""""""
"Enable folding, I find it very useful
set nofen
set fdl=0
"""""""""""""""""""""""""""""""""""""
" Text options
"""""""""""""""""""""""""""""""""""""
set expandtab
set shiftwidth=2
set ambiwidth=double
set smarttab
"Set Tab=4 spaces
set ts=4
set lbr
set tw=500
set selection=inclusive
""""""""""""""""""""""""""""""
" Indent
""""""""""""""""""""""""""""""
"Auto indent
set ai
"Set auto indent width = 4 spaces
set sw=4
"Smart indet
set si
"C-style indenting
set cindent "usage: select codes, press '=' key, the codes will autoindenting
"Wrap lines
set wrap
"Encoding settings
if has("multi_byte")
" Set fileencoding priority
if getfsize(expand("%")) > 0
set fileencodings=ucs-bom,utf-8,cp936,big5,euc-jp,euc-kr,latin1
else
set fileencodings=cp936,big5,euc-jp,euc-kr,latin1
endif
" CJK environment detection and corresponding setting
if v:lang =~ "^zh_CN"
" Use cp936 to support GBK, euc-cn == gb2312
set encoding=cp936
set termencoding=cp936
set fileencoding=cp936
elseif v:lang =~ "^zh_TW"
" cp950, big5 or euc-tw
" Are they equal to each other?
set encoding=big5
set termencoding=big5
set fileencoding=big5
elseif v:lang =~ "^ko"
" Copied from someone's dotfile, untested
set encoding=euc-kr
set termencoding=euc-kr
set fileencoding=euc-kr
elseif v:lang =~ "^ja_JP"
" Copied from someone's dotfile, unteste
set encoding=euc-jp
set termencoding=euc-jp
set fileencoding=euc-jp
endif
" Detect UTF-8 locale, and replace CJK setting if needed
if v:lang =~ "utf8$" || v:lang =~ "UTF-8$"
set encoding=utf-8
set termencoding=utf-8
set fileencoding=utf-8
endif
else
echoerr "Sorry, this version of (g)vim was not compiled with multi_byte"
endif
"""""""""""""""""""""""""""""""""""""
"plugins
"""""""""""""""""""""""""""""""""""""
" Tlist
if &diff
let Tlist_Auto_Open=0 "don't auto pen when compare two files
else
let Tlist_Auto_Open=1 "auto pen Tlist when open a file
endif
"set taglist window in right, delete the following line if you don't like
let Tlist_Use_Right_Window=1
let Tlist_Auto_Update=1 
let Tlist_File_Fold_Auto_Close=1
"auto close Tlist when exiting file.
let Tlist_Exit_OnlyWindow = 1 
nmap <F7> :copen<CR>
nmap <F6> :cclose<CR>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/351989.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MATLAB读取txt文件的数据

常用的主要有以下几种方法&#xff1a; 1、loadData load("filename.txt");该函数只能加载仅含有数字的文本文件&#xff0c;如果文档中夹杂着字母或者文字&#xff0c;就会报错。 2、importdataData importdata("filename.txt");既可以读取数据又可以读…

谷歌guava_Google Guava v07范例

谷歌guava我们在TouK举办了一个名为“每周技术研讨会”的活动&#xff0c;即每个星期五的16:00&#xff0c;每个愿意参加的人都有一个演讲。 我们展示了我们在家学习和学习的东西&#xff0c;但是我们还设有一个公告板&#xff0c;上面有人们想听的话题。 上周MaciejPrchniak谈…

arduinoesp8266定时器_ESP8266深度睡眠与Arduino IDE(NodeMCU)

本指南展示了如何使用Arduino IDE与ESP8266(NodeMCU)一起使用深度睡眠。我们将使用定时器唤醒来唤醒深度睡眠&#xff0c;并使用复位(RST)引脚来唤醒外部唤醒。引入深度睡眠模式如果您使用电池供电的ESP8266板制作了一个项目&#xff0c;或者只是将ESP8266 NodeMCU板连接到了移…

MATLAB对图片格式批量转换

从网上下载一些数据集&#xff0c;发现是PPM或者PGM格式的&#xff0c;一般照片查看器打不开。可以用MATLAB对其进行批量转换格式。当然&#xff0c;任何两种格式之间相互转换都可以用这个程序&#xff1a;% 本示例程序将 pgm 图片转换为 jpg 图片 % 如果仅对一张 pgm 图片作…

gunicorn部署Flask服务

作为一个Python选手&#xff0c;工作中需要的一些服务接口一般会用Flask来开发。 Flask非常容易上手&#xff0c;它自带的app.run(host"0.0.0.0", port7001)用来调试非常方便&#xff0c;但是用于生产环境无论是处理高并发还是鲁棒性都有所欠缺&#xff0c;一般会配合…

linux shell 中判断字符串为空的正确方法

help命令可以查看帮助 help test 正确做法&#xff1a; #!/bin/sh STRING if [ -z "$STRING" ]; then echo "STRING is empty" fi if [ -n "$STRING" ]; then echo "STRING is not empty" fi rootjames-desktop:~#…

打开wmware没反应_没呼吸没脉搏,溺水女孩危在旦夕!预产期只差9天的她挺着大肚子出手相助...

8月9日晚上8点半南海桂城中海锦城小区游泳池一位小女孩溺水了&#xff01;脸色青紫、嘴唇发绀没有呼吸也没有脉搏情况非常不妙&#xff01;↓↓↓救生员立马给女孩做心肺复苏。站在泳池边陪女儿才游不到200米的南海医院妇科医生胡碧洪&#xff0c;听见泳池边的骚动&#xff0c;…

使用JAXB的简介

我正在将一些依赖于Apache XMLBeans的模块迁移到JAXB。 这是令人兴奋且充满挑战的几天。 我想记下我遇到的一些重要事情&#xff0c;以供将来可能会发现有用的任何人使用。 首先&#xff0c;让我们来看一下设置用于JAXB代码生成的maven插件。 在撰写本文时&#xff0c;我遇到了…

关于opencv读取摄像头的未解之谜

前段时间做项目需要用opencv读usb摄像头的视频数据&#xff0c;遇到很多无解的问题&#xff0c;虽然后来没有用到&#xff0c;但是还是记录下来&#xff0c;也许以后就知道答案了呢。 1、无论摄像头的实际分辨率是多少&#xff0c;opencv读进来的视频分辨率都是640*480大小的&a…

[BZOJ2834]回家的路

Description Input Output Sample Input 2 1 1 2 1 1 2 2Sample Output 5思路还是很简单的&#xff0c;然而最短路打错各种对拍各种调了一早上代码&#xff1a;1 #include<iostream>2 #include<cstdio>3 #include<cstring>4 #include<vector>5 #includ…

dubbo优势_Dubbo与SpringCloud核心组件Ribbon、Hystrix、Feign的优劣势比较

在微服务架构中&#xff0c;分布式通信、分布式事务、分布式锁等问题是亟待解决的几个重要问题。Spring Cloud是一套完整的微服务解决方案&#xff0c;基于 Spring Boot 框架。确切的说&#xff0c;Spring Cloud是一个大容器(而不是一个框架)&#xff0c;它可以将通过集成一些好…

使用Java更新DynamoDB项

在上一篇文章中&#xff0c;我们继续使用Java将项目插入DynamoDB。 DynamoDB还支持更新项目。 我们将使用Login表获取更新示例。 发布更新时&#xff0c;必须指定要更新的项目的主键。 public void updateName(String email,String fullName) {Map<String,AttributeValue…

Python执行系统命令的方法 os.system(),os.popen(),commands

最近在做那个测试框架的时候发现 Python 的另一个获得系统执行命令的返回值和输出的类。 最开始的时候用 Python 学会了 os.system() 这个方法是很多比如 C&#xff0c;Perl 相似的。 os.system(cat /proc/cpuinfo) 但是这样是无法获得到输出和返回值的&#xff0c;继续 Goog…

opencv的两个错误

1、imwrite未定义标识符先检查opencv和C有没有配置好&#xff0c;再看有没有包含相应的头文件&#xff0c;最后发现是因为没有使用cv的命名空间&#xff0c;需要加上using namespase cv&#xff1b; 2、cvCvtColor的使用函数原型&#xff1a;cvCvtColor&#xff08;src&#xf…

BTC、BCH和BSV三者到底有什么区别?

比特币发展到今天已经有10个年头了&#xff0c;在这十年的发展中&#xff0c;比特币一共经历了两次重要的分裂&#xff0c;现在变成了三种货币&#xff0c;第一种是目前继承了比特币绝大多数遗产的BTC&#xff1b;第二种是BCH&#xff1b;第三种是BSV。那这三种货币到底有什么区…

ping 不通 华为三层交换机vlan_华为三层交换机如何让VLAN间不能互通配置精编版...

时可以利用hybrid属性定义分属于不同的vlan的端口之间的互访&#xff0c;这是access和trunk端口所不能实现的。在一台交换机上不允许trunk端口和hybrid端口同时存在。1.先创建业务需要的vlan[SwitchA]vlan 10[SwitchA]vlan 20[SwitchA]vlan 30[SwitchA]vlan 40[SwitchA]vlan 50…

python进程池:multiprocessing.pool

阅读目录 例1&#xff1a;使用进程池例2&#xff1a;使用进程池&#xff08;阻塞&#xff09;例3&#xff1a;使用进程池&#xff0c;并关注结果例4&#xff1a;使用多个进程池 在利用Python进行系统管理的时候&#xff0c;特别是同时操作多个文件目录&#xff0c;或者远程控制…

eclipse juno_放弃Eclipse Juno

eclipse juno在上一个博客中&#xff0c;我发布了有关Eclipse 4.2 Juno设置的信息。 在需要重新安装其他东西的情况下&#xff0c;为我提供了很多参考。 那时我没有谈论的是我与Juno共同遇到的问题。 我以为这是我自己的安装程序&#xff0c;很麻烦&#xff0c;但是此后并没有太…

C语言结构体数组的使用

1、结构体数组的优点结构体可以存储不同的数据类型&#xff0c;将他们互相联系起来。结构体数组可以连续存储多个结构体&#xff0c;和数组作用相似。比如想定义同一个最小外接矩形的四个坐标值&#xff0c;并给予这个矩形一个特征编号。当需要存储多个最小外接矩形的信息时&am…

arthas 查看哪个方法调用最耗时_Java开源诊断工具Arthas使用方法详解

一、前言1、热更新代码的场景(1)当线上服务器出现问题时&#xff0c;有些时候现有的手段不足以发现问题所在&#xff0c;可能需要追加打印日志或者增加一些调试代码&#xff0c;如果我们去改代码重新部署&#xff0c;会破坏问题现场&#xff0c;可以通过热部署的手段来增加调试…