Linux 常用文本编辑器 Vi && Vim 使用指南

Vi && Vim 是 Linux 下常用的纯文本编辑器,Vim 是 Vi 的增强版。掌握 Vim && Vi 的常见用法是非常有必要的。

Vi && Vim

Vi 最早是 Unix 系统中自带的文本编辑器,是可视化编辑器之前推出的最早的编辑器,支持简单的文本编辑功能。

而 Vim 是 Vi 的增强版本,向下兼容 Vi,提供了比 Vi 更多的功能:如 语法高亮显示、代码补全、多级撤销、分屏编辑等等,并且支持丰富的插件扩展。

👇👇👇 为什么倾向于使用 Vim ? 👇👇👇

  1. 支持快速导航和定位:Vim 提供了强大的命令行和快捷键,可快速在文本中导航和定位到指定位置;
  2. 支持多重撤销和恢复:Vim 支持多级撤销和恢复,可随时回退到文本先前的状态,避免了误操作所带来的困扰;
  3. 支持自动补全和代码片段插入:Vim 支持自动补全(智能提示);并且,可以通过预设的代码片段快速插入常用代码结构,提高编写效率;
  4. 支持全文搜索和替换功能:Vim 提供了灵活而高效的搜索和替换功能,可以快速找到并修改指定的文本内容;
  5. 支持多窗口和分屏编辑:Vim 支持水平和垂直分屏以同时打开多个窗口,方便对多个文件进行同时编辑和比对;
  6. 多语言支持和语法高亮:Vim 内置了对多种编程语言的支持,并提供了语法高亮功能;
  7. 高度可定制化:Vim 提供了丰富的配置选项和插件系统,可以根据个人喜好和需求进行灵活的定制,使其适应不同的编辑需求。

目前,基于 Vim 逐渐出现了 GVim(GUI Vim)、Neovimlin.vim 等等更加强大复杂的发行版,使得 Vim 越来越多的靠近 IDE 了。

| ================================================== Split Line =============================================== |

👇👇👇 Vim Setup 👇👇👇

检查当前 OS 是否安装有 Vim:

1
2
$ vim --version
IM - Vi IMproved 7.4 (2013 Aug 10, compiled Aug 9 2019 03:17:15)

如果没有输出 Vim 版本信息,可使用如下方法进行安装:

1
2
3
4
5
6
7
8
9
10
11
12
# For Ubuntu/Debian
$ sudo apt-get update
$ sudo apt-get install vim

# For CentOS/RHEL
$ sudo yum install vim

# For Fedora
sudo dnf install vim

# For Arch Linux
$ sudo pacman -S vim

Vim 工作模式

Vim 最常用的三种模式:命令模式 (Command Mode)、底行模式 (Last Line Mode)、插入模式 (Insert Mode)


Command Mode

Vi/Vim 编辑器启动后,默认进入的就是命令模式(Command Mode),系统默认任何输入都是命令

你可以在启动的 Vim 界面下方看到打开的文件的相关信息:文件相对路径 & 文件中包含行数|字符数 & 当前光标所处的位置 等。

命令行模式(Command Mode)下,主要是执行一些快捷键指令:

| ================================================== Split Line =============================================== |

移动光标

移动光标快捷键:

↓↓↓↓↓↓ 上下左右移动光标 ↓↓↓↓↓↓

1
2
# 可通过:h (左) | j (下) | k (上) | l (右) 字母键,移动光标
# 可通过:上|下|左|右 方向键,移动光标

↓↓↓↓↓↓ 光标移动到文件头或文件尾 ↓↓↓↓↓↓

1
2
# 可通过:gg 字母键,将光标移动到文件头
# 可通过:G (Shift + g) 字母键,将光标移动到文件尾

↓↓↓↓↓↓ 光标向前或向后滚动一页 ↓↓↓↓↓↓

1
2
# 可通过:Ctrl + f(PgUp)组合键,将屏幕向前(下)滚动一页
# 可通过:Ctrl + b(PgDn)组合键,将屏幕向后(上)滚动一页

↓↓↓↓↓↓ 光标移动到当前行的行首或行尾 ↓↓↓↓↓↓

1
2
# 可通过:^(Shift + 6)组合键,将光标移动到行首
# 可通过:$(Shift + 4)组合键,将光标移动到行尾

↓↓↓↓↓↓ 移动到文件中的指定行 ↓↓↓↓↓↓

1
# 可通过::n 命令,然后 Enter,将光标移动到文件的指定行

| ================================================== Split Line =============================================== |

文件编辑

文件编辑相关的快捷键:

↓↓↓↓↓↓ 删除字母 ↓↓↓↓↓↓

1
2
# 可通过:x 字母键,向向后进行删除;等同于 Del 键
# 可通过:Shift + x(X) 组合键,向向前进行删除;等同于 BlackSpace 键

↓↓↓↓↓↓ 删除或剪切整行 ↓↓↓↓↓↓

1
2
3
4
5
6
7
# 可通过:dd 字母键,删除整行
# 可通过:ndd 字母键,删除多行

# 可通过:":n1,n2d" 多个键, 删除指定范围(n1~n2)的行

# 可通过:dG 字母键,从光标所在行删除到文件尾
# 可通过:d1G 组合键,从光标所在行删除到文件头

删除行或多行,是比较常用的删除方法。删除内容被放入了剪切板缓冲区:如果不粘贴就是删除,粘贴就是剪切。

↓↓↓↓↓↓ 复制 ↓↓↓↓↓↓

1
2
3
4
5
# 可通过:yy 字母键,复制光标所在的一整行到缓冲区
# 可通过:nyy 组合键,复制光标所在的向下 n 行到缓冲区

# 可通过:yG 字母键,复制光标所在行以及之后的所有行到缓冲区
# 可通过:y1G 组合键,复制光标所在行到第一行的字符到缓冲区

↓↓↓↓↓↓ 粘贴 ↓↓↓↓↓↓

剪切或复制后,可以使用粘贴快捷键:

1
2
# 可通过:p 字母键,将已复制/剪切的数据粘贴到光标下一行
# 可通过:Shift + p(P)组合键,将已复制/剪切的数据粘贴到光标上一行

↓↓↓↓↓↓ 撤销/反撤销 ↓↓↓↓↓↓

1
2
# 可通过:u 字母键,支持一直撤销到文件打开时的状态
# 可通过:Ctrl + r 组合键,支持一直反撤销到最后一次操作状态

↓↓↓↓↓↓ 快速查找和替换 ↓↓↓↓↓↓

1
2
# 可通过:* 键,来对当前单词进行快速查找;继续按下 *(n/N) 键可以跳转到下一个匹配项
# 可通过:Shift + r 组合键进入行替换模式,从光标所在处开始替换字符,按 ESC 键结束

↓↓↓↓↓↓ 注释或取消注释(行首插入) ↓↓↓↓↓↓

1
2
3
4
5
6
7
8
9
10
11
12
### 1. 注释 ###
1. Ctrl +v 进入 Visual Block 块选择模式
2. 选中要插入注释的几行语句,光标停留在最后一行
3. 输入 Shift + i(I),进入 Insert 模式
4. 输入要插入的内容(# | //)
5. ESC 退出,稍等一会儿就可以了


### 2. 取消注释 ###
1. Ctrl +v 进入 Visual Block 块选择模式
2. 选中要删除注释的几行语句,光标停留在最后一行
3. d 删除

↓↓↓↓↓↓ 文件查找和替换 ↓↓↓↓↓↓

文件中关键字(keyword)查找:

1
2
3
4
5
6
7
8
9
10
# 1. 可通过:/ 键进入正向查找模式(从光标所在行向下查找):
# 输入查找关键词 /keyword,按下 Enter 键后,Vi/Vim 会向下定位到第一个匹配的位置。
#
# Next >>> 使用 n 键可以跳转到下一个匹配项,使用 N 键则可以跳转到上一个匹配项。
#
# 2. 可通过:? 键进入反向向查找模式(从光标所在行向上查找):
# 输入查找关键词 ?keyword,按下 Enter 键后,Vi/Vim 会向上定位到第一个匹配的位置。


# 可通过:":nohl" 退出查找(高亮)模式。

文件中内容替换:

1
2
3
4
5
6
7
8
9
10
11
12
13
# 可以通过:":%s/target/replacement/g" 命令,进行全局替换((% 代表整篇文档;s 表示替换;target 待替换文本;replacement 替换后文本),Enter 确认。
# 可以通过:":1,10s/target/replacement/g" 命令,替换 1 到 10 行所有 target 为 replacement
#
# 使用替换命令进行快速注释:
# 可以通过:":1,10s/^/#/g" 命令,注释 1 到 10 行
# 可以通过:":1,10s/^#//g" 命令,取消 1 到 10 行的注释


# 替换命令中使用分组和引用:
# 1)可使用圆括号来创建匹配的分组
# 2)在替换命令中使用 \1、\2 等来引用分组
#
# 可以使用 ":%s/\(yifan\)/\1 online/g" 来将文件中的 "yifan" 替换为 "yifan online"。

Insert Mode

Vi/Vim 在命令模式下,可以 通过快捷插入命令 a i o 来进入插入模式(Insert Mode)。

↓↓↓↓↓↓ 常用插入命令 ↓↓↓↓↓↓

1
2
3
4
5
6
7
8
# a >>> 在光标所在的字符后插入;
# A >>> 在光标所在的行尾插入;

# i >>> 在光标所在的字符前插入;
# I >>> 在光标所在的行首插入;

# o >>> 在光标下插入新行;
# O >>> 在光标上插入新行;

Vi/Vim 编辑器最后一行显示一个 “–INSERT–” 或 “–REPLACE–” 标志着其进入了 插入(输入/编辑)模式。

插入模式(Insert Mode)下,主要用于文本编辑,也就是编写代码,Esc 后返回命令模式(Command Mode)


Last Line Mode

Vi/Vim 在命令模式下,可以 通过快捷字母键 冒号 :(Shift + ;) 来进入底行模式(Last Line Mode)。

底行模式(Last Line Mode),也称命令行模式,主要是执行相关的底行命令,Esc 后返回命令模式(Command Mode)

| ================================================== Split Line =============================================== |

↓↓↓↓↓↓ 常见操作命令 ↓↓↓↓↓↓

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
:w               >>>> 保存当前文件到磁盘(存盘)
:w! >>>> 若文件属性为 “只读”,可以将数据强制写入文件(存盘)
:q >>>> 关闭当前文件,并退出 Vi/Vim
:q! >>>> 放弃对当前文件的修改,并强制退出
:wq >>>> 保存对当前文件的修改,并退出;等同于 ":x"
:wq! >>>> 若文件属性为 “只读”,可以将数据强制写入文件,并退出
:ZZ >>>> 若文件更改,则存储后退出;若文件没有发生更改,则不存储退出


:f >>>> 显示当前光标所在行列的位置信息,以及显示比例
:w [filename] >>>> 文件另存为 filename
:r [filename] >>>> 读取文件 filename 内容,并将其导入光标后

:! >>>> 在 Vim 中执行系统命令 (不把系统命令的结果写入到文件中)
:r! >>>> 在 Vim 中执行系统命令,并把命令结果导入光标所在行

:e [filename] >>>> 打开指定的文件
# 多个窗口编辑同一个文件时,在任意一个窗口进行编辑,那么所有相同文件的窗口上都会同时反应效果,这是由于共享同一个文件缓冲区
:sp [filename] >>>> 在新的水平分割窗口中打开指定文件(Ctrl + w + w(或上下左右)快速切换窗口)
:vsp [filename] >>>> 在新的垂直分割窗口中打开指定文件(Ctrl + w + w(或上下左右)快速切换窗口)
# 你可以通过:`vim -o/O test1 test2` 同时分屏打开两个文件,大小 O 表示垂直分屏

:n >>>> 如果同时打开多个文件,则继续编辑下一个文件
:bn >>>> 如果同时打开多个文件,则继续编辑下一个文件
:bp >>>> 如果同时打开多个文件,则继续编辑上一个文件

Vim 配置

学会了 Vi/Vim 的工作模式之后,你会发现:

  • 界面太过简单,可以说是简陋
  • 编写程序时没有基本的自动缩进、高亮、自动补齐等功能,使得用起来极度不方便

我们前面提到的:自动补全和代码片段插入 && 多语言支持和语法高亮 等等功能 去哪里了?!!

事实上,我们需要对 Vim 的配置文件 .vimrc 来进行一定的配置,才可以开启上面的功能。

| ================================================== Split Line =============================================== |

初始 Vim 配置文件

Linux 允许我们修改 Vim 的配置信息,使其具有更加丰富的功能。对 Vim 编辑器的配置信息,存放在 .vimrc 这个隐藏配置文件中。

Vim 的全局配置一般在 /etc/vim/vimrc 或者 /etc/vimrc,对所有用户生效。用户个人的配置在 ~/.vimrc

也就是说,root 超级用户账户中,.vimrc 隐藏配置文件默认就在 root 账户的默认用户目录下(/root)。而对于普通用户账户中,.vimrc 配置文件不会被默认创建,需要自己手动在默认用户目录下进行创建 (/home/user/.vimrc)。

想要让自己的 Vim 编辑器具有某种内置功能,只需要在 .vimrc 文件中输入对应的指令就可以了:

1
2
3
4
5
6
7
8
9
set nocompatible " 关闭 vi 兼容模式
syntax on " 自动语法高亮
set number " 显示行号
set cursorline " 突出显示当前行
set ruler " 打开状态栏标尺
set shiftwidth=4 " 设定 << 和 >> 命令移动时的宽度为 4
set softtabstop=4 " 使得按退格键时可以一次删掉 4 个空格
set tabstop=4 " 设定 tab 长度为 4
....

当然了,如果想要一条条的向 .vimrc 文件输入各种指令最终实现自己预想的美观的 Vim 编辑器,这个过程肯定是费时且费力的。网络上已经有很多大佬分享了他们的开箱即用 .vimrc 配置文件内容,以帮助你快速完成 Vim 的配置。


Vim 插件支持

Vim 还提供了丰富的插件支持,可以根据个人喜好和需求进行灵活的安装定制,使其适应不同的编辑需求。

Vundle 是一个 Vim 插件管理器,使用它可以方便地安装和管理 Vim 相关插件。

以常用编码插件为例:

  • YouCompleteMe:是一个功能强大的代码智能提示插件,支持多种编程语言。安装 YouCompleteMe 插件后,可以根据需要进行配置,并使用快捷键来触发代码自动完成功能。
  • vim-autoformat:是一个代码格式化插件,支持多种编程语言的代码格式化,并且可以自定义格式化选项。安装 vim-autoformat 插件后,可以使用快捷键来格式化代码。

想要在 Vim 中使用插件(YouCompleteMe/vim-autoformat)功能时,你需要在 Vim 的配置文件中配置启用 Vundle 来管理插件,并且需要在配置文件中安装插件,最后完成相应插件的个性化配置之后就可以体验其功能了:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
syntax on
set number

" 设置 Vundle 和初始化相关的 runtime path
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()('~/some/path/here')

" 使用 Vundle 安装插件
Plugin 'Valloric/YouCompleteMe'
Plugin 'Chiel92/vim-autoformat'

call vundle#end()

" YouCompleteMe 配置
let g:ycm_filetype_blacklist = {'tagbar': 1}
let g:ycm_key_invoke_completion = '<C-Space>'

" vim-autoformat 配置
let g:autoformat_autoindent = 1
let g:autoformat_retab = 0

" 快捷键配置
nnoremap <F2> :YcmCompleter GoToDefinitionElseDeclaration<CR>
nnoremap <F3> :YcmCompleter GoToDefinition<CR>
nnoremap <F4> :Autoformat<CR>

这里,我们不对插件进行更多的说明是因为,我们一般会选用别人配置好的 Vim 配置方案,可以在实际使用过程中边体验其功能边学习。


Author

Waldeinsamkeit

Posted on

2015-02-02

Updated on

2024-03-17

Licensed under

You need to set install_url to use ShareThis. Please set it in _config.yml.

Comments

You forgot to set the shortname for Disqus. Please set it in _config.yml.