layout: post
title: Linux -- Vim cheatsheet 
author: CY
description: "Vim usage"
tags: [Linux]
categories: [Linux]
share: false
image:
  background: triangular.png 
全局(Global)
  
    
      | :help keyword | 打开关键字帮助 | :saveas file | 另存为 | 
  
  
    
      | :close | 关闭当前窗口 | K | 打开光标所在的单词的man页 | 
  
光标移动(Cursor movement)
  
    
      | k、j、h、l | 上、下、左、右移动光标 | 
  
  
    
      | H、L、M | 将光标移动到当前页面顶部、底部、中间 | 
    
      | b、B | 将光标移动到上个单词的结尾、结尾(单词含标点) | 
    
      | w、e、W、E | 将光标移动到下个单词的开头、结尾、下个含标点单词的开头、结尾 | 
    
      | % | 移动光标到配对的字符。默认支持:()、{}、[] | 
    
      | 0、$、^、g_ | 移动光标到行首、行尾、行首非空白符、行内最后一个非空白符 | 
    
      | gg、G、5G | 移动光标到文档第一行、最后一行、第五行 | 
    
      | fx、Fx | 移动光标到字符x下次、上次出现的位置 | 
    
      | tx、Tx | 移动光标到字符x下次出现的位置的前一个字符、上次出现的位置的后一个字符 | 
    
      | ; , | 正向、反向重复上边的f, t, F 或 T命令 | 
    
      | {、} | 移动到上一个、下一个段落 (当编辑代码时则为函数/代码块) | 
    
      | zz | 移动屏幕使光标居中 | 
    
      | ctrl + y/e | 光标不动情况下屏幕向上、向下移动一行 | 
    
      | ctrl + f/b/d/u | 向前滚动一屏、向后滚动一屏、向前滚动半屏、向后滚动半屏 | 
  
插入模式 - 插入/追加文本
  
    
      | i、a | 从光标前、后开始插入字符 | I、A | 从行首、尾开始插入字符 | 
  
  
    
      | O、o | 在当前行之上、下另起一行, 开始插入字符 | ea | 从当前单词末尾开始插入 | 
    
      | Esc | 退出插入模式 |  |  | 
  
退出(Exiting)
  
    
      | :w | 保存 | :q | 退出(修改未保存时警告) | 
  
  
    
      | :w !sudo tee % | 使用sudo保存当前文件 | :q! or ZQ | 不保存强制退出 | 
    
      | :wq or :x or ZZ | 保存并退出 | :wqa | 保存并退出所有标签 | 
    
      | :saveas newfilename | 另存为 |  |  | 
  
可视化模式(Marking text - visual mode)
  
    
      | v | 进入可视化模式(面向字符) | V | 进入可视化模式(面向行) | 
  
  
    
      | Ctrl + v | 进入可视化模式(面向矩阵) |  |  | 
    
      | o | 切换光标到选择区开头/结尾 | O | 切换光标到选择区的角 | 
    
      | ab、aB | 选择被 () 、{}包裹的区域(含括号) | ib、iB | 选择被 () 、{}包裹的区域(不含括号) | 
    
      | aw | 选择当前单词 | Esc | 退出可视化模式 | 
    
      | <、> | 向左、右缩进 | y、d | 复制、剪切 | 
    
      | ~ | 大小写切换 |  |  | 
  
剪切, 复制, 粘贴
| yy、dd   | 复制、剪切当前行             | yw、dw             | 复制、剪切当前单词           |
| ——– | —————————- | —————— | —————————- |
| 3yy、3dd | 复制、剪切3行                | yG、dG             | 复制、剪切到文档结尾         |
| y^、d^   | 复制、剪切, 从行首到光标位置 | y$、d$(D the same) | 复制、剪切, 从光标位置到行尾 |
| P、p     | 在光标前、后粘贴             | x                  | 剪切当前字符                 |
y: yank; d: delete; p: put
编辑(Editing)
  
    
      | r | 替换当前字符 | gwip | 段落合并 | 
  
  
    
      | J | 将下一行合并到当前行(有空格) | gJ | 将下一行合并到当前行(无空格) | 
    
      | cc、S | 删除当前行,并进入插入模式(同功能) | s | 删除当前字符,并进入插入模式 | 
    
      | C,c$ | 从当前字符删除到行尾,并进入插入模式(同功能) | ciw | 删除整个单词 | 
    
      | xp | 当前字符后移一位 | cw | 从光标位置开始,修改单词 | 
    
      | u | 撤销操作 | U | 撤销某一行最近所有修改 | 
    
      | ctrl+r | 重做 | . | 再次执行上个命令 | 
  
查找/替换(Search and replace)
  
    
      | /pattern | 向后查找 | n | 查找下一个 | 
  
  
    
      | ?pattern | 向前查找 | N | 查找上一个 | 
    
      | \vpattern | 字母数字字符被视为正则表达式特殊字符 (不需转义字符) |  |  | 
    
      | :s/old/new | 用new替换当前行第一个old |  |  | 
    
      | :s/old/new/g | 用new替换当前行所有的old |  |  | 
    
      | :n1,n2s/old/new/g | 用new替换文件n1行到n2行所有的old |  |  | 
    
      | :%s/old/new/g | 用new替换文件中所有的old |  |  | 
    
      | :%s/^/xxx/g | 在每一行的行首插入xxx,^表示行首 |  |  | 
    
      | :%s/$/xxx/g | 在每一行的行尾插入xxx,$表示行尾 |  |  | 
    
      | :noh | 移除搜索结果的高亮显示 |  |  | 
  
range规则:m,n: 从m行到n行; 0: 第一行;$: 最后一行; . : 当前行; %: 所有行
所有替换命令末尾加上c,每个替换都将需要用户确认。
多文件(Working with multiple files)
  
    
      | :e file | 新建缓冲区打开file | :bd | 关闭缓冲区 | 
  
  
    
      | :bprev or :bp | 切换到上个缓冲区 | :bnext or :bn | 切换到下个缓冲区 | 
    
      | :ls | 列出所有打开的缓冲区 |  |  | 
    
      | :sp file | 新建缓冲区打开 file 并 水平分割窗口
 | :vsp file | 新建缓冲区打开 file 并 垂直分割窗口
 | 
    
      | Ctrl + ws/wv | 水平/垂直分割窗口 | Ctrl + ww | 在窗口间切换 | 
    
      | Ctrl + wk/wj/wh/wl | 切换到上/下/左/右侧窗口 | Ctrl + wq | 关闭窗口 |