摘要:光标移动基本词向前移动,光标停在第一个字符向后移动,光标停在第一个字符向后移动,光标停在最后一个字符行首或行尾移动到行尾移动到行首,非空白字符移动到行首,第一个字符指定字符单行搜索下一个单个字符单行搜索上一个单个字符单行搜索下一个单个字符,
VIM 光标移动
基本
h j k l
词
b 向前移动,光标停在第一个字符 (backward) w 向后移动,光标停在第一个字符 (word) e 向后移动,光标停在最后一个字符 (end of word)
行首或行尾
$ 移动到行尾 ^ 移动到行首,非空白字符 0 移动到行首,第一个字符
指定字符
f 单行搜索下一个单个字符 (find) F 单行搜索上一个单个字符 t 单行搜索下一个单个字符,光标停在前一个字符 (to) T 单行搜索上一个单个字符,光标停在前一个字符
匹配括号
% 移动到匹配的括号或移动到括号
移动到指定行
G 移动到最后一行 33G 移动到第 33行 gg 移动到第一行 40% 移动到40% H 移动到屏幕内第一行 (home) M 移动到屏幕内中间 (middle) L 移动到屏幕内最后一行 (last)
滚屏
向上滚动半屏 (up) 向下滚动半屏 (down) 向下滚动一屏 (forward) 向上滚动一屏 (backward)
简单查找
/string 向下查找包含 string的词 ?string 向上查找包含 string的词 /向下查找 string ? 向上查找 string n 重复前一次查找 N 重复前一次相反的查找 / 之前的查找 * 向下查找光标所在处的词,全词匹配 # 向上查找光标所在处的词,全词匹配 g* 向下查找包含光标所在处的词 g# 向上查找包含光标所在处的词
标记:
m{mark} 讲此处标记为 mark,mark 为一个字母 `{mark} 跳到标记 mark处,` 是1左边那个键 "{mark} 跳到标记 mark处所在行行首,"是单引号 特殊的mark " 此次跳转之前的起跳点 " 上次编辑该文件时光标最后停留的位置 [ 最后一次修改的起始位置 ] 最后一次修改的结束位置
其他命令
:set number 显示行号,左边 (se nu) :set nonumber 不显示行号(se nonu) :set ruler 显示光标位置,右下角 (se ru) :set noruler 不显示光标位置 (se noru) :set ignorecase 查找忽略大小写 :set noignorecase 查找不忽略大小写 :set hlsearch 查找高亮 (se hls) :set nohlserch 关闭查找 (se nohls) :set incsearch 键入目标字符串时就开始查找 :set nowrapscan 搜索过程在文件结束时就停止简单修改
插入
i 在当前光标处插入 I 在当前行第一个非空白字符前插入 a 在当前光标之后插入 A 在当前行尾插入 o 在当前行之下插入 O 在当前行之上插入
删除
d 删除操作符 (delete) c 修改操作符,删除之后自动进入插入 (change) dd 删除一行 cc 修改一行 x dl ,删除光标处字符 X dh ,删除光标左边的字符 D d$ ,删除到行尾 C c$ ,修改到行尾 s cl ,修改光标字符 S cc ,修改一整行 r 替换(删除之后插入并回到 Normal) . 执行上一次所执行的更改命令
复制
y 复制操作符 (yanking) yy 复制一行 yw 复制word,包含之后空白字符 ye 复制word,不包含之后空白字符 yaw 复制word,包含之后空白字符 yiw 复制word,不包含之后空白字符 yab 复制一个小括号里面的内容,包括括号本身 yib 复制一个小括号里面的内容,不包括括号本身 ya{ 复制一个大括号里面的内容,包括括号本身 yi{ 复制一个大括号里面的内容,不包括括号本身 p 粘贴(put)
对齐
= 对齐操作符 == 对齐一行 n== 对齐n行 =a{ 对齐一个大括号里面的内容
大小写替换
~ 大小写替换 g~ 大小写替换操作 g~iw 改变光标处单词大小写 guiw 光标处单词变成小写 gUiw 光标处单词变成大写
命令计数器 n+命令
一个命令重复执行 如:4x删除 4个字符
操作命令符 +位移命令符
操作如:删除 d,复制y ;位移如:词语 w,$ 行尾 d$ 删除到句尾 4yy 复制4行 3dw 3次删除一个单词 d3w 一次删除 3个单词 3d2w 3次删除 2个单词
常用删除命令
x(dl), X(dh), D(d$), dw, db, diw, daw, dG, dgg
visual 模式(主要功能就是选择)
v 进入visual模式,移动光标选择操作文本范围 V 进入visual行模式,选择以行为单位查找替换进入visual块模式,选择块
查找命令
/, ?, n, N, #, *, g#, g*, gd, gD
替换命令
:[n,m]s/[src]/[dst]/[g][c] [n,m] 表示一个范围,从 n~m行中查找替换,[n,$]表示从第 n行之后 % 表示整个文件 [src] 要查找的词, [dst]要替换的词 [g] 替换所有的匹配,若没有,只匹配第一个 [c] 替换前询问 / 为分隔符,也可以用 +或# 来分隔 :s/src/dst/ 替换当前行第一个 src为dst :s/src/dst/g 替换当前行所有 src为dst :n,ms/src/dst/ 替换n~m行第一个 src为dst :n,$s/src/dst/g 替换第n行到最后一行中所有 src为dst :%s/src/dst/g 替换整个文件中所有 src为dst :%s/src/dst/gc 替换整个文件中所有 src为dst 并询问是否替换 :%s//dst/gc 与:%s/src/dst/gc一样(全词匹配)
正则匹配
* 匹配0以上之前的字符 + 匹配1个以上之前字符 = 匹配0个或 1个之前字符 ? 匹配0个或 1个之前字符 . 匹配任何单个字符 < 匹配一个单词的开始 > 匹配一个单词的结束 s 匹配空白字符和 S 匹配非空白字符 d 数字[0-9] D 非数字[^0-9] x 十六进制数字 [0-9A-Fa-f] X 费十六进制数字 [^0-9A-Fa-f] l 小写字符 [a-z] L 非小写字符 [^a-z] u 大写字符 [A-Z] U 非大写字符 [^A-Z] a 字符[A-Za-z] A 非字符[^A-Za-z] [] 任何[]中的字符
更多
:help pattern折叠
折叠方式
manual 手工定义折叠 indent 更多的缩进表示更高级的折叠 expr 用表达式来定义折叠 syntax 用语法高亮来定义折叠 diff 对没有更改的文本进行折叠 marker 对文中的标志折叠 set foldmethod=**** 设置折叠方式 marker方式,需要用标记来标识代码的折叠,系统默认是 {{{和}}}
折叠命令
zc 折叠 zC 对所在范围内所有嵌套的折叠点进行折叠 zo 展开 zO 对所在范围内所有嵌套的折叠点展开 zr, zR 折叠所有 zm, zM 展开所有 za, zA 折叠/打开当前折叠 zi 折叠/展开所有 [z 到当前打开的折叠开始处 ]z 到当前打开的折叠末尾处 zj 向下移动到下一个折叠开始处 zk 向上移动到前一折叠的结束处 zf 创建折叠 zf56G 创建从当前行起到 56行的代码折叠 10zf 创建从当前行起后 10行的代码折叠 10zf- 创建从当前行起到之前 10行的代码折叠 zf% 创建从当前行起到对应匹配的括号 zd 删除光标下的折叠,仅当 manual或marker 方式有效 zD 嵌套地删除光标下的折叠,仅当 manual或marker 方式有效 zE 除去窗口里的所有折叠,仅当 manual或marker 方式有效
foldlevel
"foldlevel" 是个数值选项:数字越大则打开的折叠更多 当 "foldlevel" 为 0 时,所有的折叠关闭 当 "foldlevel" 为正数时,一些折叠关闭 当 "foldlevel" 很大时,所有的折叠打开 "foldlevel" 的改变后立即生效。之后,折叠可以被手动地打开和关闭文件
文件操作
:w 保存 :w! 强制保存 :w filename 将当前缓冲区的内容保存成文件 filename :n1, n2, filename 将n1到 n2的内容保存为文件filename :q 退出当前窗口,若改动,提示失败 :q! 强制退出,放弃改动 :wq 保存后退出 :wa 保存所有 :qa 退出所有 :wqa 保存所有后退出 ZZ 相当于:wq
编辑另一个文件
:edit file
多文件编辑
vim filename1 filename2 ... :bn 跳转至下一缓冲区 (文件)( 最后一个 ->第一个) :bN 跳转到上一缓冲区 (文件)( 第一个->最后一个 ) :bd 关闭当前缓冲区 (文件) :n 跳转至下一文件 ,如当前文件为最后一个,提示错误 :N 跳转至上一文件 ,如当前文件为第一个,提示错误 :next, :previous 跳转至下 /上一文件 :wnext, :wprevious 保存当前文件并跳转至下 /上一文件 :last, :first 跳转至最后一个 /第一个文件 :files 列出当前已打开文件 :args 给出进入 vim时命令行参数;当前正在编辑文件名用 "[]"列出
窗口分隔
s 水平分割窗口 v 垂直分割窗口 w 切换至另一窗口 h 切换至左侧窗口 j 切换至下方窗口 k 切换至上方窗口 l 切换至右侧窗口 H 移动当前窗口到左边 J 移动当前窗口到下面 K 移动当前窗口到上面 L 移动当前窗口到右边 :split filename 水平分隔窗口打开 filename :vsplit filename 垂直分割窗口打开 filename
标签式编辑
:tabnew filename 在新标签中打开 gt, :tabnext 切换至下一个标签 gT, :tabprevious 切换至上一个标签 :tabc 关闭当前标签 :tabl 切换至最后一个标签 :tabmove n 切换到第 n个标签,默认标签编号从 0开始
目录
netrw 插件
netrw 插件是vim的标准插件,在 .vimrc中只要设置了 set nocp " 不与vi兼容 filetype plugin on " 允许插件 就可以使用 netrw插件了
打开目录
Ex[plore] 打开当前目录或指定目录 Se[xplore] 水平分割并打开当前目录或指定目录 Ve[xplore] 垂直分割并打开当前目录或指定目录 Te[xplore] 新建标签并打开当前目录或指定目录
目录操作
宏进入目录 试图删除文件 /目录 - 上一级目录 a 在正常显示,隐藏和显示三种方式间切换 c 使浏览中的目录成为当前目录 d 建立目录 D 试图删除目录 i 在瘦、长、宽、和树形的各种列表中切换刷新目录列表 o 打开新浏览窗口,进入光标所在目录,使用水平分割 p 预览文件 P 在前一次使用的窗口里预览 r 反转排序顺序 R 给指定文件 /目录换名 s 选择排序方式:按名字、时间、文件大小排序 S 指定按名字排序的后缀优先级 t 在新标签页里打开光标所在文件 /目录 v 打开新浏览窗口,进入光标所在目录,使用垂直分割
创建宏
q ++ [一系列命令] + q 指用户自定义的 a-z中的一个寄存器 如:qa...q
运行宏
@ +MAP运行寄存器中的宏 @@ 重复运行上一次宏 10@a 重复运行寄存器 a中的宏10 次
映射模式
普通模式 可视模式 操作符等待模式 插入模式 命令行模式
映射模式代号
普通、可视和选择、操作符等待 n 普通 v 可视和选择 s 选择 x 可视 o 操作符等待 ! 插入和命令行 i 插入 l 插入、命令行和 Lang-Arg模式的":lmap" 映射 c 命令行
命令
map {lhs} {rhs} 把普通、可视和选择、操作符等待模式下的 lhs命令映射成rhs,如:map tn :tabnew noremap noremap对rhs不会重新扫描映射 unmap {lhs} 取消对lhs的映射 mapclear 取消所有 map映射 nmap 只作用于普通模式下的映射 imap 只作用于插入模式下的映射 nnoremap 只作用于普通模式下的 noremap nunmap 只作用于普通模式下的 unmap nmapclear 只作用于普通模式下的 mapclear
特殊参数
, , ,