vim使用记录

news/2024/6/18 20:28:07 标签: 开发工具, c/c++, shell

1. 生成c、c++公共库标签文件

ctags -R -I THROW -I attribute_pure -I nonnull -I attribute --file-scope=yes --langmap=c:+.h --languages=c,c++ --links=yes --c-kinds=+p --c++-kinds=+p --fields=+iaS --extra=+q -f ~/.vim/tags/c.tag /usr/include/ --exclude=/usr/include/python2.7/


set tags+=~/.vim/tags/c.tag


ctags file_name1.c filename2.c filename3.h来产生ctags文件或者ctags .c .h

2. 内核:

ctags默认使用这个命令,--exclude要排除的文件,--links针对符号链接是否延伸,使用-n参数表示用行号索引,一旦更改源文件行号容易变,需要重新生成请添加链接描述ctags默认使用这个命令,--exclude要排除的文件,--links针对符号链接是否延伸,使用-n参数表示用行号索引,一旦更改源文件行号容易变,需要重新生成请添加链接描述

ctags -n -R --links=yes --c-kinds=+p --fields=+iaSz --exclude=samples/ --exclude=tools/

在源码目录下通过命令make tags(也可使用:ctags -R)生成标签文件


cscope -Rbqk
k跳过/usr/include/*

字段补全

为了使得字段补全有效,在生成tags时需要一些额外的参数,推荐的c++参数主要是:
ctags -R --c++-kinds=+px --fields=+iaS --extra=+q
其中:
选项c++-kinds 用于指定C++语言的 tags记录类型,  --c-kinds用于指定c语言的,  通用格式是  --{language}-kinds
选项 fileds 用于指定每条标记的扩展字段域
extra 选项用于增加额外的条目:   f表示为每个文件增加一个条目,  q为每个类增加一个条目


如果经常在不同工程里查阅代码,那么可以在~/.vimrc中添加:

set tags=tags;

set autochdir

第一个命令里的分号是必不可少的,这个命令让vim首先在当前目录里寻找tags文件,如果没有找到tags文件,就到父目录中查找,一直向上递归。因为tags文件中记录的路径总是相对于tags文件所在的路径,所以要使用第二个设置项来改变vim的当前目录。

vimgrep

vimgrep /匹配模式/[g][j] 要搜索的文件/范围

g: 表示是否把每一行的多个匹配结果都加入

j: 表示是否搜索完后定位到第一个匹配的位置

vimgrep /pattern/%  在当前打开文件中查找

vimgrep /pattern/ *   在当前目录下查找所有

vimgrep /pattern/ **   在当前目录及其子目录下查找所有

vimgrep /pattern/ *.c  查找当前目录下所有的.c文件

vimgrep /pattern/ */  只查找子目录


cn 查找下一个
cp 查找上一个


vim打开多个文件

vim file1 file2 file3 file4

或者进入vim后使用:e文档名来打开文档

:n 跳到后面那个文件

:N 跳到前面那个文件

:files查看打开了哪些文件

:file 查看当前的文件名

vim自动补全

ctrl + n或者ctrl + p


复制vim文件中所有内容

gg 回到文件首

shift + v 进入VISUAL LINE模式

shift + g 全选所有内容

ctrl + v 复制所选的内容


quickfix是vim的标准插件,本身就带有

quickfix功能将编译过程中产生的错误信息保存到文件中,然后vim利用这些信息跳转到源文件的对应位置,我们就可以进行错误的修正,之后跳到下一个错误重复上述操作,从而极大地提高编译错误的修改效率

quick常用命令:

:cc 显示详细错误信息

:cp 跳到上一个错误

:cn 跳到下一个错误

:cl 列出所有的错误

:copen 打开quickfix窗口,可以在后面添加窗口高度参数,如10行,:copen 10

:cclose 关闭quickfix窗口

vim的recording功能

第一步:在正常模式下(非insert模式、非visual模式)按下q键盘
第二步:选择a-z或0-9中任意一个作为缓冲器的名字,准备开始录制宏
第三步:正常的操作,此次所有的操作都会被记录在上一步中定义的缓冲器中
第四步:在非insert模式下输入q停止宏的录制
第五步:使用@ + 第二步中定义的缓冲器的名字即可就可以使用录制的命令了。

快捷键

1、高亮所有搜索模式匹配,搜索

shift + * 向后搜索光标所在位置的单词

shift + # 向前搜索光标所在位置的单词

, # 可对光标处的词向前/向后做全词搜索,g, g# 做相对应的非全词匹配搜索
位置历史,打开历史的文件,前一个后一个
Ctrl-O 在历史记录中后台,Ctrl-I 则为前进。

:set hlsearch 高亮所有匹配的字符串

:nohlsearch 临时关闭

:set nohlsearch 彻底关闭,只有重新:set hlsearch才可以高亮搜索

3.:ts(列出符号的定义tselect的缩写):
:tj x 如果只找到一个符号定义,那么直接跳转到符号定义处,如果有多个,则让用户自行选择。
4.:tp(前一个符号)---此命令不常用,可以不用记
5.:tn(后一个符号) ---此命令不常用,可以不用记
6.Ctrl+ ]跳到光标所在函数或者结构体的定义处
7.Ctrl+ T返回上一个标签

  1. Ctrl+O 返回上一个标签
    如果找到的标签并不唯一,所以还需要配合使用下述命令:
    tfirst:跳至第一个
    :[count]tprevious 向前 [count] 个匹配
    :[count]tnext 向后 [count] 个匹配
    tlast:跳至最后一个

:stag TagName 新窗口分屏窗口显示TagName标签,光标跳到标签处
Ctrl+W + ] 新窗口分屏窗口显示当前光标下单词的标签,光标跳到标签处

以下命令将在分屏预览窗口显示标签
:ptag TagName 预览窗口显示TagName标签,光标跳到标签处
:pclose 关闭预览窗口
:pedit file.h 在预览窗口中编辑文件file.h(在编辑头文件时很有用)
:psearch atoi 查找当前文件和任何包含文件中的单词并在预览窗口中显示匹配,在使用没有标签文件的库函数时十分有用。

:n 跳到后面那个文件
:N 跳到前面那个文件
:files查看打开了哪些文件
:file 查看当前的文件名

即简单地补全到本文档中已有的词:vim自动补全ctrl + n(第一个)或者ctrl + p(最后一个)
此时有一些快捷键可以用:
Ctrl+P 向前切换成员
Ctrl+N 向后切换成员
Ctrl+E 表示退出下拉窗口, 并退回到原来录入的文字
Ctrl+Y 表示退出下拉窗口, 并接受当前选项

vim中的其他补全方式还有:全局搜索
Ctrl+XCtrl+L 整行补全
Ctrl+X Ctrl+N 根据当前文件里关键字补全
Ctrl+X Ctrl+K 根据字典补全
Ctrl+X Ctrl+T 根据同义词字典补全
Ctrl+X Ctrl+I 根据头文件内关键字补全
Ctrl+X Ctrl+] 根据标签补全
Ctrl+X Ctrl+F 补全文件名
Ctrl+X Ctrl+D 补全宏定义
Ctrl+X Ctrl+V 补全vim命令
Ctrl+X Ctrl+U 用户自定义补全方式
Ctrl+X Ctrl+S 拼写建议

15、vim的recording功能

第一步:在正常模式下(非insert模式、非visual模式)按下q键盘
第二步:选择a-z或0-9中任意一个作为缓冲器的名字,准备开始录制宏
第三步:正常的操作,此次所有的操作都会被记录在上一步中定义的缓冲器中
第四步:在非insert模式下输入q停止宏的录制
第五步:使用@ + 第二步中定义的缓冲器的名字即可就可以使用录制的命令了。

g + ] 可以查看当前函数的所有位置的定义
q: 显示vim命令历史

17、块选择
v 会将光标经过的地方反白选择
y将反白的地方复制
d将反白的地方删除

字符串替换
语法:[addr]s/源字符串/目的字符串/option
option(g表示全局替换,c表示替换前进行确认)
如果在源字符串和目的字符串中出现特殊字符,需要用”\”转义
全局替换,:%s/源字符串/目的字符串/g
从当前行到文件尾替换,:.,$%s/源字符串/目的字符串/g
从第n行到文件尾替换,:n,$%s/源字符串/目的字符串/g

vim的快捷键

% 跳转到配对的括号去
[[ 跳转到当前或者上一代码块(函数定义、类定义等)的开头去(但要求代码块中'{'必须单独占一行)
][ 跳转到当前代码块(函数定义、类定义等)的结尾去(但要求代码块中'{'必须单独占一行)
]] 跳转到下一代码块(函数定义、类定义等)的开头去(但要求代码块中'{'必须单独占一行)

gd到局部变量的定义,gD到全局变量的定义
‘’ 跳转到光标上次停靠的地方, 是两个', 而不是一个"
mx 设置书签,x只能是a-z的26个字母
x 跳转到书签处(""是1左边的键)

缩进

插入模式
Ctrl-T增加缩进,Ctrl-D减小缩进。

命令模式

右缩进, << 左缩进,注意n<< 或 n>>是缩进多行,如4>>

可视模式
< 、 > 用于左右缩进, n< 、 n> 可做多节缩进,如 2> 。
另外,= 可对选中的部分进行自动缩进;]p可以实现p的粘贴功能,并自动缩进。

打开文件列表窗口快捷键netrw.vim
<F1> 显示帮助
<cr> 如果光标下是目录, 则进入该目录; 如果光标下文件,则打开该文件

返回上级目录
c
切换vim当前工作目录正在浏览的目录
d
创建目录
D
删除目录或文件
i
切换显示方式
R
文件或目录重命名
s
选择排序方式
x
定制浏览方式,使用你指定的程序打开该文件

附录


ctags 对shell语言的支持
vim+ctags+cscope安装与使用总结(不断补充中)
vim 中Ctags的安装和使用
vim+cscope+ctags打造属于自己的IDE
一份比较好用的vim配置文件
Vim的强大配置文件(一键配置)
ctags实践总结
ctags使用方法 ctags的使用方法
Exuberant Ctags中文手册
超详细的vim+cscope 的使用规则
VIM 的 modeline 和 autocmd
Ubuntu 16.04 下 Vim安装及配置
vim源码阅读工具 ctags cscope 和 Source Insight

转载于:https://blog.51cto.com/11325959/2330890


http://www.niftyadmin.cn/n/1620633.html

相关文章

Docker 安装与使用

目录1. Docker 安装与使用2. 网络 / 网卡2.1. 查看 docker 容器 IP 地址2.2. 删除多余网卡2.3. 删除 docker0 网卡3. 镜像4. 容器5. boot2docker6. 经验之谈: 八种Docker容器开发模式7. 摘要8. 编者按9. 以下为译文9.1. The Shared Base Container(s)9.2. The Shared Volume De…

lnmp thinkphp5 tp5系统环境配置问题解决tp5环境配置

2019独角兽企业重金招聘Python工程师标准>>> 1&#xff0c;安装lnmp一键安装包 2&#xff0c;修改nginx 下 fastcgi.conf 文件 前面增加#好&#xff08;#fastcgi_param PHP_ADMIN_VALUE "open_basedir$document_root/:/tmp/:/proc/";&#xff09; 3&#…

在K8s中创建StatefulSet

遇到的问题&#xff1a; 使用Deployment创建的Pod是无状态的&#xff0c;当挂在Volume之后&#xff0c;如果该Pod挂了&#xff0c;Replication Controller会再run一个来保证可用性&#xff0c;但是由于是无状态的&#xff0c;Pod挂了的时候与之前的Volume的关系就已经断开了&am…

现在有一个长度20的SET,其中每个对象的内容是随机生成的字符串,请写出遍历删除LIST里面字符串含2的对象的代码。

现在有一个长度20的SET,其中每个对象的内容是随机生成的字符串&#xff0c;请写出遍历删除LIST里面字符串含"2"的对象的代码。 public class RemoveTwo {//length用户要求产生字符串的长度public static String getRS(int length){String str"abcdefghijklmnop…

C# 字符串处理类

using System;using System.Collections.Generic;using System.Text;using System.Text.RegularExpressions; namespace ZD.Utilities{ /// <summary> /// 字符串操作类 /// 1、GetStrArray(string str, char speater, bool toLower) 把字符串按照分隔符转换成 List /// …

判断两数之间的最大值

判断两数之间的最大值 可直接利用Java自带的函数(abc 绝对值函数)再结合三元运算符实现 public class TestMax {public static void main(String[] args) {System.out.println(max(5,6));}private static int max(int i, int j) {// TODO Auto-generated method stub// abc 绝…

WPF 茶壶

就是经常出现的这个 <MeshGeometry3D x:Key"myTeapot" Positions"0.6788729 0.330678 0 0.669556 0.358022 0 0.6710029 0.374428 0 0.6804349 0.379897 0 0.6950769 0.374428 0 0.712148 0.358022 0 0.728873 0.330678 0 0.6542429 0.330678 0.1879…

平均数,中位数和众数

这里写目录标题1. 平均数&#xff0c;中位数和众数1. 平均数&#xff0c;中位数和众数 平均数 (Average): 分为 算术平均数 和 加权平均数 。一般用 算术平均数 &#xff0c;简称平均数。 表示 “一组数据集中趋势”。 中位数 (Median): 一组数据最中间的一个数&#xf…