Vim: 极其高效的编辑器
Vim
介绍
Vim的前身是Vi,是类Unix系统下一个很高效的文本编辑器Vi本身舍弃了许多需要借助鼠标、Ctrl与Alt键的快捷键,转而设计了若干种模式以使双手尽可能的保持在键盘上的asdf与jkl;四个打字键上Vim则是Vi的扩展,不过许多功能默认被设置为禁用,许多功能需要在.vimrc文件中启用Vim内置了vimtutor命令,键入该命令会使用vim进入其教程文件,建议先熟悉一遍该教程,然后在平时编码中强迫使用Vim
基本用法
各种模式概览
Vim有多种模式,包括正常模式、写入模式、命令模式、选择模式等- 正常模式是进入
Vim后的初始模式,在其它模式下键入Esc可回到正常模式 - 写入模式是向文件中写入的主要模式,在正常模式下键入
i、I、o、O、a、A、r、R可按不同方式进入写入模式- 插入模式:插入模式指插入的字符不会覆盖已有的字符,而是插在光标上
按下
i会在光标左侧进入插入模式(insert) 按下I会在行首进入插入模式 按下o会在光标下新开一行,在新行中进入插入模式 按下O会在光标上新开一行,在新行中进入插入模式 按下a会在光标右侧进入插入模式(append) 按下A会在行末进入插入模式 - 替换模式:替换模式指写入的字符会覆盖原本在光标上的字符
按下
r仅替换一个字符,随后自动退回正常模式 按下R会进入替换模式,直至用户主动返回
- 插入模式:插入模式指插入的字符不会覆盖已有的字符,而是插在光标上
按下
- 命令模式可以运行
Vim内置的命令、外部提供的命令等- 调用内置命令:键入
:例如键入:help用Vim进入帮助文档 - 调用外部提供的命令,需要键入
:!
- 调用内置命令:键入
- 选择模式可以配合移动选择一块文本,随后键入其它和正常模式一致的动作命令对选中的代码块进行操作
- 键入
v可切换(进入或退出)选择模式 - 键入
V可切换(进入或退出)行选择模式
- 键入
光标移动
hjkl:分别为左下上右方向键0:等价于Home,此外|和^也是Home$:等价于EndG:移动到文件的最后一行gg:移动到文件的第一行正整数+G:移动到第正整数行<Enter>:向下移动一行w:跳转到下一个单词的开始,针对英文而言W与w没有区别,对中文可能有些许不同,但总而言之W并不常用e:跳转到当前单词的结尾,若已处于当前单词结尾则跳转到下一单词结尾b:跳转到上一单词的开始%:匹配到光标所属的左/右括号,使光标在左/右括号间切换Ctrl+f与Ctrl+b:Page Down与Page UpCtrl+d与Ctrl+u:向下/向上移动半页正整数+上述移动命令:重复执行正整数次该移动命令
撤销与恢复
u:撤销上一次修改命令造成的影响U:撤销该行内所有的命令Ctrl+r:撤销上一次“撤销”操作,即“恢复”
删除或粘贴字
x:删除光标所在的字符X:删除光标的前一个字符d?:其中?是移动命令,配合移动命令可快速删除字符dd:删除光标所在行D:删除至行尾,等价于d0s:等价于x后键入iS:等价于dd后键入ic?:等价于d?后键入icc:等价于dd后键入iC:等价于D后键入iy:复制光标所在的字符、或复制选中的内容Y或yy:复制光标所在行p:将上一次删除或复制的内容粘贴在光标的右侧(若为一整行则会在光标下方开启新行)P:将上一次删除或复制的内容粘贴在光标的左侧(若为一整行则会在光标下方开启新行)
搜索与替换
Vim中的搜索默认是正则表达式匹配(magic模式),可以切换为nomagic与very magic模式/:进入向后搜索模式,键入需要搜索的内容后键入回车即可?:进入向前搜索模式n:在搜索模式中,跳转到下一个匹配项N:在搜索模式中,跳转到上一个匹配项:set ic:等价于:set ignorecase,设置搜索时无视大小写:set hls:等价于:set hlsearch,设置搜索结果高亮:set is:等价于:set incsearch,设置在搜索过程中搜索结果高亮:s/old/new:将本行第一个old替换为new:s/old/new/g:将本行的所有old替换为new:%s/old/new/g:将所有的old替换为new:%s/old/new/gc:在:%s/old/new/g的基础上,每次替换前向用户发出确认(confirm)
分页
:sp:使当前文件上下分页:sp 文件名:打开新文件并上下分页,空格等特殊字符需反斜杠转义:vsp与:vsp 文件名:与上述命令类似,但是左右分页Ctrl+w w:切换到下一个分页Ctrl+w hjkl:切换到左、下、上、右分页Ctrl+w c:关闭当前分页Ctrl+w o:关闭其它所有分页
其它常用命令
:help:用Vim打开教程文件:w:保存文件:q:退出文件:wq!:强制地保存并退出:!cmd:运行一个由外部提供的名为cmd的命令:set nu:显示行号:set noxxx:取消某设置,例如:set nonu>>与<<:缩进与反缩进
自定义命令
之前说过在
VS Code中使用json数据格式配置Vim的扩展功能,实际上在.vimrc文件配置才是最原始的方法,因为原生的Vim没有VS Code的editor那样默认有丰富的配置Vim配置包含系统配置与用户配置,系统配置位于/usr/share/vim/vimXX/vimrc_example.vim,其中XX为版本,用户配置应位于~/.vimrc文件中,且用户配置优先于系统配置一份常用的配置如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14set encoding=utf-8 # 编码
syntax on # 语法高亮
set ruler # 显示光标所在行号与列号
set nu # 显示行号
set cursorline # 高亮光标所在行
set cursorcolumn # 高亮光标所在列
set autowrite # 自动保存
set is # 搜索时立刻执行而不等`<Enter>`
set nocompatible # 不兼容`Vi`
set showmatch # 高亮显示光标所在括号对
set tabstop=4 # 设置\t的空格数
set shiftwidth=4 # 设置缩进的空格数
set noexpandtab # 设置按下Tab时不用空格替代\t
set laststatus=2 # 始终在下方显示文件名