插入
| 命令 | 说明 |
|---|---|
| i | 光标前插入 |
| a | 光标后插入 |
| I | 当前行首插入 |
| A | 当前行尾插入 |
| O | 当前行之前插入新行 |
| o | 在当前行之后插入新行 |
光标操作
| 命令 | 说明 |
|---|---|
| fx | 移动到当前行的下一个x,x可以是一个字符 可以使用 ; 来重复你的上一个 f 命令 |
| FX | 移动到当前行的上一个x,x可以是一个字符 |
| w | 移动光标到后一个单词 |
| b | 移动光标到前一个单词 |
| 0 | 移动光标到当前行首 |
| ^ | 移动光标到当前第一个字母位置 |
| $ | 移动光标到当前行尾 |
| gg | 到整个文件的第一行 |
| #gg 或 #G | 到整个文件的第#行 |
| G | 到整个文件的最后一行 |
| 向后移动一屏 | |
| 向前移动一屏 | |
| H | 移动光标到屏幕上面 |
| M | 移动光标到屏幕中间 |
| L | 移动光标到屏幕下面 |
| * | 读取光标处的字符串,并且移动光标到后面出现的地方 |
| # | 读取光标处的字符串,并且移动光标到前面出现的地方 |
| /text | 从光标处开始往下查找text文本,可以使用n查找下一个 |
| ?text | 从光标处开始往上查找text文本,可以使用n查找上一个 |
| `. | 回到你上次编辑文件的地方 |
| ma | 在当前光标处标记添加书签a,书签只能是小写 |
| `a | 跳到书签a处 |
复制、粘贴
| 命令 | 说明 |
|---|---|
| Y or yy | 复制当前行 |
| #yy | 复制从光标所在行往下的#行 |
| yw | 将光标所在之处到字尾的字符复制 |
| #yw | 复制#个字 |
| p | 粘贴 |
| l1, l2 co l3 | 复制第l1行到第l2行之间的内容到第l3行后面 |
删除
| 命令 | 说明 |
|---|---|
| dd | 删除光标所在行 |
| #dd | 从光标所在行开始删除#行 |
| :l1,l2 d | 将l1,l2行之间的内容删除 |
| dgg | 删除到首行 |
| dG | 删除到尾行 |
| X | 删除光标所在位置的前面一个字符 |
| x | 删除光标所在位置的后面一个字符 |
| #x | 删除光标所在位置后面#个字符 |
| d^ | 删除到行首 |
| D or d$ | 删除到行尾 |
| dw | 删除一个单词/光标之后的单词剩余部分 |
| d#w | 删除#个单词 |
| diB | 删除{}中的内容 |
| daB | 删除{}及其内的内容 |
| :% g/^$/d | 删除空行 |
| :% g/pattern/d | 删除包含特定字符的行(全局删除匹配行) |
| :% 1,3g/pattern/d | 删除包含特定字符的行(删除第1-3行里的匹配行) |
| :% v/pattern/d 或 :% g!/pattern/d |
删除不包含指定字符的行 |
多行操作
| 命令 | 说明 |
|---|---|
| :%s/^/要添加的内容 | 在每行行首添加相同的内容 |
| :%s/$/要添加的内容 | 在每行行尾添加相同的内容 |
| :1,$j | 多行转一行 |
| :%j 或者 :%j!(此法不会再行尾添加空格) |
多行转一行 |
| :%s/XXX/^M/g | 一行转多行,^M为先按ctrl+v,再按ctrl+m出来的,不是字符串^M |
| :%s/; /;\r/g | 一行转多行,;为分隔符 |
| :1,$s/.$// | $代表行末或者最后一行。1,$表示全文,也可用%表示。s表示替换, /.$//:正则,把最后一个字符替换为空 |
| :%s/ *$//g | 删除行尾空格(注意:/和*中间有一个空格) |
| :set nu | 显示行号 |
| :set nonu | 取消显示行号 |
关键词自动完成
| 命令 | 说明 |
|---|---|
| 关键词自动完成 |
常用方法
执行命令
> :w !{cmd}
在vim保存时获得sudo权限
> :w !sudo tee %
在每1000行后添加数据
$ awk '{if(NR%1000==0) {print "aaaaaaa"$0} else print}'
参考
https://linuxtoy.org/archives/efficient-editing-with-vim.html
https://coolshell.cn/articles/5426.html
https://segmentfault.com/q/1010000000151086
