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 关闭窗口