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