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 
 “1P- 0用于复制专用 
 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" 转载请保留原文链接及作者。
 
            