Info
C表示按住Ctrl, C-o表示同时按住Ctrl和o

1. 在tmux中 vim-airline插件颜色显示不正常

解决方案:

export TERM=screen-256color

2. buffer相关操作

:ls # 显示所有打开的buffer
:b {bufferName} #支持tab键自动补全
:bd # 关闭当前buffer
:bn # 切换到下一个buffer
:bp # 切换到上一个buffer
:b# # 切换到上一个访问过的buffer
:b1 # 切换到buffer1
:bm # 切换到最近修改过的buffer
:sb {bufferName} # 上下分屏
:vert sb {bufferName} # 左右分屏

3. 跳转到对应的符号上

下面这种符号,一般都是成双成对的,只要在其中一个上按%, 就会自动跳转到对应的符号

() [] {}

4. 关闭netrw的banner

如果熟练的是用了netrw,就可以把默认开启的banner给关闭掉。

let g:netrw_banner = 0
let g:netrw_liststyle = 3
let g:netrw_winsize = 25

5. 如何同时保存所有发生变化的文件?

  • 把所有发生变化的文件给保存 :wa
  • 把所有发生变化的文件都保存,然后退出vim :xa
  • 退出vim, 所有发生变化的文件都不保存,:qa!

6. 插入当前时间

:r!date

7. 光标下的文件跳转

gf可以跳转光标下的文件

import {say} from './api'

也有可能跳的不准确,或者找不到,因为vim不知道文件后缀

:set suffixesadd+=.js

8. 文件对比

如果你安装了vim, vimdiff就会自动携带

vimdiff a.txt b.txt

9. 在插入模式快速删除

  • C-h 删除前一个字符
  • C-w 删除前一个单词
  • C-u 删除到行首

10. 在多行末尾增加特定的字符

例如下面的命令,可以在多行末尾增加;

:%s/$/;/

11. 对撤销进行撤销

u可以用来撤销,C-r可以用来对撤销进行撤销

12. 重新读取文件

假如你对一个文件进行了一些修改,但是还没有保存,这是你想丢弃这些修改,如果用撤销的话,太麻烦。

你可以用下面的命令,让vim重新读取磁盘上的文件,覆盖当前buffer中的文件。

:e!

13. 对当前buffer执行外部命令

例如对go代码进行格式化

:!go fmt %

也可以是一个json文件,我们可以用行选中之后执行:'<,'>!jq, 如果需要对全文进行json格式化,可以使用:%!jq

{"name":"wdd","age":1}
{
  "name": "wdd",
  "age": 1
}
Warning
!和命令之间不能有空格

14. 只读模式打开文件

  • 只读模式打开文件: vim -R file
  • 禁止修改打开文件: vim -M file

15. 显示或者隐藏特殊字符

:set list
:set nolist

16. 把另一个文件读取到当前buffer里面

b.txt是另一个文件

# 读取到光标的位置
:read b.txt

# 读区到当前buffer的开头
:0read b.txt

# 读区到当前buffer的结尾
:$read b.txt

17. 把当前文件的一部分写入到另一个文件中

# 把当前文件写入到c.txt, 如果c.txt存在,则写入失败
:write c.txt

# 把当前文件写入到c.txt, 如果c.txt存在,则强制写入
# 注意这里!必须紧跟着write, 并且空格是必须的,否则就是执行外部命令了
:write! c.txt

# 把当前文件的当前行到文件末尾写入到c.txt
:.$write c.txt

# 把当前文件以追加的方式写入到另一个文件中
:write >>c.txt

18. 自带文件浏览器的必背命令

:Sex # 文件浏览器上下分布
:Vex # 文件浏览器左右分布
  • F1 打开帮助信息
  • % 创建文件
  • d 创建目录
  • D 删除文件或者目录
  • R 文件重命名
  • gh 隐藏以.开头的文件
    • 返回上一级
  • t 用新的标签页面页面打开文件
  • c 把浏览的目录设置为当前工作的目录

19. 执行命令后,快速进入插入模式

  • C 从光标处删除到行尾,然后进入插入模式
  • S 清空当前行的内容,然后进入插入模式
  • s 删除光标下的字符,然后进入插入模式
  • O 在当前行上插入一行,然后进入插入模式
  • o 在当前行下插入一行,然后进入插入模式
  • I 光标移动当当前行的一个字符前,然后进入插入模式
  • A 贯标移动到当前航的最后一个字符后,然后进入插入模式

20. 必会的几个寄存器

  • 有名寄存器 a-z
  • 黑洞寄存器 _
  • 表达式寄存器 =
  • 当前文件名寄存器 %
  • 上次查找的模式寄存器 /
  • 复制专用寄存器 0

C-r 是用来调用寄存器的。比如说我想粘贴当前文件名,我只需要按C-r %, 就可以自动粘贴到当前的文件中

21. 基于tag的跳转

  • C-] 跳到对应tag上
  • C-o 跳回来
  • C-t 跳回来
  • C-w ] 在新的window中打开标签
  • C-w } 预览
  • pclose 关闭预览

22. html标签删除

  • dit 删除标签内部的元素
  • dat 删除标签

23. 原始格式粘贴

如果粘贴到vim中的文本缩进出现问题,

:set paste

然后再执行C-v粘贴

取消粘贴模式用 :set nopaste

24. 按列删除或者按列保留

# 只保留第二列
:%!awk '{print $2}'

# 删除第二列
:%!awk '{$2="";print $0}'

25. 查找多个关键词

/key1\|key2\|key3

26. 快速将光标所在行移动到屏幕中央

  • zz

26. 窗口快捷键

工作区切分窗口命令

  • s 水平切分窗口,新窗口仍然显示当前缓冲区
  • v 垂直切分窗口,新窗口仍然显示当前缓冲区
  • sp {file} 水平切分为当前窗口,新窗口中载入file
  • vsp {file} 垂直切分窗口,并在新窗口载入file

窗口之间切换

  • w 在窗口间循环切换
  • h 切换到左边窗口
  • l 切换到右边窗口
  • j 切换到下边的窗口
  • k 切换到上边的窗口

窗口关闭

  • :clo[se] 关闭活动窗口
  • :on[ly] 关闭其他窗口

窗口改变大小

  • = 使所有窗口等宽等高
  • _ 最大化活动窗口的高度
  • | 最大化活动

27. 9种插入模式

  • i 进入插入模式,所输入新的内容将会在正常模式所在光标的前面
  • a 进入插入模式,所输入的新的内容将会在正常模式所在光标的后面

你知道从插入模式退出的时候,光标会向前移动一个字符吗?

进入插入模式的技巧

  • i 在光标前插入
  • a 在光标后插入
  • A 在行的末尾进入插入
  • I (大写的i), 在行的第一个非空白字符前进入插入模式
  • C 删除光标后的所有字符,然后进入插入模式
  • s 删除光标后的一个字符,然后进入插入模式
  • S 清空当前行,然后进入插入模式
  • o 在当前行的下面一行新建一行,并进入插入模式
  • O 在当前行的上面一行新建一行,并进入插入模式

28. 算数运算

  • ctrl a 对数字进行加运算, 如果光标不在数字上,将会自动向后移动道对应的数字上
  • ctrl x 对数字进行减运算

29. 可视模式快捷键

  • v 激活面向字符的可视模式 再按一次,可以退出
  • V 激活面向行的可视模式, 再按一次可以退出
  • ctrl v 激活面向列的可视模式
  • gv 重选上次的选区
  • o 移动选区的端点

30. 把光标所在的单词插入到Ex

  • C-r C-w

31. 全局

  • 文件另存为 :saveas filename
  • 关闭当前窗口 :close

32. 光标移动

  • 移动光标到页面顶部,中部,底部 H,M,L
  • 移动到下个单词开头,结尾 w,e
  • 移动到上个单词开头 b
  • 移动光标 上下左右 k,j,h,l
  • 移动到匹配的括号 %
  • 移动到行首 0
  • 移动到行首非空白字符 ^
  • 移动到行尾非空白字符 g
  • 移动到行尾 $
  • 移动到文件第一行 gg
  • 移动到文件最后一行 G
  • 移动到第10行 10G
  • 移动屏幕使光标居中 zz
  • 跳转到上一次的位置 ctrl+o 例如你在159行,然后你按了gg, 光标调到了第一行,然后你按ctrl+o, 光标会回到159行
  • 跳转到下一次的位置 ctrl+i
  • 跳转到下个同样单词的地方 *
  • 跳转到上个同样单词的地方 #
  • 跳到字符a出现的位置 fa, Fa
  • 调到字符a出现的前一个位置 ta, Ta
  • 跳到之前的位置 ``
  • 跳到之前修改的位置 `.
  • 跳到选区的起始位置 `<
  • 跳到选区的结束位置 `>

33. 滚动屏幕

  • 向下,向上滚动一屏 ctrl+b, ctrl+f
  • 向下,向上滚动半屏 ctrl+d, ctrl+u

34. 插入模式

  • 光标前、后插入 i,a
  • 行首,行尾插入 I, A
  • 在当前行上、下另一起行插入 O, o
  • 从当前单词末尾插入 ea
  • 退出插入模式 esc
  • 删除前一个单词 ctrl+w
  • 删除到行首 ctrl+u

35. 编辑

  • 替换光标下的字符 r
  • 将下一行合并到当前行 J
  • 将下一行合并到当前行,并一种中间的空白字符 gJ
  • 清空当前行,并进入插入模式 cc
  • 清空当前单词,并进入插入模式 cw
  • 撤销修改 u
  • 删除光标下的一个字符,然后进入插入模式 s

36. 选择文本

  • 普通光标选择, 进入选择文本模式 v
  • 行选择,进入选择文本模式 V
  • 块选择,进入选择文本模式 ctrl+v 在多行行首插入注释#
  • ctrl+v 然后选择快,然后输入I, 然后输入#, 然后按esc
  • 注意,输入I指令时,光标只会定位到一个位置,编辑的内容也只是在一个位置,但是按了esc后,多行都会出现#
  • 进入选择文本模式之后
  • 选择光标所在单词(光标要先位于单词上) aw
  • 选择光标所在()区域,包括(), 光标要先位于一个括号上 ab
  • 选择光标所在[]区域,包括[], 光标要先位于一个括号上 aB
  • 选择光标所在()区域,不包括(), 光标要先位于一个括号上 ib
  • 选择光标所在[]区域,不包括[], 光标要先位于一个括号上 iB
  • 退出可视化区域 esc

37. 选择文本命令

  • 向左右缩进 <, >
  • 复制 y
  • 剪切 d
  • 大小写转换 ~

38. 标记

  • 显示标记列表 :marks
  • 标记当前位置为a ma
  • 跳转到标记a的位置 `a

39. 剪切删除

  • 剪切当前行 dd
  • 剪切2行 2dd
  • 剪切当前单词 dw
  • 从光标所在位置剪切到行尾 D, d$
  • 剪切当前字符 x
  • 删除单引号中的内容 di’ da’ 删除包括'
  • 删除双引号中的内容 di" da" 删除包括"
  • 删除中括号中的内容 di[ da[ 删除包括[
  • 删除大括号中的内容 di{ da{ 删除包括{
  • 删除括号中的内容 di( da( 删除包含(
  • 从当前光标位置,删除到到字符a dta

40. global命令

  • 删除所有不包含匹配项的文本行 :v/re/d re可以是字符,也可以是正则
  • 显示所有不包含匹配项的文本行 :v/re/p re可以是字符,也可以是正则
  • 删除包含匹配项的行 :g/re/d re可以是字符,也可以是正则
  • 显示所有包含匹配项的行 :g/re/p re可以是字符,也可以是正则

41. 文本对象

  • 当前单词 iw
  • 当前单词和一个空格 aw
  • 当前句子 is
  • 当前句子和一个空格 as
  • 当前段落 ip
  • 当前段落和一个空行 ap
  • 一对圆括号 a) 或 ab
  • 圆括号内部 i) 或 ib
  • 一对花括号 a}或 aB
  • 花括号内部 i}或 iB
  • a表示匹配两点和两点之间的字符), }, ], > , ‘, “, `, t(xml)
  • i表示匹配两点内部之间的字符

42. 复制

  • 复制当前行 yy
  • 复制2行 2yy
  • 复制当前单词 yw
  • 从光标所在位置复制到行尾 y$
  • 复制单引号中的内容 yi’ ya’ 复制包括'
  • 复制双引号中的内容 yi" ya” 复制包括"
  • 复制中括号中的内容 yi[ ya[ 复制包括[
  • 复制大括号中的内容 yi{ ya{ 复制包括{

43. 粘贴

  • 在光标后粘贴 p
  • 在光标前粘贴 P

44. 保存退出

  • 保存 w
  • 保存并退出 wq
  • 不保存退出 q!
  • 保存所有tab页并退出 wqa

46. 查找

  • 向下查找key /key
  • 向上查找key ?key
  • 下一个key n
  • 上一个key N
  • 移除搜索结果高亮 :noh
  • 设置搜索高亮 :set hlsearch
  • 统计当前模式匹配的个数 :%s///gn

47. 字符串替换

  • 全文将old替换为new %s/old/new/g
  • 全文将old替换为new, 但是会一个一个确认 %s/old/new/gc

48. 多文件搜索

  • 多文件搜索 :vimgrep /key/ {file} vimgrep /export/ */
  • 切换到下一个文件 cn
  • 切换到上一个文件 cp
  • 查看搜索结果列表 copen
  • 查看文件缓冲区 :ls

49. 窗口分割

  • 水平分割窗口 :split 默认split仅针对当前文件,如果在新窗口打开新的文件,可以:split file
  • 垂直分割窗口 :vsplit
  • 打开空白的窗口 :new
  • 关闭分割的窗口 ctrl+wq, :close 有时候ctrl+wq不管用,需要用close
  • 窗口之间切换 ctrl+ww
  • 切换到左边窗口 ctrl+wh
  • 切换到右边窗口 ctrl+wl
  • 切换到下边窗口 ctrl+wj
  • 切换到上边窗口 ctrl+wk
  • 关闭所有窗口 :qall 这表示 “quit all” (全部退出)。如果任何一个窗口没有存盘,Vim 都不会退出。同时光
  • 标会自动跳到那个窗口,你可以用 “:write” 命令保存该文件或者 “:quit!” 放弃修改。
  • 保存所有窗口修改后的内容 :wall 如果你知道有窗口被改了,而你想全部保存
  • 关闭所有窗口,放弃所有修改 :qall! 注意,这个命令是不能撤销的。
  • 保存所有修改,然后退出vim :wqall

窗口更多内容 http://vimcdoc.sourceforge.net/doc/usr_08.html#usr_08.txt

50. 宏

  • 录制宏a qa
  • 停止录制宏 q

51. 标签页

  • 新建标签页 tabnew
  • 在新标签页中打开file tabnew file
  • 切换到下个标签页 gt
  • 切换到上个标签页 gT
  • 关闭当前标签页 :tabclose, :tabc
  • 关闭其他标签页 :tabo, :tabonly
  • 在所有标签页中执行命令 :tabdo commad :tabdo w

52. 文本折叠

  • 折叠文本内容 zfap http://vimcdoc.sourceforge.net/doc/usr_28.html#usr_28.txt
  • 打开折叠 zo
  • 关闭折叠 zc
  • 展开所有折叠 zr
  • 打开所有光标行上的折叠用 zO
  • 关闭所有光标行上的折叠用 zC
  • 删除一个光标行上的折叠用 zd
  • 删除所有光标行上的折叠用 zD

53. 设置

  • 设置vim编辑器的宽度 set columns=200

54. 自动补全

  • 使用自动补全的下一个列表项 ctrl+n
  • 使用自动补全的上一个列表项 ctrl+p
  • 确认当前选择项 ctrl+y
  • 还原最早输入项 ctrl+e

55. 杂项

  • 在vim中执行外部命令 :!ls -al
  • 查看当前光标所在行与百分比 ctrl+g
  • 挂起vim, 使其在后台运行 ctrl+z
  • 查看后台挂起的程序 jobs
  • 使挂起的vim前台运行 fg 如果有多个后台挂起的任务, 则需要指定任务序号,如 :fg %1
  • 在每行行尾添加字符串abc :%s/$/abc
  • 在每行行首添加字符串abc :%s/^/abc
  • 每行行尾删除字符串abc :%s/$/abc
  • 每行行首删除字符串abc :%s/^/abc
  • 删除含有abc字符串的行 :g/abc/d
  • 删除每行行首到特定字符的内容,非贪婪匹配 : %s/^.{-}abc// var = abc123, 会删除var = abc
  • 调换当前行和它的下一行 ddp
  • 全文格式化 gg 跳到第一行 shift v shift g =

参考