命令简介

vim 是 Linux 系统中一款非常强大和流行的文本编辑器。它不仅功能丰富、高度可定制,而且操作高效、占用资源少,是系统管理员和程序员的首选编辑工具。

命令格式

1
vim [选项] 文件名

其中:

  • 选项: 指定 vim 命令的选项。
  • 文件名: 指定要编辑的文件。

参数说明

参数 说明 备注
-c cmd 在打开文件后执行指定命令 -c "set number"
-r file 恢复上次异常退出时的文件 -
-R 以只读模式打开文件 不能编辑或保存文件
-m 禁止修改文件,强制成只读模式 -
-y 启动易用的 vim 模式 类似于 evim 程序
-u file 使用指定的 vimrc 文件 用于自定义 vim 配置
-U file 同上,并跳过系统 vimrc 文件 -

命令实例

基本用法

vim 有通俗的三种模式,分别为:一般模式、编辑模式和命令模式。下面对这三种模式分别加以说明

一般模式

当你使用 vim 打开一个文件时,一进入该文件就是一般模式了。在这个模式下,你可以做的操作有,上下移动光标;删除某个字符;删除某行;复制、粘贴一行或者多行。

一般模式下的光标移动
说明 备注
h 或向左方向键 光标向左移动一个字符 -
l 或向右方向键 光标向右移动一个字符 -
k 或向上方向键 光标向上移动一个字符 -
j 或向下方向键 光标向下移动一个字符 -
PgUP 键 屏幕向前(上)移动一页 -
PgDn 键 屏幕向后(下)移动一页 -
ctrl + u 屏幕向前(上)移动半页 -
ctrl + d 屏幕向后(下)移动半页 -
+ 光标移动到非空个符的下一行行首 -
- 光标移动到非空个符的上一行行首 -
n 空格 (n 代表数字,非字母 n) 按下数字 n 然后按空格,则光标向右移动 n 个字符。如果改行字符数小于 n, 则光比继续从下行开始向右移动,一直到 n。 -
0 (数字 0,非字母 o) 或者 shift 6 移动到本行行首 -
shift 4 $ 移动到本行行尾 -
H 光标移动到当前屏幕的最顶行行首 -
M 光标移动到当前屏幕的中央那一行行首 -
L 光标移动到当前屏幕的最底行行首 -
G 光标移动到文本的最末行行首 -
nG (n 是数字,非字母 n) 光标移动到该文本的第 n 行 -
gg 光标移动到该文本的首行 -
n 回车 (n 是数字,非字母 n) 光标向下移动 n 行

1.导航和移动

1
2
3
4
5
6
7
8
9
10
11
# 上下左右移动光标
hjkl

# 移动到行首/行尾
0/$

# 移动到文件头/文件尾
gg/G

# 向下/向上翻页
<Ctrl+f>/<Ctrl+b>
一般模式下的查找与替换
说明 备注
/word 向光标所在之处的后面查找字符串名为 word 的字符串,当找到第一个 word 后,按字母 n 继续搜索下一个 -
?word 向光标所在之处的前面查找字符串名为 word 的字符串,当找到第一个 word 后,按字母 n 继续搜索下一个 -
:n1,n2s/word1/word2/g 在n1 和 n2 行之间查找 word1 这个字符串并替换为 word2, 你也可以把 / 换成 # n1,n2 表示的是数字范围(比如1,5 代表第一行到第五行);g 表示全部替换,不加的话只替换第一个匹配的字符串;/ 表示间隔符,替换的字符中间用 / 隔开
1,$s/word1/word2/g 从第一行到最末行,查找 word1 并替换成 word2 -
1,$s/word2/word2/gc 从第一行到最末行,查找 word1 并替换成 word2,只是在替换前需要用户手动确认 c 交互

1.查找和替换

1
2
3
4
5
6
7
8
# 查找字符串
/pattern

# 替换第一个匹配项
1,$s/old/new/

# 替换所有匹配项
1,$s/old/new/g
一般模式下的删除、复制及粘贴
说明 备注
x 向后删除一个字符 字母小写 x
X 向前删除一个字符 字母大写 X
nd (n 为数字,非字母) 向后删除 n 个字符 -
dd 删除光标所在的那一行 -
ndd (n 为数字,非字母) 删除光标所在的向下 n 行 -
d1G 删除光标所在的行到第一行的所有数据 -
dG 删除光标所在行到末行的所有数据 -
yy 复制光标所在的那行 -
nyy(n 为数字,非字母) 复制从光标所在行起向下 n 行 -
p 复制的数据从光标下一行粘贴 小写字母 p
P 复制的数据从光标上一行粘贴 大写字母 P
y1G 复制光标所在行到第一行的所有数据 -
yG 复制光标所在行到末行的所有数据 -
J 将光标所在行与下一行的数据结合成同一行 -
u 还原操作 没执行一次 u 的操作就会向上还原一次文件的改动

1.复制、粘贴和删除

1
2
3
4
5
6
7
8
9
10
11
# 复制当前行
yy

# 粘贴
p

# 删除当前行
dd

# 删除单词
dw

2.撤销和重做

1
2
3
4
5
# 撤销上一步操作
u

# 重做上一步操作
<Ctrl+r>

编辑模式

编辑模式:一般模式下,是不可以修改某一个字符的,只能到编辑模式了。从一般模式进入编辑模式,只需你按一个键即可(i, I, a, A, o, O, r, R)。当进入编辑模式时,会在屏幕的最下一行出现“INSERT或REPLACE”的字样。从编辑模式回到一般模式只需要按一下键盘左上方的ESC键即可。

说明 备注
i 在当前字符前插入字符 -
I 在当前行行首插入字符 -
a 在当前字符后插入字符 -
A 在当前行行末插入字符 -
o 在当前行下插入新的一行 小写字母 o, 非数字 0
O 在当前行上掺入新的一行 -
r 替换光标所在的字符,之替换一次 -
R 一直替换光标所在的字符,直到按下 ESC -

命令行模式

命令模式:在一般模式下,输入 ”:” 或者 “/” 即可进入命令模式。在该模式下,你可以搜索某个字符或者字符串,也可以保存、替换、退出、显示行号等等。

说明 备注
:w 将编辑过的文件保存 -
:w! 若文本属性为只读时,强制保存 -
:q 退出 vim -
:q! 不管编辑或未编辑都不保存退出 -
:wq! 保存,退出 -
:e! 将文档还原成最原始状态 -
ZZ 若文档没有改动,则不储存离开;若文档改动过,则存储后离开,等同于 :wq -
:w [filename] 编辑后的文档另存为 filename -
:r [filename] 在当前光标所在的行的下面读入 filename 文档的内容 -
:set nu 在每行行首显示行号 -
:set nonu 取消行号 -
n1,n2 w [filename] 将 n1 到 n2 的内容另存为 filename 这个文档 -
:! command 暂时离开 vim 一运行某个 linux 命令,例如: :! ls /home 暂时列出 /home 目录下的文件,然后会提示按回车回到 vim -

1.基本编辑操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 打开文件
vim file.txt

# 插入模式下编辑文件
i

# 退出编辑模式
<Esc>

# 保存修改并退出
:wq

# 不保存退出
:q!

扩展用法

1.配置 .vimrc 文件

.vimrc 是 vim 的配置文件,可以自定义各种设置和快捷键映射。

1
2
3
4
5
6
7
set number
syntax on
set tabstop=4
set paste

nnoremap <C-s> :w<CR>
inoremap <C-h> <Left>

基本设置

  • set number:在 Vim 中,set number 命令用于显示行号。启用此选项后,Vim 会在每一行的左侧显示行号,便于用户在编辑文件时快速定位到某一行。
  • syntax on:syntax on 命令用于在 Vim 编辑器中启用语法高亮功能。启用此选项后,Vim 将根据文件的语法类型自动着色代码,以便更容易地识别关键字、注释、字符串等部分。这有助于提高代码的可读性,并帮助开发者更有效地编写和修改代码。
  • set tabstop=4:在 Vim 中,set tabstop=4 命令用于设置制表符的宽度为 4 个空格。这意味着当你按下 Tab 键时,Vim 会自动插入四个空格,而不是一个制表符字符。这样可以确保在不同的编辑器或显示器上显示相同的缩进,并且能够更好地控制代码的排版。
  • set paste:在 Vim 中,使用 set paste 命令可以将编辑器切换到”粘贴模式”。在粘贴模式下,Vim 会禁用自动缩进、自动格式化等功能,以便更好地处理粘贴的文本,特别是从其他应用程序中复制的文本。这样可以避免因自动格式化引起的格式混乱和错误缩进。当你想粘贴文本到 Vim 中时,尤其是从终端或其他应用程序中复制的文本时,建议先执行 set paste 命令,粘贴完毕后再执行 set nopaste 命令以返回正常模式。

键盘映射

  • nnoremap <C-s> :w<CR>这个命令是在 Vim 中设置一个键盘映射,它的作用是在普通模式下按下 Ctrl + s 键时,执行保存当前文件的操作(相当于输入 :w<CR>)。

  • 解释一下:

    • nnoremap 表示在普通模式下(normal mode)进行键盘映射。它会忽略递归映射,这样做可以避免一些意外的行为发生。
    • <C-s> 表示 Ctrl + s 键,这是你按下的键的组合。
    • :w<CR> 是 Vim 的命令模式下保存文件的命令,其中 :w 表示保存操作,<CR> 表示回车键,用于执行命令。
  • 因此,这个键盘映射的作用就是在普通模式下按下 Ctrl + s 键时,执行保存当前文件的操作。

  • inoremap <C-h> <Left>在 Vim 中,inoremap <C-h> <Left> 的作用是将组合键 Ctrl + h 映射为光标向左移动一格。这样,在插入模式下按下 Ctrl + h 就相当于按下了左方向键,光标会向左移动一格。

2.插件管理

vim 支持各种插件,可以扩展其功能。常用的插件管理工具有 VundlePathogen 等。

1
2
3
4
5
6
7
8
9
10
11
12
" 使用 Vundle 管理插件
set nocompatible
filetype off
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()

Plugin 'VundleVim/Vundle.vim' " Vundle 插件管理器
Plugin 'preservim/nerdtree' " 文件树浏览器
Plugin 'dense-analysis/ale' " 代码检查工具

call vundle#end()
filetype plugin indent on

3.多文件编辑

vim 支持同时编辑多个文件,可以在不同缓冲区之间切换。

1
2
3
4
5
6
7
# 打开多个文件
vim file1.txt file2.py file3.js

# 切换缓冲区
:bn " 下一个缓冲区
:bp " 上一个缓冲区
:b 2 " 切换到第二个缓冲区

高级用法

1.录制宏

vim 可以录制一系列操作为宏,以后可以直接执行该宏来重复这些操作。

1
2
3
4
5
6
7
8
9
10
# 开始录制宏
qq

# 执行一系列操作...

# 停止录制
q

# 执行录制的宏
@q

2.使用分屏功能

1
2
vim -o file1.txt file2.txt    " 水平分屏
vim -O file1.txt file2.txt " 垂直分屏

3.使用标签页功能

1
2
vim -p file1.txt file2.txt    " 打开多个文件,每个文件在一个标签页中显示
:tabe file3.txt " 在当前标签页中打开新文件

通过以上实例和扩展用法,相信你已经对 vim 命令有了更深入的了解。它是一款功能强大、高度可定制的文本编辑器,值得每一位 Linux 用户学习和掌握。如果你还有任何疑问或需要进一步探讨,欢迎随时向我提出。