简介
Vim 是从 vi 发展出来的一个文本编辑器。代码补全、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。
简单的来说, vi 是老式的字处理器,不过功能已经很齐全了,但是还是有可以进步的地方。 vim 则可以说是程序开发者的一项很好用的工具。
连 vim 的官方网站 (https://www.vim.org/) 自己也说 vim 是一个程序开发工具而不是文字处理软件。
Vim 的三种模式
基本上 vi/vim 共分为三种模式,命令模式(Command Mode)、输入模式(Insert Mode)和命令行模式(Command-Line Mode)。
命令模式(Command Mode)
vim 的默认模式,即启动 vim 后就进入该模式,也称普通模式。在此模式下敲击键盘的动作会被识别为命令,而非输入字符,比如此时按下 i
,并不会输入字符 i
,而是进入输入模式。
输入模式(Insert Mode)
在命令模式下按下 i
即可进入输入模式,使用 Esc
键可以返回到命令模式。
当然也可使用 a
、o
、s
等进入输入模式。参考 附录:vi / vim graphical cheat sheet
在输入模式中,可以使用如下按键:
字符按键
以及Shift
组合 :输入字符Enter
(回车键):换行Backspace
(退格键):删除光标前的一个字符Delete
(删除键):删除光标后的一个字符方向键
:在文件中移动光标Home
/End
:移动光标到行首 / 行尾Page Up
/Page Down
:上 / 下翻页Insert
:切换光标为输入 / 替换模式,光标将变成竖线 / 下划线Esc
:退出输入模式,切换到命令模式
命令行模式(Command-Line Mode)
在命令模式下按下 :
(英文冒号)就可以进入命令行模式。
基本命令有:
:w
:保存文件:q
:退出 vim 编辑器:wq
:保存文件并退出 vim 编辑器:q!
:强制退出 vim 编辑器,不保存修改
按 Esc
键可随时退出命令行模式。
Vim 命令大全
光标移动
单个字符移动 | ||
---|---|---|
h | 向左移动 | 使用 数字+字符 可实现多个字符移动。例如:2h 向左移动 2 个字符 |
l | 向右移动 | |
j | 向下移动 | |
k | 向上移动 |
单词移动 | ||
---|---|---|
w | 将光标移动到下一个单词的开头 | 使用 数字+字符 可实现多个单词移动。例如:2w 将光标移动到第二个单词的开头 |
b | 将光标移动到前一个单词的开头 | |
e | 将光标移动到下一个单词的词尾 | |
E | 移动到单词的词尾(忽略标点符号) | |
ge | 将光标移动到上一个单词的词尾 |
行移动 | |
---|---|
$ | 将光标移动到当前行的行尾 |
0 | 将光标移动到当前行的行首 |
^ | 将光标移动到当前行的第一个非空字符(行首和第一个非空字符不一定是一个位置) |
% | 用于符号间的移动,它会在一对 () 、[] 、{} 之间跳跃 |
文本块移动 | |
---|---|
( | 移动到当前句子的开头 |
) | 移动到下一个句子的开头 |
{ | 移动到当前段的开头 |
} | 移动到下一段的开头 |
[[ | 移动到当前节的开头 |
]] | 移动到下一节的开头 |
在屏幕中移动 | ||
---|---|---|
nG | 跳转到指定的第 n 行 | G 移动到文件最后一行行首```` (2 次单引号)返回跳转前的位置 |
gg | 移动到文件开头 | |
n% | 按百分比移动。移动到文件中间,就使用 50% | |
H | 移动 home | |
M | 移动到屏幕中间 | |
L | 移动到一屏末尾 | |
Ctrl + G | 查看当前位置状态 |
文本插入操作
命令 | 说明 |
---|---|
i | 在当前光标的前面插入字符 |
a | 在当前光标的后面追加字符 |
o | 在当前光标的下一行行首插入字符 |
I | 在一行的开头添加文本 |
A | 在一行的结尾处添加文本 |
O | 在光标当前行的上一行插入文本 |
s | 删除当前光标处的字符并进入到插入模式 |
S | 删除当前光标所在的行,并进入插入模式 |
u | 撤销修改 |
文本删除操作
字符删除 | |
---|---|
x | 删除当前光标所在处的字符 |
X | 删除当前光标左边的字符 |
单词删除 | |
---|---|
dw | 删除一个单词 (从光标处到空格) |
daw | 删除光标所在的整个单词(无论光标在什么位置,包括空白字符) |
diw | 删除整个单词文本(保留空格字符) |
d2w | 删除从光标开始处的 2 个单词 |
d$ | 删除从光标到一行末尾的整个文本 |
d0 | 删除从光标到一行开头的所有单词 |
dl | 删除当前光标处的字符(等价于 x ) |
dh | 删除当前光标左边的字符(等价于 X ) |
行删除 | |
---|---|
dd | 删除从当前光标处的一整行(等价于 D ) |
5dd | 删除从光标开始处的 5 行代码 |
dgg | 删除从光标到文本开头 |
dG | 删除从光标到文本结尾 |
行合并 | |
---|---|
J | 删除一个分行符,将当前行与下一行合并 |
文本复制、剪切与粘贴
y
:复制p
:粘贴yw
:复制一个单词。 【拓展】y2w
:复制 2 个单词y$
:复制从当前光标到行尾的所有单词y0
:复制从当前光标到行首的所有单词yy
:复制一整行 【拓展】2yy
:复制从当前光标所在行的 2 行
复制文本块
- 首先进入 visual 模式:
v
- 移动光标选择文本
- 复制与粘贴操作。
文本修改与替换
cw
:删除从光标处到单词结尾的文本并进入到输入模式cb
:删除从光标处到单词开头的文本并进入到输入模式cc
:删除一整行并进入到输入模式~
:修改光标下字符的大小写r
:替换当前光标下的字符R
:进入到替换模式xp
:交换光标和下一个字符
文本查找与替换
/string
:正向查找。例如:/123
从光标处开始往后查找字符串123
?string
:反向查找。例如:?123
从光标处开始往前查找字符串123
:s/old/new
:将当前行的第一个字符串old
替换为new
:s/old/new/g
:将当前行的所有字符串old
替换为new
:90s/old/new/g
:将指定行的所有字符串old
替换为new
:90,93s/old/new/g
:将指定范围的行的所有字符串old
替换为new
:%s/old/new/g
:将文本中所有的字符串old
替换为new
:%s/old/new/gc
:依次替换每个字符串关键字:%s/^old/new/g
:将所有以old
开头的字符串替换为new
高亮显示
:set hls
设置高亮显示。
*
键将当前光标处的单词高亮显示,使用 n
浏览下一个查找结果。
撤销修改、重做与保存
u
:撤销上一步操作Ctrl + r
:将原来的操作重做一遍:U
:恢复一整行(文件打开时的状态):q
:若文件没有修改,直接退出:q!
:若文件已经修改,放弃修改退出:wq
:若文件已经修改,保存修改并退出:e!
:放弃修改,重新回到文件打开时的状态
Vim 环境变更
如果在 windows 下使用 gvim,以下设置基本可以通过 gvim 设置调整。
指令 | 描述 |
---|---|
:set nu | 显示行号 |
:set nonu | 取消行号 |
:set ts=4 | 设置 tab space 为 4 个空格(等价于 :set tabstop=4 ) |
:set expandtab | 将 tab 替换为指定数量的空格 |
:set autoindent | 设置为自动缩进 |
:set wrap | 启动折行 |
:set nowrap | 禁止折行 |
:set autoread | 设置当文件变化时,自动读取新文件 |
:set hls | 设置搜索结果高亮(等价于 :set hlsearch ) |
:set nohls | 关闭搜索结果高亮(等价于 :set nohlsearch ) |
:set guifont=consolas:h14 | 设置字体为 consolas,字号为 14 |
:set history=700 | 设置保存命令的行数 |
:set ff=unix | 将文件切换为 unix 格式,每行以 \n 结尾 |
:set ff=dos | 将文件切换为 Windows 格式,每行以 \r\n 结尾 |
:set enconding=utf-8 | 设置 vim 展示文本时的编码格式 |
:set fileencoding=utf-8 | 设置 vim 写入文件时的编码格式 |
:set filetype=html | 设置文件类型,方便语法高亮 |
:set background=dark | 设置背景颜色 |
状态查询
Vim 查询当前状态的命令,形式是一般命令后面添加 ?
|
|
示例:使用 :set ff=dos
设置文件格式,那么就可以使用 :set ff?
:查询当前的文件格式。
感谢您的耐心阅读!来选个表情,或者留个评论吧!