最近开始Linux环境下编程,有时需要使用vim浏览和修改代码,特意学习了一下,并整理了一些常用指令,如下所示。
VIM常用命令
- 工作模式
- 正常模式 Esc
- 编辑模式 i
- 可视选择模式 v
- 文件
- 打开 :e
- 保存 :w
- 保存并退出: x
- 退出 :q
- 光标
- 方向键
- 到行首 0 (数字0)
- 下一个单词词首 W
- 下一单词词尾 e
- 上一个单词的词首
- 到行首 Home
- 到行尾 End
- 到文件头 gg
- 到文件尾 G
- 到第n行 ngg
- 到屏首 H
- 到屏中 M
- 到屏底 L
- 翻屏
- 向下一屏 ctrl + f
- 向上一屏 ctrl + b
- 向下半屏 ctrl + d
- 向上半屏 ctrl + u
- 到文件百分之n的地方 n%
- 标签-MARK
- 当前文件标签 ma mb ... mz
- 全局文件标签 mA mB ... mZ
- 移动到上一个标签 mo
- 移动到下一个标签 mi
- 显示所有标签 :marks
- 删除标签 Mark
- :delmarks a
- :delmarks a b
- :delmarks a-g
- :delmars a d-x
- 删除所有标签 :delmarks!
- 剪切复制粘帖
- 复制 copY
- 复制可视模式下选中的文本 y
- 复制一行 yy
- 复制光标后的n个词 ynw
- 复制光标后n个字符 ynl
- 复制光标前n个字符 ynh
- 剪切删除 Delete 粘帖 Paste
- 剪切光标处到行尾的内容 D
- 剪切光标处到行首的内容 d0
- 删除一行 dd
- 删除光标后n词 dnw
- 删除光标后n个字符 dnl
- 删除光标前n个字符 dnh
- 剪切第m行到第n行的内容 :m, nd
- 剪切光标以上所有行 dgg
- 剪切光标一下所有行 dG
- 剪切一个词 daw
- 剪切一行 dal
- 剪切一个段落(智能) das
- 剪切目前圆括号内的内容 dab
- 接见后面的行知道遇到空行 dap
- 在光标之前粘帖 p
- 在光标之后粘帖 P
- 寄存器
- 显示所有寄存器内容 :reg
- 放入寄存器
- 复制 copY
- 将当前行放入寄存器a 中 "ay
- 将当前行放入寄存器b 中 "by
- ...
- 将当前行放入寄存品z 中 "zy
-
- 追加到寄存器
-
- 将当前行追加到寄存器a中 ”Ay
- 将当前词追加到寄存器a中 “ Aw
- 将当前段落追加到寄存器b中 ”Bs
-
- 在光标处粘帖寄存器内容
-
- 粘帖寄存器a内容 “ap
- 粘帖寄存器b内容 ”bp
- ...
- 粘帖寄存器z内容 “zp
- 查找
- 基本指令 :/ mywords
- 下一个 n
- 上一个 N
- 替换 replaSe
- 替换当前行第一个匹配文本 :s / old / new
- 替换当前行所有匹配文本 :s / old / new g
- 替换n1到n2行的匹配文本 :n1, n2 s / old / new g
- 替换文件中所有匹配文本 :%s / old / new
- 替换文件中所有匹配文本,并在每单次替换中询问用户确认 :%s / old / new gc
- 替换匹配文本,忽略大小写 :%s / old / new gi
- 行范围表示法
- m,n 表示第没行到第n行
- 0 最开始一行
- y 最后一行
- . 当前行
- % 所有行
- 撤销指令 u
- 重做指令 Ctrl+r
- 模式指令
- 基本格式 :[范围]g/模式/命令
- 举例
- 对找到的所有含有WITHOUT的文本执行正常模式下的dd(删除行)的指令 :%/g WITHOUT /normal /dd
- 正则表达式转译符
- 十进制数 \d
- 空格 \s
- 非空字符 \S
- 英文字符(alphabet) \a
- 或 \|
- . \.