1049-优雅玩转Vim
https://www.imooc.com/learn/1049
简介:Vim作为Linux 平台首选编辑器,无论是运维还是开发等IT人员都应该系统地学习下这款优秀经典的上古神器。本课程系统提炼vim 的精华、通过抛砖引玉把它展现到你的面前,更能让你的工作如虎添翼、事半功倍。
目录
第1章 课程介绍
Vim课程介绍。
1-1 课程简介 (04:34)
在所有的类Unix操作系统中都会默认内置Vi/Vim文本编辑器
Vim简介
- Vim和Vi的区别
- Vimrc配置
- Vim四种模式
基础入门
- Vim寄存器(类似于Windows的粘贴板)
- 增查删改等常规操作(快捷键、按键)
- Vim组合规律
高级功能
- 缓冲区与多文件编辑
- 多窗口与标签分组
- 文本对象和宏
- Visual模式
第2章 Vim简介
为什么选择Vim作为编辑器,Vim安装与简洁Vimrc配置
2-1 vim介绍及Vimrc (18:02)
Vim介绍:
- Vim是一个Unix以及类Unix文本编辑器
- 特点:功能强大、高度可定制(Vimrc、插件等)
Vim vs Vi:
Vim = Vi + IMproved
- 多级撤销
- 语法加亮和自动补全
- 支持多种插件
- 通过网络协议(HTTP/SSH)编辑文件
- 多文件编辑
- Vim可以编辑压缩格式文件(gzip、zip等)
Vimrc概述:
- rc = run command
- 系统级vimrc和用户级vimrc
- 每一行作为一个命令执行
Vimrc使用:
默认.Vimrc是没有得。需要用户自己手动创建。Vim 会自动搜索到。
:h vimrc
查看Vimrc文档:version
查看vim版本vim <filename>
或:e <filename>
打开文件📃“
注释Vimrc-Sample:https://raw.githubusercontent.com/yangvipguang/vimrc-sample/master/vimrc-sample
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Sample vimrc "
" "
" Provided by: "
" Tuyk "
" "
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
syntax on " 自动语法高亮
" Save 1,000 items in history " 设置历史行号
set history=1000
" Show the line and column number of the cursor position " 设置光标的位置值
set ruler
" Display the incomplete commands in the bottom right-hand side of your screen.
set showcmd
" Display completion matches on your status line
set wildmenu
" Show a few lines of context around the cursor
set scrolloff=5
" Highlight search matches " 设置查找的值高亮显示
set hlsearch
" Enable incremental searching " 设置边搜索边高亮
set incsearch
" Ignore case when searching " 设置忽略查找选项的大小写
set ignorecase
" Override the 'ignorecase' option if the search pattern contains upper case characters.
set smartcase
" Turn on line numbering " 显示行号
set number
" Turn on file backups
set backup
" Don't line wrap mid-word.
set lbr
" Copy the indentation from the current line. " 设置自动复制上一行的缩进到下一行
set autoindent
" Enable smart autoindenting. " 设置自动识别“{}”缩进,写代码非常有用
set smartindent
" Use spaces instead of tabs " 使用空格替换tab
set expandtab
" Enable smart tabs
set smarttab
" Make a tab equal to 4 spaces
set shiftwidth=4 " 默认缩进4个空格
set tabstop=4 " tab 代表4个空格
set softtabstop=4 " 使用tab时 tab空格数
" Specifiy a color scheme.
colorscheme slate
" Tell vim what background you are using " 设置背景颜色
" set bg=light
" set bg=dark
" Map Y to act like D and C, i.e. yank until EOL, rather than act like yy " Map 映射
" map Y y$
" Remap VIM 0 to first non-blank character
" map 0 ^
" Easily create HTML unorded lists.
" map <F3> i<ul><CR><Space><Space><li></li><CR><Esc>I</ul><Esc>kcit
" map <F4> <Esc>o<li></li><Esc>cit
" change the mapleader from \ to ,
" NOTE: This has to be set before <leader> is used.
" let mapleader=","
" Quickly save your file.
" map <leader>w :w!<cr>
" For more options see ":help option-list" and ":options".
2-2 vim的四种模式 (05:22)
- 普通模式
- 打开的默认模式
- 移查删改
- 可视化模式
- 对一块区域操作
- 插入模式
- 添加文本
- 命令模式
- 和普通模式类似
v
:进入可视化模式
i
:进入插入模式
:
:使用命令模式
dd
:删除
Esc
:返回普通模式
:h vim-modes-intro
:查看vim模式文档(7种)
第3章 Vim基础入门
本章主要讲解移动、跳转与缩进,删除、复制与粘贴,修改、查找与替换相关内容。
3-1 移动、跳转与缩进 (07:55)
Vim布局起源
Vim最初的作者Bill Joy使用的机器ADM-3A终端机
注意看上下左右键的位置
光标移动:
快捷键 | 说明 |
---|---|
h |
左移 |
l |
右移 |
j |
下移 |
k |
上移 |
shift+6 /0 |
移动到行首^ /包含缩进空格 |
shift+4 |
移动到行尾$ |
单词和字符移动:
快捷键 | 说明 |
---|---|
w/W | 正向移动到下一个单词开头(小写识别特殊字符) |
e/E | 正向移动到下一个单词结尾 |
b/B | 反向移动到上一个单词开头 |
ge | 反向移动到上一个单词结尾 |

跳转:
快捷键 | 说明 |
---|---|
control+b/B |
上一页 |
control+f/F |
下一页 |
control+u/d |
向上/下翻半页 |
gg |
跳转到文件📁首行 |
G |
跳转到文件📁尾行 |
<line_number>gg/G |
跳转到指定行 |
{g}+control+g/G |
查看文件信息/{g}更加详细 |
缩进:
快捷键 | 说明 |
---|---|
>> ===:> |
右缩进(普通模式) |
<< ===:< |
左缩进(普通模式) |
:m,n> ===:m>(n-m+1) |
m到n行缩进(命令行模式) |
:m>n ===:m,m+n-1> |
m行开始,共n行缩进一次(命令行模式) |
3-2 删除、复制与粘贴 (25:41)
Windows | Vim | 不同处 |
---|---|---|
cut | delete | 和剪切相同,而不是直接删除 |
copy | yank | 等同于复制,由于c用于(change)被迫选了yank |
paste | put | 粘贴完全相同 |
Vim特性
寄存器(保存临时数据)
类型 含义 表示方式 举例 特点 无名寄存器 默认寄存器 “” “” p=p 会被最后一条覆盖 数字寄存器 “+{0-9}缓存最近10次操作 “0”{1-9} “0P
“1P0用于复制专用
1-9用于最近9次行删除或者修改记录有名寄存器 26英文字母命名有名寄存器 “[a-z]/[A-Z]” “ayw “A会通过^J追加到”a寄存器中 黑洞寄存器 有去无回 “- “_dw 只想删除而不想覆盖无名寄存器 :register
/:reg
:进入寄存器:h reg
:查看寄存器文档
基础操作
按键操作 | 定义 |
---|---|
d = delete = cut | 剪切 |
y = yank ≈ copy | 类似于复制 |
P/p = put ≈ paste | 粘贴到光标后/前 |
u = undo | 撤销之前操作 |
Control+r = redo | 重做/恢复之前操作(反撤销) |
yy
:复制整行。记录到""
默认寄存器/无名寄存器、"0
寄存器/复制专用寄存器
dd
:剪切整行。记录到""
默认寄存器/无名寄存器、"1
寄存器/剪切寄存器
p
:粘贴
u
:撤销
Control+r
:重做(反撤销)
"ayy
:复制整行到"a
寄存器。记录到默认寄存器,不会记录到复制专用寄存器
"_dd
:删除整行。不会记录到任何寄存器。黑洞寄存器
按键操作 | 定义 |
---|---|
yw | 复制当前光标单词(从光标后开始截取) |
y2w | 复制正向倆个单词(从光标后开始截取) |
调换字符
按键操作 | 缓冲区内容 |
---|---|
{start} | Practical vim |
F{space} | Practical vim |
x | Practical vim |
p | Practical vim |
x
:剪切单个字符。记录到默认寄存器、-
寄存器
行剪切粘贴
按键操作 | 缓冲区内容 |
---|---|
{start} | Line1 Line2 |
dd | Line2 |
p | Line2 Line1 |
行复制
按键操作 | 缓冲区内容 |
---|---|
{start} | Line1 Line2 |
yy | Line1 Line2 |
p | Line1 Line2 Line1 |
组合删除([count] operation [count] {motion})
操作按键 | 定义 |
---|---|
x /X |
删除光标下/前单个字符 |
dw (d = delete,w = word) |
删除一个单词(必须在词首👋)(删除光标处到单词末尾🔚) |
d{hjkl} |
删除到上下左右一个操作前的字符 |
d$ ===D |
删除光标到行尾的字符 |
d^ |
删除光标到行首的字符 |
dd |
删除当前整行 |
{n}dd |
向下删除n行(包括当前行) |
5dw |
删除正向单词5次 |
d3w |
正向删除3w 动作 |
3w |
正向移动单词3次 |
2d3w |
正向删除3w 动作 2次 |
3-3 修改、查找与替换 (15:59)
插入
按键操作 | 定义 |
---|---|
Shift+i /Shift+a |
插入模式并移动到行首/尾 |
i /a |
光标前/后插入 |
[n]+O /o |
行前/后插入n次 |
[n]+i |
插入模式重复n次 |
转换
按键操作 | 定义 |
---|---|
~ |
单个字符大小写转换 |
g ~ w |
单词大小写转换 |
g ~ $ /g ~ ~ |
整行大小写转换(^ 光标处到行首大小写反转,$ 光标处到行尾大小写反转) |
gUw /guw |
单词转换成大小写 |
.
:对上一个操作的重🐛复
查找
按键操作 | 定义 |
---|---|
f{char} /F{char} |
正向/反向查找某个单词(适用于查找某一行) |
t{char} |
查找字符前一个字符 |
dt{char} /df{char} |
删除光标到查找字符间的字符 |
/{char} |
命令行查找 |
/{char}
:
n
:向下⬇️查找🔎N
:向上⬆️查找🔎
替换(substitute)
语法:[range]s[ubstitute]/{pattern}/{string}/[flags]
按键操作 | 定义 |
---|---|
:s/going/rolling/g |
当前行所有going替换成rolling |
:%s/going/rolling/g |
%匹配所有范围 |
⇧+r /R |
替换模式 |
r |
单个字符替换 |
cw 、c2w |
修改单个单词 |
c$ /C 类似于d 操作符 |
修改光标之后行内内容 |
第4章 Vim高级功能
本章主要讲解缓冲区与多文件编辑、多窗口操作(分屏)与标签分组、宏和文本对象以及Visual模式。
4-1 缓冲区与多文件编辑 (13:25)
缓冲区、标签、窗口

编辑操作并不是真正的编辑文件,而是编辑文件在内存中的映射或快照或缓冲区
缓冲区:就是内容缓存区域。
- Buffer是内存中的一块缓冲区,用于临时存放Vim打开过的文件
查看缓冲区列表:
:files
:buffers
:ls
缓冲区列表指示状态
标记 | 含义 |
---|---|
a | 激活缓冲区,缓冲区被加载且显示 |
h | 隐藏缓冲区,缓冲区被加载但🥚不显示 |
% | 当前缓冲区 |
# | 交换缓冲区 |
= | 只读缓冲区 |
+ | 已经更改缓冲区 |
- | 不可更改缓冲区,’modifiable’选项不置位 |
缓冲区列表操作
指令 | 含义 |
---|---|
:bp[revious] |
上一个缓冲区 |
:bn[ext] |
下一个缓冲区 |
:bf[irst] |
到第一个缓冲区 |
:bl[ast] |
到最后一个缓冲区 |
:buffer Number/File_name |
指定缓冲区 |
:ball |
编辑所有缓冲区 |
⌃+^ /b# |
切换到前一个buffer(交换buffer) |
:qall! |
退出全部缓冲区 |
:wall! |
写入全部缓冲区 |
:badd |
添加一个新缓冲区,但不设置为当前缓冲区 |
:bd[elete] |
删除缓冲区 |
:m,nbd /:%db |
删除m到n编号/所有的缓冲区文件 |
:bufdo {CMD} |
bufdo set number |
:E /:bd |
打开文件目录列表/返回到🔙最初的buffer |
4-2 多窗口操作与标签分组 (16:57)
- 多窗口(分屏)
分屏操作
指令 | 含义 |
---|---|
vim -On /vim -on |
垂直/水平分屏(n:数字,o:Open) |
⌃+w c/q |
关闭当前窗口/最后一个窗口时退 |
⌃+w s |
上下分割当前打开的文件 |
⌃+w v |
左右分割当前打开的文件 |
:sp filename |
上下分割并打开一个新的文件 |
:vsp filename |
左右分割并打开一个新的文件 |
移动分屏和尺寸变动
指令 | 含义 |
---|---|
⌃+w H |
向左⬅️移动 |
⌃+w J |
向下⬇️移动 |
⌃+w K |
向上⬆️移动 |
⌃+w L |
向右➡️移动 |
⌃+w + |
增加高度 |
⌃+w - |
减少高度 |
⌃+w _ |
减小到最低高度 |
⌃+w = |
让所有屏的高度一致 |
标签
标签就是容纳一系列窗口的容器
标签操作
指令 | 含义 |
---|---|
:tabnew [tab_name] |
新建标签页 |
:tabfind |
查找并在新标签中打开文件 |
:tabs |
显示已打开标签页的列表 |
:tabclose |
关闭当前标签页 |
:tabonly |
仅保留当前标签页打开 |
:tabn/p/first/last |
跳转到下/上/第一/最后一个标签页 |
:tabm |
将当前标签页放置到指定位置 |
标签操作和命令键
指令 | 含义 |
---|---|
gt/T |
移动到下/上一个标签 |
{i}gt |
跳转到i位置的标签 |
noremap <C-L> <Esc> :tabnext <CR> |
Vimrc中自定义快捷键 |
noremap <C-H> <Esc> :tabprevious <CR> |
Vimrc中自定义快捷键 |
:tabe |
编辑标签中的某个文件 |
:tabm 0/tabm |
移动当前tab到第一个/最后一个 |
t:abm {i} |
移动当前tab到第i+1位置 |
4-3 文本对象与宏 (18:40)
- 文本对象
{operator} {a} {object}
{operator} {i} {object}
例:
daw = Delete A Word
==a==n object
:包含尾部间隔空格ciw = Change Inner Word
==i==nner object
:只是内容本身,不包含尾部单词间隔🈳️格
Word/Sentence/Paragraph
textobject | 说明 |
---|---|
w | word |
s | sentence |
p | paragraph |
块对象
textobject | 说明 |
---|---|
]/[ | [] block |
)/(、b | () block |
>/<、>/< | <> block |
}/{、B | () block |
t | tag block: <> </> |
Visual mode
指令 | 说明 |
---|---|
viw |
选中单词 |
vis |
选中句子🍊 |
vip |
选中段落 |
vi( |
选中() 圆括号中的内容 |
vi[ |
选中[] 中括号中的内容 |
vit |
选中标签中的内容 |
指令 | 说明 |
---|---|
v2i{ |
选中两层`{}`大括号之间的所有内容 数字限制选择的嵌套层数 |
v3aw | 选择3⃣️个单词(3个单词➕2个间隔空格) |
v3iw | 选择3⃣️个单词(2个单词➕1个间隔空格) |
可将v选择操作指令替换为c(change), x, d(delete), y(yank)等操作符(operator),来针对文本对象操作 |
- 宏
If you write a thing once, it is okay. However if you’re writing twice or more times, then you should find a better way to do it.
Vim的Micro就是用来解决重复的问题
宏就是批处理,类似于命令行脚本或者编程中的函数
h: operator
:查看操作符文档
简单操作
指令 | 说明 |
---|---|
qa |
开始录制⏺️宏到寄存器a🀄️ |
qA |
追加宏,在寄存器a🀄️追加 |
n@a |
执行n遍a寄存器中的操作 |
@@ |
再执行一遍上一次操作 |
:n,mnormal @a |
n到m行执行寄存器a宏操作 |
:let @a= ' |
编辑宏a寄存器 |
宏最佳操作
- 规范光标位置:0
- 执行编辑和操作
- 移动光标到容易回放的位置:j
Ctrl+a
:当前数字递增1
示例步骤:
循环递增插入数字
# 添加数字1 i 1 Esc # 开始录制宏,此时光标在数字1行 qa # 开始 yy # 复制 p # 粘贴 q # 结束 # 执行宏操作 10@a
为多行添加注释
# 开始录制宏,此时光标在需注释行首 qb # 开始 i # 进入编辑模式 `# ` # 添加注释 Esc # 退出编辑模式 ^ # 移动到行首 j # 光标下行移动 q # 结束
宏保存
viminfo
/vimrc file
- 保存历史和非空寄存器
- vim启动时读取
- 容易被覆盖
4-4 Visual 模式 (15:51)
在可视化模式下,可以对一个文本块的整体进行操作
三种子模式
指令 | 说明 |
---|---|
v |
激活面向字符的可视化模式 |
V /shift+v |
激活面向行的可视化模式 |
command+v |
激活面向列块的可视化模式 |
字符可视化模式=>行可视化模式=>块可视化模式
可视化模式操作
操作符 | 说明 |
---|---|
gv | 重选上次的高亮选区 |
o | 切换选取边界 |
第5章 课程总结
课程总结
5-1 课程总结 (03:18)
Vim模式(四种)
普通模式、编辑模式、可视化模式、命令行模式
Vim组合 {operation}{motion}
增查删改
Vim配置多样性
配置文件.vimrc、Vim插件
Vim视图多样性
缓冲区、多文件编辑、多窗口、标签分组
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 tuyrk@qq.com
文章标题:1049-优雅玩转Vim
文章字数:4.2k
本文作者:神秘的小岛岛
发布时间:2019-11-04, 22:34:45
最后更新:2019-11-05, 16:21:47
原始链接:https://www.tuyrk.cn/imooc/1049-vim/版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。