简介
- 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中批量增删注释
批量注释:
- Ctrl + v 进入块选择模式,移动光标选中要注释的行;
- 大写的 I 进入行首插入模式,输入注释符如 // 或 #;
- 按两下 ESC,Vim 会自动注释选中的行。
取消注释:
- Ctrl + v 进入块选择模式,移动光标选中要删除行的注释符号;
- 按d 即可删除注释。
代码阅读工具Ctags,Taglist
简介
使用ctags工具在vim中阅读代码时,支持跳转函数定义,变量定义,代码自动补全,以及查看部分库函数的功能。
结合taglist,在vim窗口侧边建立变量、函数的列表,可以更方便的查看变量,函数,并跳转定义,以及同时进行多个源文件的代码编辑。
Ctags安装
- 终端输入:
sudo apt install exuberant-ctags
安装exuberant-ctags,这是目前常用的一种ctags。
- 安装好的ctags位置在:/usr/bin/ctags,所以可以直接使用ctags命令。
- 常用的命令:
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使用方法
常用命令
- <回车> :跳到光标下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窗口切换