Vim: 极其高效的编辑器

Vim

介绍

  • Vim的前身是Vi,是类Unix系统下一个很高效的文本编辑器
  • Vi本身舍弃了许多需要借助鼠标、CtrlAlt的快捷键,转而设计了若干种模式以使双手尽可能的保持在键盘上的asdfjkl;四个打字键上
  • Vim则是Vi的扩展,不过许多功能默认被设置为禁用,许多功能需要在.vimrc文件中启用
  • Vim内置了vimtutor命令,键入该命令会使用vim进入其教程文件,建议先熟悉一遍该教程,然后在平时编码中强迫使用Vim

基本用法

各种模式概览

  • Vim有多种模式,包括正常模式、写入模式、命令模式、选择模式等
  • 正常模式是进入Vim后的初始模式,在其它模式下键入Esc可回到正常模式
  • 写入模式是向文件中写入的主要模式,在正常模式下键入iIoOaArR可按不同方式进入写入模式
    • 插入模式:插入模式指插入的字符不会覆盖已有的字符,而是插在光标上 按下i会在光标左侧进入插入模式(insert) 按下I会在行首进入插入模式 按下o会在光标下新开一行,在新行中进入插入模式 按下O会在光标上新开一行,在新行中进入插入模式 按下a会在光标右侧进入插入模式(append) 按下A会在行末进入插入模式
    • 替换模式:替换模式指写入的字符会覆盖原本在光标上的字符 按下r仅替换一个字符,随后自动退回正常模式 按下R会进入替换模式,直至用户主动返回
  • 命令模式可以运行Vim内置的命令、外部提供的命令等
    • 调用内置命令:键入: 例如键入:helpVim进入帮助文档
    • 调用外部提供的命令,需要键入:!
  • 选择模式可以配合移动选择一块文本,随后键入其它和正常模式一致的动作命令对选中的代码块进行操作
    • 键入v可切换(进入或退出)选择模式
    • 键入V可切换(进入或退出)行选择模式

光标移动

  • hjkl:分别为左下上右方向键
  • 0:等价于Home,此外|^也是Home
  • $:等价于End
  • G:移动到文件的最后一行
  • gg:移动到文件的第一行
  • 正整数+G:移动到第正整数
  • <Enter>:向下移动一行
  • w:跳转到下一个单词的开始,针对英文而言Ww没有区别,对中文可能有些许不同,但总而言之W并不常用
  • e:跳转到当前单词的结尾,若已处于当前单词结尾则跳转到下一单词结尾
  • b:跳转到上一单词的开始
  • %:匹配到光标所属的左/右括号,使光标在左/右括号间切换
  • Ctrl+fCtrl+bPage DownPage Up
  • Ctrl+dCtrl+u:向下/向上移动半页
  • 正整数+上述移动命令:重复执行正整数次该移动命令

撤销与恢复

  • u:撤销上一次修改命令造成的影响
  • U:撤销该行内所有的命令
  • Ctrl+r:撤销上一次“撤销”操作,即“恢复”

删除或粘贴字

  • x:删除光标所在的字符
  • X:删除光标的前一个字符
  • d?:其中?是移动命令,配合移动命令可快速删除字符
  • dd:删除光标所在行
  • D:删除至行尾,等价于d0
  • s:等价于x后键入i
  • S:等价于dd后键入i
  • c?:等价于d?后键入i
  • cc:等价于dd后键入i
  • C:等价于D后键入i
  • y:复制光标所在的字符、或复制选中的内容
  • Yyy:复制光标所在行
  • p:将上一次删除或复制的内容粘贴在光标的右侧(若为一整行则会在光标下方开启新行)
  • P:将上一次删除或复制的内容粘贴在光标的左侧(若为一整行则会在光标下方开启新行)

搜索与替换

  • Vim中的搜索默认是正则表达式匹配(magic模式),可以切换为nomagicvery 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 Codeeditor那样默认有丰富的配置

  • Vim配置包含系统配置与用户配置,系统配置位于/usr/share/vim/vimXX/vimrc_example.vim,其中XX为版本,用户配置应位于~/.vimrc文件中,且用户配置优先于系统配置

  • 一份常用的配置如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    set 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 # 始终在下方显示文件名