Vim的使用以及ctags配置

简介

  • Vim是常用的文本编辑器,是vi编辑器的扩展版,实现对linux各种文件的修改和编辑
  • Vim一共有三种模式,分别为命令模式,输入模式和底线命令模式
  • 命令模式:一打开Vim就进入命令模式,或者在其他任一模式下按ESC键也进入命令模式,此时的键盘输入看作是命令,而不是文本输入
  • 输入模式:在命令模式下用英文键盘按i或a键,进入输入模式,此时可以对文本进行编辑
  • 底线命令模式:在命令模式下输入英文字符的引号,进入底线命令模式,之后键盘的输入看作是命令

命令模式

  • :n:跳转到第n行
    G:光标移动到最后一行
    nG:n 为数字。移动到这个档案的第 n 行
    gg:光标移动到第一行(相当于1G)
  • n+空格:光标向后移动n个字符
    n+回车:光标向下移动n行
    0或[home]键:将光标移动到最前面的字符处
    $或[end]键:将光标移动到最后面的字符处
  • d1G:删除光标所在到第一行的数据
    dG:删除光标所在到最后一行的数据
    d0:删除光标所在到最前面字符发数据
    d$:删除光标所在到最后面字符的数据
  • y1G:复制光标所在到第一行的数据
    yG:复制光标所在到最后一行的数据
    y0:复制光标所在到最前面字符的数据
    y$:复制光标所在到最后面字符的数据
  • /word:向下查询第一个word字符
    ?word:向上查询第一个word字符
    n:在/word和?word的基础上继续进行前一个查询动作
    N:与n类似,但查询的方向刚好相反
    :n1,n2s/word1/word2/g:查询第n1行到第n2行的word1字符,并替换为word2字符,如果没有/g则只查询替换每行的第一个word1字符
    将n1,n2s替换为s%,则查询整个文档,将n1,n2s替换为s则只查询替换当前行
  • dd:删除光标所在的一整行
    yy:复制光标所在的那一行
    nyy:复制光标下的n行,若没有n,则复制当前的一整行
  • p:粘贴文本到光标的下一行
    P:粘贴文本到光标的上一行
  • u:撤销一次编辑
    Ctrl+r:重复上一次的编辑

输入模式

  • i :从目前光标所在处输入
    I :从光标所在行的行首处输入

  • a:从光标所在行的下一个字符处开始输入
    A :从光标所在行的行尾处输入

  • 小写字母o:在光标所在的下一行处输入新行
    大写字母O: 在光标所在的上一行处输入新行

  • r:取代光标所在的那一个字符一次
    R:一直取代光标所在的文字,直到按下 [ESC]为止

底线命令模式

在命令模式下按英文字符的引号进入底线命令模式:

  • :q:未进行修改则直接退出
  • :q!:不保存修改,直接退出
  • :wq:保存修改,并退出
  • :w!:强制写,对于那些只读类型的文件,不过具体能否写入,还和文件权限有关
  • :w [filename]:将文档另存为[filename]
  • :r [filename]:在编辑过程中,读入另一个文档,即将[filename]这个文件的内容加到游标所在行后面
  • :n1,n2 w [filename]:将 n1 到 n2 的内容储存成新的[filename]这个文档
  • :! command 暂时离开 vi 到指令行模式下执行shell命令的显示结果,例如:! ls /home即可在 vi 当中察看 /home 目录 ls 输出的信息
  • :set nu:显示行号
  • :set nonu:不显示行号

Vim中批量增删注释

批量注释:

  1. Ctrl + v 进入块选择模式,移动光标选中要注释的行;
  2. 大写的 I 进入行首插入模式,输入注释符如 // 或 #;
  3. 按两下 ESC,Vim 会自动注释选中的行。

取消注释:

  1. Ctrl + v 进入块选择模式,移动光标选中要删除行的注释符号;
  2. 按d 即可删除注释。

代码阅读工具Ctags,Taglist

简介

使用ctags工具在vim中阅读代码时,支持跳转函数定义,变量定义,代码自动补全,以及查看部分库函数的功能。

结合taglist,在vim窗口侧边建立变量、函数的列表,可以更方便的查看变量,函数,并跳转定义,以及同时进行多个源文件的代码编辑。

Ctags安装

  1. 终端输入:
sudo apt install exuberant-ctags

安装exuberant-ctags,这是目前常用的一种ctags。

  1. 安装好的ctags位置在:/usr/bin/ctags,所以可以直接使用ctags命令。
  2. 常用的命令:
ctags [要查看的文件名]
ctags -R [要查看的目录名]
ctags -R *
"*代表当前目录及子目录下的所有文件。

这三条命令的作用都是相同的,只是作用的对象不同。命令的功能是在当前目录下生成tags文件,在vim中查找变量和函数的定义时需要用到这个文件。

使用ctags命令在当前目录生成要查看的文件的tags,之后,在tags文件所在的目录下用vim命令打开文件,即可使用函数、变量的跳转功能,比如:

ctags hello.c
vim hello.c

常用的文件查看快捷键:

Ctrl+ ]:跳到光标所在函数或变量的定义处;
Ctrl+ T:返回查找或跳转 ;

对于库函数,可以使用shift+k查看man手册中的定义;

也可以添加包含此库函数的tags,来查找函数定义,不过这样有点多次一举,不如直接去源文件中查看;

或者就是使用的项目顶层目录的tags,且此tags包含所有用到的代码的源文件,这种情况下可以直接跳转定义。

结束后一般rm tags来删除tags,或者下次查看时ctags [文件名]来更新tags文件。

ctags使用方法

  • 如果是在编辑的过程中新增了部分函数和变量,ctags的标签不会自动更新,新增的函数不能进行跳转,需要在vim的命令模式下:!ctags hello.c,在vim模式中执行shell命令来更新tags,此时不用重启vim,但是需要:w保存写入的文件。

  • 如果要查看的文件一直不会有变化,即标签索引文件tags不会改变,则不用每次用vim打开文件时都用ctags命令更新标签,这种情况下在顶层目录用ctags -R *命令一次性生成所有文件的tags索引;

    之后,在用户目录下的.vimrc文件中,或者/etc/vim/vimrc文件中,添加如下命令来指定tags文件的位置(绝对路径);

set tags=/....../tags

最后,在源码的任意目录中用vim查看源文件都可以调用到相应的tags,进行函数定义的跳转。

Taglist安装

taglist需要在ctags的基础上才能运行,它可以将定义的宏、变量、函数以列表的形式进行排列,并通过回车键进行跳转,而且也可以同时查看多个文件的taglist。

下载完成后得到.zip格式的压缩包,需要将压缩包中的doc,plugin文件解压到~/.vim目录中即可使用taglist

Taglist下载

Taglist效果图

Taglist使用方法

常用命令

  • <回车> :跳到光标下tag所定义的位置,也可以鼠标双击此tag(但要在配置文件中打开此项功能)
  • o: 在一个新打开的窗口中显示光标下tag
  • <空格> :显示光标下tag的定义
  • u:更新taglist窗口中的tag(需要先保存写入)
  • s:更改排序方式,在按名字排序和按出现顺序排序间切换
  • x:taglist窗口放大和缩小,方便查看较长的tag
  • +:打开一个折叠,同zo
  • -:将tag折叠起来,同zc
  • *:打开所有的折叠,同zR
  • =:将所有tag折叠起来,同zM
  • 这些折叠操作也可以用鼠标点击完成
  • [[:跳到前一个文件
  • ]]:跳到后一个文件
  • q:关闭taglist窗口
  • <F1>:显示帮助

vim配置

在/etc/vim/vimrc中修改,也可以在用户目录的.vimrc隐藏文件中修改,此修改会覆盖/etc/目录下的配置,不过只限当前的的用户目录中使用,前者是在整个系统中使用。

"设置行号
set nu

"语法高亮
syntax on

"TAB缩进4格
set tabstop=4
set softtabstop=4

"回车换行缩进4格
set shiftwidth=4

"自动对齐
set autoindent
set cindent

"查找高亮
set hlsearch

"多个文件时可以显示多个文件的tags,=1则不可以
let Tlist_Show_One_File=0

"多个文件的tag默认显示当前的,其余的折叠
"let Tlist_File_Fold_Auto_Close=1

"检测文件的类型
filetype on

"指定ctags的路径
let Tlist_Ctags_Cmd="/usr/bin/ctags"

"使用鼠标双击也可以从Taglist中跳转函数
set mouse=a

"当Taglist为最后一个窗口时,退出vim
let Tlist_Exit_OnlyWindow=1

"按F1打开或关闭Taglist
noremap <F1> :TlistToggle<CR>

"设置Taglist的高和宽
"let Tlist_WinHeight = 100
"let Tlist_WinWidth = 40

代码自动补全

函数名,变量名,字符串数值都可以在输入部分之后按Ctrl+p或者Ctrl+n之后选择,回车选中补全,结构体成员可以在“.”之后按Ctrl+p或者Ctrl+n选择补全,但这种补全不太准确,查找的范围有点大,可以参考使用。

多文件同时编辑

  • 同时打开file1、file2、file3三个文件,但不会同时显示,同时只能显示两个文件。
vim file1 file2 file3
  • 在vim的命令模式下输入如下命令
:vsp
"垂直方向分割线,显示两个文件

:sp
"水平方向分割线,显示两个文件
  • 或者在配置文件中添加如下配置,即可一直处于分割显示的状态。
"水平分割
split
"垂直分割
vsplit
  • vim命令模式下使用如下命令打开指定的文件
"在分割模式下,效果是在光标所在的窗口打开指定文件,并覆盖原来显示的文件
"可以使用TAB自动补全
:e [文件名]
"不可以使用TAB自动补全
:open [文件名]
  • 切换窗口的命令

Ctrl+w+方向键:根据光标位置切换窗口
Ctrl+w+w:一般用于在vim文本编辑窗口和taglist窗口切换

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,053评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,527评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,779评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,685评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,699评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,609评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,989评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,654评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,890评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,634评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,716评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,394评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,976评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,950评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,191评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,849评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,458评论 2 342

推荐阅读更多精彩内容