vim 使用文档和配置

109 阅读4分钟

简介

vim 是基于vi 的文本编辑器, 使用大量快捷键实现了在终端进行文本编辑. 因为vi 可以实现全键盘操作, 很多软件也引入了vim 模式, 学会一门vim, 可以提升多个软件的使用体验和工作效率!

vim 有3种模式:

  • 默认的命令模式(command mode), 按esc 会从其他模式进入到该模式

  • 底部命令行模式, 按:(冒号键) 进入该模式, 进行应用级别(退出, 保存, 修改配置等)操作. 按/? 进入可以执行全局性的文本操作(搜索, 替换等)

  • 编辑模式, 按a/i/o 进入编辑模式, 这时候才可以编辑文档, a会在当前字符后面追加, i 在当前字符前面插入, o则换行输入

注意vi fileanme 命令打开文件会将整个文件加载到内存中, 生产环境谨慎使用. 只是查看的话可以用less 命令替代

常用指令

只有在command 模式下才能使用指令, 没事多按esc 确保在command 模式

编辑

:%s/old/new/g: 全局替换

u: 撤销上一次操作, 对应ctrl + r 恢复上一次操作

vi 中有一些元素用来指代位置, 跟其他按键配合使用, 比如数字代表几行, ^ 代表行首, $ 代表行尾, G 代表文本末尾

  • 3yy: 复制从当前行开始的3行文本, 复制当前行1yy可以简写为yy, 配合p 粘贴. 这里的y是yank 的意思, p 是paste 的意思

  • y$: 复制从当前字符开始到行尾的文本, 类似的用法还有yG 复制当前位置到文本末尾

  • 3dd: 删除从当前行开始的3行文本, 删除当前行可以简写为dd, 它在删除前会先复制到剪切板, 所以也可以当剪切功能使用, d 是delete 的意思

  • d^: 删除从当前字符开始到行首的文本

应用

:wq: 保存并退出

:q!: 不保存强制退出, 注意:q 是退出, 而q: 是查看命令历史记录, 这时候输入:q 是退出历史记录

移动

一般学会文本编辑和应用相关的指令就够了, 但是如果想键指如飞, 全键盘操作, 那就得配合移动指令了

h, j, k, l 四兄弟是字符级别的移动

  • h/j/k/l: 向左/下/上/右移动一个字符, 可以用方向键代替

  • gj: 向下移动一个物理行(忽略自动换行)

  • gk: 向上移动一个物理行(忽略自动换行)

f 加任意符号: 搜索并跳转到下一个 字符处, 配合;, 向左和向右搜索

w, e, b 是单词级别的移动, vi 通过空格和iskeyword 分词, 比如set iskeyword=a-z,A-Z 遇到非英文字母就认为一个单词开始和结束

  • w: 移动到下一个单词开头, w 代表word

  • e : 移动到下一个单词结尾, e 代表end

  • b: 移动到上一个单词开头, b 代表back

/ 加任意文本进行全局搜索, 支持正则表达式, 比如/aa.*bb 可以搜索到"aa你好bb". f 只能搜索字符

还有几个全局跳转的快捷键

  • gg: 跳转到文件开头

  • G: shift + g 跳转到文件结尾

  • 5G 跳转到第5行

  • :5 加回车也是跳转到第5行

  • ^0: 都可以跳转到当前行开头

  • $: 跳转到当前行结尾. ^$ 在正则表达式中也代表开始和结束

  • ( : 跳转到上一个语句开头

  • ): 跳转到下一个语句开头

  • {: 跳转到上一个段落开头

  • }: 跳转到下一个段落开头

常用配置

vi/vim 使用~/.vimrc 作为配置文件, 修改后执行source ~/.vimrc 刷新配置, 会有报错不过忽略就行了

  " 语法高亮
  syntax on
  syntax enable
  "显示当前模式
  set showmode
  "显示命令行输入状态
  set showcmd
  "无需生成备份文件
  set nobackup
  "无需生成交换文件
  set noswapfile
  "显示匹配的括号/引号等符号
  set showmatch
  "设置编码
  set encoding=utf-8
  "总端颜色256
  set t_Co=256
  "共享系统剪贴板
  "set clipboard^=unnamed,unnamedplus
  "显示行号
  set number
  "显示相对行号
  set relativenumber
  "历史记录条数
  set history=2000
  "关闭兼容模式
  set nocompatible
  "退格键可以删除缩进,行尾和起始位置字符
  set backspace=indent,eol,start
  "开启增量搜索
  "set incsearch
  "搜索结果高亮
  set hlsearch
  "忽略大小写搜索
  set ignorecase
  "有大写字母时不忽略大小写
  set smartcase
  "自动补全候选项
  set wildmenu
  set wildmode=list:longest
  "始终显示状态栏
  set laststatus=2
  set ruler
  "光标所在行高亮
  set cursorline
  "禁止换行
  set nowrap
  "空格键代替制表符进行缩进
  set expandtab
  "制表符为2个字符
  set tabstop=2
  "按下制表符移动4个字符
  set shiftwidth=4
  "软表符()宽度为2
  set softtabstop=2
  "缩进代替折叠代码块
  set foldmethod=indent
  "根据语法折叠代码块
  set foldmethod=syntax
  "禁用代码折叠
  set nofoldenable
  "自动缩进
  set autoindent
  "GUI 模式下字体
  set guifont=courier_new:h20
  "set go+=b
  "不增量搜索
  set noincsearch
  "不循环搜索
  set nowrapscan
  "if has("gui_running")
    "colorscheme macvim
    "set bs=2
  "endif
  
  "s 关闭搜索高亮
  map s :noh<CR>