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窗口切换

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容