文本编辑器 vim

vim 的早期版本是 vi,vim 完全兼容 Vi,但它比 Vi 更强大。基本语法如下:

vim a.txt

使用 vim 打开文件后,默认是处于命令状态,我们所有的输入都会被当作命令来处理。如果我们想要编辑文件内容,就需要进入编辑模式。

编辑模式

可以通过以下命令进入编辑模式。

命令作用
a在光标所在字符后插入
A在光标所在行尾插入
i在光标所在字符前插入
I在光标所在行行首插入
o在光标下方插入新行
O在光标上方插入新行
:w保存修改
:w new filename另存为指定文件
:wq保存修改并退出,或者快捷键 Shift + z + z
:q!不保存修改并退出,! 表示强制
:wq!强制保存修改并退出(文件所有者及 root 可使用),通常用于该文件只有读操作的权限时

Esc 键退出编辑模式。

命令模式

命令作用
:set nu:set number显示行号
:set nonu取消行号
gg到第一行
G到最后一行
nG:n到第 n 行
$移动到行尾
0移动到行首
x删除光标所在处字符
nx删除光标所在处后 n 个字符
dd删除光标所在行
ndd从光标所在行开始,删除 n 行
dG删除光标所在行到文件末尾的内容
D删除光标所在处到行尾的内容
:nl,n2d删除指定范围的行
u撤销
yy复制当前行
nyy复制当前行以下 n 行
dd剪切当前行
ndd剪切当前行以下 n 行
pP粘贴在当前光标所在行下或行上
r替换光标所在处字符
R从光标所在处开始替换字符,按 Esc 结束
/搜索指定字符串,可以使用正则,使用 \ 进行转义
:set ic搜索时忽略大小写
:set noic搜索时区分大小写(默认)
n搜索指定字符串的下一个出现位置
N搜索指定字符串的上一个出现位置
:%s/old/new/g全文替换指定字符串,使用 \ 进行转义。g 表示不询问确认,c 表示询问确认
:nl,n2s/old/new/g在一定范围内替换指定字符串。n1、n2 代表行号,使用 \ 进行转义
:r file在当前光标所在行下面一行导入 file 文件中的内容
:!执行 shell 命令,如 :!which ls
:r !在当前光标所在行下面导入命令的执行结果,如导入插入当前时间 :r !date
:map在当前文件内,定义快捷键(退出后失效),如 :map ^K I#<ESC>(表示按 K 时,在当前行的行首插入字符 #,并退出编辑模式),^K 需要使用 Ctrl + v + k 来完成。
:ab替换字符串(需要在编辑模式下使用),如 :ab mail daijunfeng.me@qq.com,在编辑模式下输入 mail,然后空格或回车,就会被替换为 daijunfeng.me@qq.com

以上这些命令,我们退出文件后,就会失效。如果想要永久生效,就需要在每个用户的家目录下(root 用户的家目录在/root,普通用户的家目录在 /home/${username} 下)的 .vimrc 文件中进行设置,如下:

[djf1@daijf ~]$ whoami
djf1
[djf1@daijf ~]$ pwd
/home/djf1
[djf1@daijf ~]$ vim .vimrc 

# 在 .vimrc 中添加如下内容,这些内容在使用 vim 时,会被立即执行
ab mail daijunfeng.me@qq.com
set nu

上面这种方式是用户级别的,那怎么设置全局的呢?其实很简单,如果你使用 vi 命令,那么需要修改 /etc/virc 这个文件,如果你使用 vim 命令,那么需要修改 /etc/vimrc 这个文件。

vim 可以实现新建并编辑的功能,touch 命令只能新建。