目录
一、配置 Vim
1、常用设置
编辑配置文件:**/etc/vimrc
**
# 关闭 vi 兼容模式
set nocompatible
# 自动语法高亮
syntax on
# 设定配色方案:如果有安装这种配色方案的话
colorscheme monokai
# 显示行号
set number
# 设置自动缩进
set autoindent
# 突出显示当前行
set cursorline
# 打开状态栏标尺
set ruler
# 设定 tab 长度为 4
set tabstop=4
# 插入括号时,短暂地跳转到匹配的对应括号
set showmatch
# 开启新行时使用智能自动缩进
set smartindent
编辑完成后不需要 source
,因为 source 是在当前 shell 环境进行解析和执行指定文件里面的命令,而 vimrc 不是 shell 命令,所以进行了 source 反而会报错;而 vim 命令本身会自动读取该配置文件。
2、配置代码功能
1)设置代码自动补全功能
在 vimrc 配置文件中添加命令
set path+=头文件(include)路径
2)设置源代码查看功能
① 安装 ctags
命令
$ yum -y install ctags
② 进入头文件目录并执行添加 ctags 命令
$ cd /usr/include/
$ ctags -R
成功之后会生成相应的 tag 文件:tags
③ vimrc 配置文件中添加 ctags 路径
set tags+=/usr/include/tags
④ 源码查看方法
把光标定位在需要查看源文件的变量名或函数名中:
ctrl + ]
:跳转到源代码位置ctrl + o
:返回
或者使用末行命令:
:ta 变量或函数名
:ts 变量或函数名
二、Vim 常用命令
所谓的 vim 命令就是在 vim 的末行模式下执行的操作,正常我们使用 vim 打开文件的时候就处于该模式下,如果不知道自己处于哪种模式的话,按 ESC
键可以进入末行模式。
1、插入命令
输入命令 i
进入 insert
状,此时可以像文本编辑器一样编辑文件内容,按 esc
退出。
2、行删除命令
定位到指定行,输入 dd
(按两次 d 键)可以删除当前光标所在的行。
3、paste 模式
当我们在 vim 配置文件中设置了自动缩进和智能缩进之后,粘贴文本时会出现变形的问题。而在粘贴文本前进入末行模式输入命令 :set paste
可以进入 paste 模式,此时再插入模式下粘贴内容就不会出现变形的问题了。
4、回退命令
当我们不小心输错了信息时可以输入 u
进行回撤,相当于我们常用的 ctrl + z
。
三、Vim 多文件编辑
1、同一个窗口同时编辑多个文件
多文件同时编辑命令:
vim finename1 filename2
该命令同时打开了 filename1 和 filename2 两个文件,不过文件 filename1 的内容会占据整个 vim 窗口,要想在各个文件之间进行切换,我们可通过如下命令:
:n # 切换到下个一文件
:N # 切换到上一个文件
:e filename # 不离开vim的情况下编辑其他文件(e为edit)
通过 vim 打开的每个文件都对应着一个 buffer
,每个 buffer 都有一个 id(按文件顺序 0、1、2),所以可通过切换 buffer 来达到切换文件的目的:
:ls # 列出vim打开的所有文件的信息,包括文件名,buffer id等
:b2 # 切换到 buffer id 为2的buffer
:bn # 切换到当前buffer的下一个buffer
:bp # 切换当前buffer的前一个buffer
:bd # 关闭当前buffer,对应文件也随之关闭
:bd2 # 关闭buffer id为2的buffer,对应文件也随之关闭
2、分隔窗口,同时显示多个文件
1) 分隔创建编辑的命令:
# 水平分隔窗口
vim -o filename1 filename2
# 垂直分隔窗口
vim -O filename1 filename2
可以使用 ctrl + ww
在各个窗口之间进行切换
2) 在不关闭 vim 的情况下继续打开其他文件
:e filename # 在当前所在窗口之间打开文件
:sp filename # 水平分隔窗口打开文件
:vsp filename # 垂直分隔窗口打开文件
3) vim 和 shell 之间切换
:shell # 此时vim在后台运行,在shell中输入命令exit,切换回vim
4) 在 vim 中执行 shell 命令(不切换到 shell 中)
:!command # 在执行的命令前加上!,如!ls,!ls -a
:r !command # 将command命令的执行结果插入到文本当前行的下一行
:3 !command # 将文本中第三行的内容输入到命令command中进行处理,并将第三行的内容替换为命令的执行结果
:1,3 !command # 将文本中第一行到第三行的内容输入到命令command中进行处理,并将第一行到第三行的内容替换为命令的执行结果
:3 w !command # 将文本中第三行的内容输入到命令command中进行处理,不改变当前编辑文件的内容.
:1,3 w !command # 将文本中第一行到第三行的内容输入到命令command中进行处理,不改变当前编辑文件的内容