7.1 什么是 vim
前面多次提到过vi这个命令,它是 Linux 中必不可少的一个工具。早期的Unix都是使用的vi作为系统默认的编辑器的,没有它很多工作都无法完成。你也许会有疑问,vi与vim有什么区别?其实,vim是vi的升级版。简单的来说,vi 是老式的字处理器,不过功能已经很齐全了,但是还是有可以进步的地方,vim 则可以说是程序开发者的一项很好用的工具。很多 Linux 系统管理员都习惯用vi,那是因为他们接触 Linux 的时候用的就是vi,vim后来才比较流行。所以,无所谓用vi和vim,只要你能达到你想要的目的即可。
Vim是从 vi 发展出来的一个文本编辑器,代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。连 vim 的官方网站自己也说 vim 是一个程序开发工具而不是文字处理软件。vim 键盘图如下所示:
其实,vi 和vim最大的区别就是编辑一个文本时,vi不会显示颜色,而vim会显示颜色,显示颜色更易于用户进行编辑,其他功能没有什么区别。所以在 Linux 系统下,使用vi还是vim完全取决个人爱好而已。
7.2 Vim 常用模式
基本上 vim 共分为三种模式,分别是命令模式(Command mode),输入模式(Insert mode)和底线命令模式(Last line mode)。 这三种模式的作用分别是:
-
当我们使用命令
vim filename
编辑一个文件时,默认进入该文件的一般模式。在这个模式下,我们可以做的操作有:上下移动光标、删除某个字符、删除某行、复制、粘贴一行或者多行等。 -
一般模式下,是不可以修改某一个字符的,只能到编辑模式了。从一般模式进入编辑模式,只需你按一个键即可(i、I、a、A、o、O、r、R)。当进入编辑模式时,会在屏幕的最下一行出现“INSERT或REPLACE”的字样。从编辑模式回到一般模式只需要按一下键盘左上方的ESC键即可。
-
在一般模式下,输入 ”:” 或者 “/” 即可进入命令模式。在该模式下,你可以搜索某个字符或者字符串,也可以保存、替换、退出、显示行号等等。
简单的说,我们可以将这三个模式想成底下的图标来表示:
7.3 Vim 操作说明
7.3.1 Vim 光标移动
在一般模式下,我们可以移动光标的位置,操作方法如下:
按键 | 说明 |
---|---|
h 或 向左箭头键(←) | 光标向左移动一个字符 |
j 或 向下箭头键(↓) | 光标向下移动一个字符 |
k 或 向上箭头键(↑) | 光标向上移动一个字符 |
l 或 向右箭头键(→) | 光标向右移动一个字符 |
Ctrl + B | 屏幕『向上』移动一页 |
Ctrl + F | 屏幕『向下』移动一页 |
Ctrl + D | 屏幕『向下』移动半页 |
Ctrl + U | 屏幕『向上』移动半页 |
+ | 光标移动到非空格符的下一行 |
- | 光标移动到非空格符的上一行 |
数字0或者 Shift+6 | 移动到本行行首 |
Shift+4 | 移动到本行行尾 |
H | 光标移动到当前屏幕的最顶行 |
M | 光标移动到当前屏幕的中央那一行 |
L | 光标移动到当前屏幕的最底行 |
gg | 移动到首行 |
G | 移动到尾行 |
nG | n 为数字,移动到n行。例如:20G 则会移动到第 20 行 |
n 回车 | 光标向下移动n行 |
w | 将光标移动到下一个单词的开头 |
e | 将光标移动到当前单词的末尾 |
b | 将光标移动到上一个单词的开头 |
7.3.2 Vim 剪切复制粘贴
在一般模式下,我们还可以实现字符或者字符串的复制、删除、粘贴等操作,如下表所示:
按键 | 说明 |
---|---|
x、X | x 为向后删除一个字符, X 为向前删除一个字符 |
nx | n 为数字,连续向后删除 n 个字符。例如:10x则是连续删除 10 个字符 |
dd | 删除光标所在的那一整行 |
ndd | n 为数字。删除光标所在的向下 n 行,例如:20dd 则是删除 20 行 |
d1G | 删除光标所在到第一行的所有数据 |
dG | 删除光标所在到最后一行的所有数据 |
d0 | 那个是数字的 0 ,删除光标标所在处,到该行的最前面一个字符 |
yy | 复制光标所在的那一行 |
nyy | n 为数字。复制光标所在的向下 n 行,例如:20yy 则是复制 20 行 |
y1G | 复制光标所在行到第一行的所有数据 |
yG | 那个是数字的 0 ,复制光标所在行到最后一行的所有数据 |
y0 | 复制光标所在的那个字符到该行行首的所有数据 |
p | 从光标所在行开始,向下粘贴已复制的数据 |
P | 从光标所在行开始,向上粘贴已复制的数据 |
u | 还原上一步操作 |
v | 按v后移动光标会选中指定字符,然后可以实现复制、粘贴等操作 |
7.3.3 Vim 查找与替换
按键 | 说明 |
---|---|
/word | 向光标之后查找字符串 word,按 n 向后继续搜索 |
?word | 向光标之前查找字符串 word,按 n 向前继续搜索 |
n | 这个 n 是英文按键,代表重复前一个搜寻的动作 |
N | 这个 N 是英文按键,与 n 刚好相反,为『反向』进行前一个搜寻动作 |
😒/old/new | 用new替换当前行第一个old |
😒/old/new/g | 用new替换当前行所有的old |
:%s/old/new/g | 用new替换文件中所有的old |
7.3.4 Vim 文本插入
按键 | 说明 |
---|---|
i | 在当前字符前插入 |
I | 在光标所在行的行首插入 |
a | 在当前字符后插入 |
A | 在光标所在行的行尾插入 |
o | 在当前行的下一行插入新的一行 |
O | 在当前行的上一行插入新的一行 |
7.3.5 命令模式
按键 | 说明 |
---|---|
:w | 将编辑的数据保存 |
:w! | 强制保存。在root用户下,即使文件只读也可以保存。 |
:q | 退出 |
:q! | 强制退出,所有改动不生效 |
:wq | 保存并退出 |
:wq! | 强制保存并退出 |
:set number | 显示行号,执行之后,会在每一行的前缀显示该行的行号 |
:set nonu | 与 set nu 相反,为取消行号! |
7.3.6 Vim 排版与检查
按键 | 说明 |
---|---|
<< | 向左缩进 |
>> | 向右缩进 |
gq | 对选中的文字重排,即对过长的文字进行断行 |
gqq | 重排当前行 |
:set spell | 开启拼写检查功能,突出显示拼写错误的单词 |
:set nospell | 关闭拼写检查功能 |
7.4 附录
7.4.1 Vim优化配置
安装完成后开始配置vim,使用 vim /etc/vimrc
打开文件后,按 i 进入编辑模式,然后找一个位置添加如下代码。
" 通用设置
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
set number " 设置显示行号
set showmode " 设置在命令行界面最下面显示当前模式等
set nocompatible " 不要vim模仿vi模式
set ruler " 在右下角显示光标所在的行数等信息
set laststatus=2 " 总是显示状态栏
set cursorline " 高亮显示当前行
" 代码缩进和排版
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
set autoindent " 每次单击Enter键后,光标移动到下一行时与上一行的起始字符对齐,自动缩进
set tabstop=4 " 配置TAB键移动距离为4个空格
set nowrap " 禁止折行
" 编码设置
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
set langmenu=zh_CN.UTF-8
set helplang=cn
set termencoding=utf-8
set encoding=utf8
set fileencodings=utf8,ucs-bom,gbk,cp936,gb2312,gb18030
syntax on " 即设置语法检测,当编辑C或者Shell脚本时,关键字会用特殊颜色显示
7.4.2 在线安装 Vim
众多 Linux 发行版系统,通常都已经默认安装好了 vi 或 Vim 文本编辑器,Centos 也不例外,该系统就默认安装有 vi 文本编辑器,但建议大家使用 Vim。
-
查看一下CentOS 系统已经存在的包,确认一下Vim 是否已经安装
rpm -qa|grep vim
-
若是vim已经正确安装,则会显示下面几个包的名称:vim-filesystem、vim-minimal、im-common、vim-enhanced、vim-X11,如果缺少了其中某个,则使用如下命令安装所有vim包。
yum install -y vim*
7.4.3 离线安装 Vim
-
离线下载Vim及其所有依赖包
yum -y install vim --downloadonly --downloaddir ./
-
一次性安装所有依赖
rpm -ivh *.rpm
7.4.4 Centos8 安装Vim8.2
# 卸载原来的版本
[root@localhost ~]# yum remove vim-*
# 下载vim8.2文件
[root@localhost ~]# wget https://ftp.nluug.nl/pub/vim/unix/vim-8.2.tar.bz2
# 解压下载的文件
[root@localhost ~]# tar -jxvf vim-8.2.tar.bz2
[root@localhost ~]# ls
vim82 vim-8.2.tar.bz2
[root@localhost ~]# cd vim82/src
[root@localhost src]# ./configure
# 在配置过程(检查依赖关系)可能会碰到下面的问题:
no terminal library found
checking for tgetent()… configure: error: NOT FOUND!
You need to install a terminal library; for example ncurses.
Or specify the name of the library with –with-tlib.
[root@localhost src]# yum install ncurses ncurses-devel
# 编译
[root@localhost src]# make
# 安装
[root@localhost src]# make install
# 提示错误
[root@localhost ~]# vim
-bash: /usr/bin/vim: No such file or directory
[root@localhost ~]# which vim
/usr/local/bin/vim
# 创建软链接
[root@localhost ~]# ln -s /usr/local/bin/vim /usr/bin/vim