Practical Vim
-
- 文件
1.1. 管理多个文件
1.1.1. 缓冲区
• :ls
• 查看缓冲区列表
• :bprev
• 前一项
• :bnext
• 后一项
• :bfirst
• 第一项
• :blast
• 最后一项
• :bdelete 删除缓冲区项
• :bdelete N1 N2 N2
• :N,M bdelete
• :args 缓冲区参数列表
• :args {arglist}
• :args code/files
• :args index.html app.js
• :argscat .chapters
• :args Glob
• :args .
• :args **/.js
• :args **/.*
• 退出时,处理隐藏缓冲区的方式
• :write
• :edit!
• :qall!
• :wall!
1.1.2. 分割窗口
• Ctrl - w
• Ctrl - v
• :split {file}
• 水平切分
• :vsplit {file}
• 垂直切分
• Ctrl-w h|j|k|l
• 切换到 左下上右窗口
• Ctrl-w w
• 切换窗口
• :close
• 关闭活动窗口
• :only
• 只保留活动窗口,关闭其他所有窗口
• :lcd {path}
• 设置当前窗口的本地工作目录
1.1.3. 标签页将窗口分组 :h tabpage
• :windo lcd {path}
• 为标签页的所有窗口,设置本地工作目录
• :tabedit {filename}
• 在新标签页打开文件
• :Ctrl-w T
• 把当前窗口移到一个新标签页
• :tabclose
• 关闭当前标签页及其所有窗口
• :tabonly
• 只保留活动标签页,关闭所有期他标签页
• :tabnext {N}
• :tabnext
• :tabprevious
• :tabmove [N]
• 0:移到开头 省略N :移到结尾
1.2. 打开及保存文件
1.2.1. :edit
1.2.2. :edit %:h Tab
1.2.3. :edit {path}
1.2.4. :find
1.2.5. :edit .
1.2.6. :Explore
• 打开文件管理器
1.2.7. Ctrl-^
• 从文件管理器,切换回刚才编辑的文件
1.2.8. Ctrl-g
• 显示当前文件的文件名及状态
1.2.9. :!mkdir -p %:h
1.2.10. :w !sudo tee % > /dev/null
• 以超级用户使用tee保存文件
- 文件
-
- 移动及跳转
2.1. 用动作命令移动
2.1.1. 行移动
• h j k l
• 左 下 上 右 移动g一个实际行
• gj gh gk gl
• 左 下 上 右 移动一个屏幕行
• 0
• 移动到实际行的行首
• g0
• ^
• 移动到实际行的第一个非空白字符
• g^
• $
• 移动到实际行的行尾
• g$
2.1.2. 单词移动
• w
• 正向移到到下一单词开头
• b
• 反向移动到当前单词/上一单词的开头
• e
• 正向移动到当前单词/下一单词的结尾
• ge
• 反向移动到上一单记词的结尾
• W、B、E、GE
• 大写表示操作字符串
2.1.3. 查找字符
• f {char}
• 正向移动到下一个字符所在之处
• F {char}
• 反向移动到上一下字符所在之处
• t {char}
• 正向移动到下一个字符所在之处的前一个字符上
• T {char}
• 反向移动到上一个字符所在之处的后一个字符上
• ;
• 重复上次的字符查找命令
• ,
• 反转方向查找上次的字符查找命令
2.1.4. 精确的文本对象选择选区
• 分隔符文本对象
• a) 或 ab
• a+符号:表示选择一对符号间的内容,包含符号在内
• a} 或 aB
• a]
• a>
• a'
• a"
• a• at • 一对XML标签 • i + ) } ] > ' "
t
• i + 符号:表示选择一对符号内部,不包含符号
• 范围文本对象
• iw
• 当前单词
• iW
• 当前字串
• aw
• 当前单词及一个空格
• aW
• 当前字串及一个空格
• is
• 当前名子
• as
• 当前名子及一个空格
• ip
• 当前段落
• ap
• 当前段落及一个空行
2.1.5. 位置标记
• m{a-zA-Z}
• 设置位置标记,小写用于当前缓冲区,大写用于全局
• '{mark}
• 跳到位置标记所在行, 光标置于第一个非空白字符 上
•{mark} • 跳到位置标记所在行, 光标置于位置所在之处,同时恢复行和列位置 • 自动位置标记 • `` • 当前文件中上次跳转动作之前 的位置 •
.
• 上次修改的地方
•^ • 上次插入的地方 •
[
• 上次修改或复制的起始位置
•] • 上次修改或复制的结束位置 •
<
• 上次高亮选区的起始位置
•> • 上次高亮选区的结束位置 2.2. 文件间跳转 2.2.1. 遍历跳转列表 • Ctrl - o • 跳转列表后退 • Ctrl - i • 跳转列表前进 2.2.2. 遍历改变列表 h: changelist • :changes 查看改变列表 • g; 或 g, • 正向或反向遍历改变列表 2.2.3. gi • 转到上次插入位置,并进入插入模式。 ( 恢复
^光标位置,并进入插入模式)
2.2.4. gf
• 跳转到光标下的文件
- 移动及跳转
-
- 寄存器
3.1. :reg
3.1.1. 查看寄存器内容
3.2. 复制与粘贴
3.2.1. ""
• 无名寄存器
3.2.2. "0
• 复制专用寄存器
3.2.3. "_
• 黑洞寄存器
3.2.4. "+
• 系统剪贴板
3.2.5. "*
• 选择专用寄存器
3.2.6. "=
• 表达式寄存器
3.2.7. "%
• 当前文件名
3.2.8. "#
• 轮换文件名
3.2.9. ".
• 上次插入的文本
3.2.10. ":
• 上次执行的Ex命令
3.2.11. "/
• 上次查找的模式
3.3. 宏
3.3.1. q
• 录制和停止宏按钮
3.3.2. qa 或 qA
• 录制宏到寄存器a 或 大写字母 追加内容到寄存器a
3.3.3. q{register}
• 录制宏到寄存器
3.3.4. @{register}
• 执行寄存器内的内容
3.3.5. @@
• 重复最近调用过的宏
3.3.6. [n]@a
• 加次数执行宏
3.3.7. [range] normal @a
• 指定范围内执行宏
3.3.8. :argdo normal @a
• 对参数列表的所有缓冲区执行宏@a
• 提前设置 hidden
- 寄存器
-
- 模式
4.1. 按模式匹配及按原义匹配
4.1.1. :set ignorecase
• 全局设置大小写敏感性
4.1.2. c C
• 每次查找时设置大小写敏感性
4.1.3. v
• (very magic)来统一正则表达式所有特殊符号的无则
4.1.4. V
• 原则文本开关
4.1.5. ()
• 捕获子匹配
4.1.6. <>
• 界定单词边界
4.1.7. zs ze
• 界定匹配的边界
4.1.8.
• 转义问题字符
• 反向查找时转义?号
4.2. 查找
4.2.1. / 或 ?
• 正向或反向查找
4.2.2. n 或 N
• 跳转到下一处 或 上一处匹配,保持查找 方向与偏移不变
4.2.3. gn 或 gN
• 进入面向字符的可视模式,并选中下一外或上一处匹配
4.2.4. :h incsearch
• 在执行查找前预览每一处匹配
4.2.5. //e
• e标记,将光标偏移到查找匹配的结尾
4.2.6. :%s//"1"/g
• 用上次查找模式查找
4.2.7. :%s///gn
• substitute 统计匹配数目,不修改
4.2.8. :vimgrep //g %
• 统计匹配总数
4.3. 替换
4.3.1. :[range] s[ubstitute]/{pattern}/{string}/[flags]
• 查找替换
• g flag
• 全局范围内执行
• c
• 确认或拒绝每一处修改
• n
• 抑制正常的替换行为
• e
• 屏蔽错误提示
• &
• 重用上一次flag
4.3.2. 替换域中特殊字符
•
• 插入换行符
•
• 制表符
•
• 反斜杠
• 1
• 插入第1个匹配
• 2
• 插入第2个匹配
•
• 插入匹配模式的所有内容
• &
• 同
• ~
• 使用上次调时的{string}
• ={vim script}
• 执行{vim script}表达式;并将结果作为替换{string}
4.3.3. g&
• 在整个文件范围内重复面向行的替换操作
• :%s//~/& 等于 g&
4.3.4. :[range]&&
• 重新执行替换
• g& 是:%&&的快捷方式
4.3.5. :%s//=submatch(0)-1/g
• submatch(0) 可得到当前匹配的内容
4.3.6. :%s//={"dog":"man", "man":"dog"}[submatch(1)]/g
• 用字典映射替换匹配的内容
4.3.7. 在整个工程范围内查找
• 1. :vimgrep // **/*.txt
• 2. :cfdo %s//string/gc
• 设置 hidden
• :cfdo %s//string/g | update
4.4. global
4.4.1. :[range] global[!] /{pattern}/ [cmd]
• 在某个指定模式的所有匹配行上运行Ex命令
- 模式
-
- 工具
5.1. ctags
5.1.1. Ctrl - ]
• 跳转到定义处
5.1.2. g Ctrl - ]
• 如果多处匹配,提示用户指定一处进行跳转
5.1.3. Ctrl - t
• 后退按钮
5.1.4. :tag {kewword}
5.1.5. :tjump {keyword}
5.1.6. :pop 或 Ctrl -t
• 反向遍历标签历史
5.1.7. :tag
• 正向遍历标签历史
5.1.8. :tnext
5.1.9. :tprev
5.1.10. :tfirest
5.1.11. :tlast
5.1.12. :tselect
5.2. Quickfix列表
5.2.1. :cnext
5.2.2. :cprev
5.2.3. :cfirst
5.2.4. :clast
5.2.5. :cnfile
5.2.6. :cpfile
5.2.7. :cc N
5.2.8. :copen
5.2.9. :cclose
5.2.10. :cdo {cmd}
5.2.11. :cfdo {cmd}
5.3. 工程内查找
5.3.1. grep
5.3.2. vimgrep
5.4. 自动补全
5.4.1. 调出命令
• Ctrl - n
• 普通关键字
• Ctrl -x Ctrl - n
• 当前缓冲区关键字
• Ctrl -x Ctrl - i
• 包含文件关键字
• Ctrl - x Ctrl - ]
• 标签文件关键字
• Ctrl - x Ctrl - k
• 字典查找
• Ctrl - x Ctrl - l
• 整行补全
• Ctrl - x Ctrl - f
• 文件名补全
• Ctrl - x Ctrl - o
• 全能(Omni)补全
5.4.2. 弹出菜单使用
• Ctrl - n
• 使用下一匹配项
• Ctrl - p
• 使用上一匹配项
• Down
• UP
• Ctrl - y
• 确认使用当前选中的匹配项
• Ctrl - e
• 还原最早输入的文本
• Ctrl - h
• 从当前匹配项中删除一个字条
• Ctrl - l
• 从当前匹配项中增加一个字符
• {char}
• 中止自动补全并插入字符
5.5. Vim拼写检查器
5.5.1. :set spell
• 启用拼写检查器
5.5.2. [s
• 反向跳转
5.5.3. ]s
• 正向跳转
5.5.4. z=
• 修改建议
5.5.5. zg
• 光标下单词添加到拼写文件中
5.5.6. zw
• 标记为拼写错误
5.5.7. zug
• 撤销zg zw操作
5.5.8. 插入模式利用拼写补全
• Ctrl - x s
• Ctrl -x Crtl - s
- 工具
-
- 插件
6.1. commentary.vim 注释
6.1.1. gc {motion}
• 切换指定行的注释状态
6.1.2. gcap
• 注释当前段落
6.1.3. gcG
• 注释到结尾
6.1.4. gcc
• 注释当前行
6.2. matchit
6.2.1. % 在配对的关键字间跳转
- 插件
- 命令
7.1. .命令
7.1.1. 重复上次的修改
7.1.2. .范式:用一键移动,另一键执行
7.2. [n] Ctrl-a
7.2.1. 对当前或查找到第一个数据,进行加运算
7.3. [n] Ctrl-x
7.3.1. 对当前或查找到第一个数据,进行减运算
7.4. gR、gr
7.4.1. 虚拟替换模式,替换制表符
7.5. Ctrl - o
7.5.1. 跳转列表,回跳
7.6. Ctrl - i
7.6.1. 跳转列表,前进 -
- 模式
8.1. 普通模式
8.1.1. 停顿时请离开画笔
8.1.2. 把撤销单元切成块:进入插入 修改 离开,是一次修改
8.1.3. 操作符 + 动作命令 = 操作
8.1.4. .命令
• 重复上次的修改
• .范式:用一键移动,另一键执行
8.1.5. vim 的操作符命令 d{motion}
• c 修改
• d 删除
• y 复制到寄存器
• g~ 反转大小写
• gu
• 转换为小写
• gU
• 转换为大写
• >
• 增加缩进
• <
• 减少缩进
• =
• 自动缩进, 格式化
• !
• 使用外部程序过滤{motion}所跨越的行
8.1.6. Ctrl - w c
• 关闭活动窗口
8.1.7. Ctrl - w o
• 只保留活动窗口,关闭其他所有窗口
8.1.8. {N} gt
• 切换到编号为{N}的标签页
8.1.9. gt
• 切换到下一标签页
8.1.10. gT
• 切换到上一标签页
8.2. 插入模式
8.2.1. Ctrl-h
• 删除前一个字符
8.2.2. Ctrl-w
• 删除前一个单词
8.2.3. Ctrl-u
• 删除至行首
8.2.4. 返回普通模式
• ESC
• Ctrl - [
• Ctrl - o
• 切换到插入普通模式
• 执行一次普通模式命令,后返回插入模式
8.2.5. Ctrl - r {register}
• 插入寄存器中的的文本
8.2.6. Ctrl-r Ctrl-p {register}
• 按原义插入寄存器中的的文本,不缩进
8.2.7. Ctrl-r =表达式
• 调用表达式寄存器,插入计算后的值
8.2.8. Ctrl - v{code}
• 用户字符编码插入非常用字符
• Ctrl-v065
• Ctrl-vu00bf
8.2.9. Ctrl - k{char1}{char2}
• 用二合字母插入非常用字符
• Ctrl-k?I
8.3. 可视模式
8.3.1. v
• 激活面向字符的可视模式
8.3.2. V
• 激活面向行的可视模式
8.3.3. Ctrl - v
• 激活面向列块的可视模式
8.3.4. gv
• 重选上次的高亮选区
8.4. 命令行模式
8.4.1. 命令
• : [range] delete [reg]
• 删除提定范围的行【到寄存器】
• : [range] yank [reg]
• 复制指定范围的行 【到寄存器】
• : [line] put [reg]
• 在指定行后粘贴寄存器中的内容
• : [range] copy {address}
• 把指定范围的行复制到指定地址行之下
• : [range] move {address}
• 把指定范围的行移动到指定地址之下
• : [range] join
• 连接指定范围内的行
• : [range] normal {commands}
• 对指定范围内的每一行执行普通模式命令 {commands}
• :[range] substitute/{pattern}/{string}/[flags]
• 把指定范围内的{pattern} 替换成{string}
• : [range] global/{pattern}/[cmd]
• 对指定范围内匹配{pattern}的所有行执行Ex命令{cmd}
8.4.2. 地址、范围表示符号
• 0
• 虚拟行,位于文件第一行上方
• 1
• 文件的第一行
• $
• 文件的最后一行
• .
• 光标所在行
• 'm
• 包含位置标记m的行
• '<
• 高亮选区的起始行
• '>
• 高亮选区的结束行
• %
• 整个文件(:1,$的简写形式)
8.4.3. @:
• 重复上次的Ex命令
8.4.4. Tab
• 自动补全命令
8.4.5. Shif - s
• 返回遍历补全列表
8.4.6. Ctrl - d
• 显示可用的补全列表
8.4.7. Ctrl - r Ctrl - w
• 插入光标下的单词
8.4.8. Ctrl -r Ctrl - a
• 插入光标下的字串
8.4.9. q/
• 打开查找命令历史的命令行窗口
8.4.10. q:
• 打开Ex命令历史的命令行窗口
8.4.11. Ctrl - f
• 从命令行模式切换到命令行窗口
8.4.12. 调用外部程序
• :shell
• 启动一个shell,exit返回vim
• :!{cmd}
• 在shell中执行{cmd}
• :read !{cmd}
• 在shell中执行{cmd}, 并把其标准输出插入光标下方
• :[range]write !{cmd}
• 在shell中执行{cmd}, 以[range] 作为其标准输入
• :[range] ! {filter}
• 使用外部程序{filter} 过滤指定的[range]
- 模式