Practical Vim
命令
.命令
- 重复上次的修改
.范式:用一键移动,另一键执行
[n] Ctrl-a
对当前或查找到第一个数据,进行加运算
[n] Ctrl-x
对当前或查找到第一个数据,进行减运算
gR、gr
虚拟替换模式,替换制表符
Ctrl - o
跳转列表,回跳
Ctrl - i
跳转列表,前进
1. 模式
普通模式
- 停顿时请离开画笔
- 把撤销单元切成块:进入插入 修改 离开,是一次修改
- 操作符 + 动作命令 = 操作
- .命令
- 重复上次的修改
- .范式:用一键移动,另一键执行
- vim 的操作符命令 d{motion}
- c 修改
- d 删除
- y 复制到寄存器
- g~ 反转大小写
- gu
- 转换为小写
- gU
- 转换为大写
-
- 增加缩进
- <
- 减少缩进
- =
- 自动缩进, 格式化
- !
- 使用外部程序过滤{motion}所跨越的行
- Ctrl - w c
- 关闭活动窗口
- Ctrl - w o
- 只保留活动窗口,关闭其他所有窗口
- {N} gt
- 切换到编号为{N}的标签页
- gt
- 切换到下一标签页
- gT
切换到上一标签页
插入模式
- Ctrl-h
- 删除前一个字符
- Ctrl-w
- 删除前一个单词
- Ctrl-u
- 删除至行首
- 返回普通模式
- ESC
- Ctrl - [
- Ctrl - o
- 切换到插入普通模式
- 执行一次普通模式命令,后返回插入模式
- Ctrl - r {register}
- 插入寄存器中的的文本
- Ctrl-r Ctrl-p {register}
- 按原义插入寄存器中的的文本,不缩进
- Ctrl-r =表达式
- 调用表达式寄存器,插入计算后的值
- Ctrl - v{code}
- 用户字符编码插入非常用字符
- Ctrl-v065
- Ctrl-vu00bf
- Ctrl - k{char1}{char2}
- 用二合字母插入非常用字符
Ctrl-k?I
可视模式
- v
- 激活面向字符的可视模式
- V
- 激活面向行的可视模式
- Ctrl - v
- 激活面向列块的可视模式
- gv
重选上次的高亮选区
命令行模式
- 命令
- : [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}
- : [range] delete [reg]
- 地址、范围表示符号
- 0
- 虚拟行,位于文件第一行上方
- 1
- 文件的第一行
- $
- 文件的最后一行
- .
- 光标所在行
- 'm
- 包含位置标记m的行
- '<
- 高亮选区的起始行
- '>
- 高亮选区的结束行
- %
- 整个文件(:1,$的简写形式)
- 0
- @:
- 重复上次的Ex命令
- Tab
- 自动补全命令
- Shif - s
- 返回遍历补全列表
- Ctrl - d
- 显示可用的补全列表
- Ctrl - r Ctrl - w
- 插入光标下的单词
- Ctrl -r Ctrl - a
- 插入光标下的字串
- q/
- 打开查找命令历史的命令行窗口
- q:
- 打开Ex命令历史的命令行窗口
- Ctrl - f
- 从命令行模式切换到命令行窗口
- 调用外部程序
- :shell
- 启动一个shell,exit返回vim
- :!{cmd}
- 在shell中执行{cmd}
- :read !{cmd}
- 在shell中执行{cmd}, 并把其标准输出插入光标下方
- :[range]write !{cmd}
- 在shell中执行{cmd}, 以[range] 作为其标准输入
- :[range] ! {filter}
使用外部程序{filter} 过滤指定的[range]
2. 文件
管理多个文件
- :shell
- 缓冲区
- :ls
- 查看缓冲区列表
- :bprev
- 前一项
- :bnext
- 后一项
- :bfirst
- 第一项
- :blast
- 最后一项
- :bdelete 删除缓冲区项
- :bdelete N1 N2 N2
- :N,M bdelete
- :args 缓冲区参数列表
- :args {arglist}
- :args code/files
- :args index.html app.js
- :args
cat .chapters
- :args Glob
- :args .
- :args **/*.js
- :args **/.
- 退出时,处理隐藏缓冲区的方式
- :write
- :edit!
- :qall!
- :wall!
- :ls
- 分割窗口
- Ctrl - w
- Ctrl - v
- :split {file}
- 水平切分
- :vsplit {file}
- 垂直切分
- Ctrl-w h|j|k|l
- 切换到 左下上右窗口
- Ctrl-w w
- 切换窗口
- :close
- 关闭活动窗口
- :only
- 只保留活动窗口,关闭其他所有窗口
- :lcd {path}
- 设置当前窗口的本地工作目录
- 标签页将窗口分组 :h tabpage
- :windo lcd {path}
- 为标签页的所有窗口,设置本地工作目录
- :tabedit {filename}
- 在新标签页打开文件
- :Ctrl-w T
- 把当前窗口移到一个新标签页
- :tabclose
- 关闭当前标签页及其所有窗口
- :tabonly
- 只保留活动标签页,关闭所有期他标签页
- :tabnext {N}
- :tabnext
- :tabprevious
- :tabmove [N]
0:移到开头 省略N :移到结尾
打开及保存文件
- :windo lcd {path}
- :edit
- :edit %:h Tab
- :edit {path}
- :find
- :edit .
- :Explore
- 打开文件管理器
- Ctrl-^
- 从文件管理器,切换回刚才编辑的文件
- Ctrl-g
- 显示当前文件的文件名及状态
- :!mkdir -p %:h
- :w !sudo tee % > /dev/null
以超级用户使用tee保存文件
3. 移动及跳转
用动作命令移动
- 行移动
- h j k l
- 左 下 上 右 移动g一个实际行
- gj gh gk gl
- 左 下 上 右 移动一个屏幕行
- 0
- 移动到实际行的行首
- g0
- ^
- 移动到实际行的第一个非空白字符
- g^
- $
- 移动到实际行的行尾
- g$
- h j k l
- 单词移动
- w
- 正向移到到下一单词开头
- b
- 反向移动到当前单词/上一单词的开头
- e
- 正向移动到当前单词/下一单词的结尾
- ge
- 反向移动到上一单记词的结尾
- W、B、E、GE
- 大写表示操作字符串
- w
- 查找字符
- f {char}
- 正向移动到下一个字符所在之处
- F {char}
- 反向移动到上一下字符所在之处
- t {char}
- 正向移动到下一个字符所在之处的前一个字符上
- T {char}
- 反向移动到上一个字符所在之处的后一个字符上
- ;
- 重复上次的字符查找命令
- ,
- 反转方向查找上次的字符查找命令
- f {char}
- 精确的文本对象选择选区
- 分隔符文本对象
- a) 或 ab
- a+符号:表示选择一对符号间的内容,包含符号在内
- a} 或 aB
- a]
- a>
- a'
- a"
- a`
- at
- 一对XML标签
- i + ) } ] > ' " ` t
- i + 符号:表示选择一对符号内部,不包含符号
- a) 或 ab
- 范围文本对象
- iw
- 当前单词
- iW
- 当前字串
- aw
- 当前单词及一个空格
- aW
- 当前字串及一个空格
- is
- 当前名子
- as
- 当前名子及一个空格
- ip
- 当前段落
- ap
- 当前段落及一个空行
- iw
- 分隔符文本对象
- 位置标记
- m{a-zA-Z}
- 设置位置标记,小写用于当前缓冲区,大写用于全局
- '{mark}
- 跳到位置标记所在行, 光标置于第一个非空白字符 上
- `{mark}
- 跳到位置标记所在行, 光标置于位置所在之处,同时恢复行和列位置
- 自动位置标记
- ``
- 当前文件中上次跳转动作之前 的位置
- `.
- 上次修改的地方
- `^
- 上次插入的地方
- `[
- 上次修改或复制的起始位置
- `]
- 上次修改或复制的结束位置
- `<
- 上次高亮选区的起始位置
- `>
上次高亮选区的结束位置
文件间跳转
- ``
- m{a-zA-Z}
- 遍历跳转列表
- Ctrl - o
- 跳转列表后退
- Ctrl - i
- 跳转列表前进
- Ctrl - o
- 遍历改变列表 h: changelist
- :changes 查看改变列表
- g; 或 g,
- 正向或反向遍历改变列表
- gi
- 转到上次插入位置,并进入插入模式。 ( 恢复`^光标位置,并进入插入模式)
- gf
跳转到光标下的文件
4. 寄存器
:reg
查看寄存器内容
复制与粘贴
- ""
- 无名寄存器
- "0
- 复制专用寄存器
- "_
- 黑洞寄存器
- "+
- 系统剪贴板
- "*
- 选择专用寄存器
- "=
- 表达式寄存器
- "%
- 当前文件名
- "#
- 轮换文件名
- ".
- 上次插入的文本
- ":
- 上次执行的Ex命令
- "/
上次查找的模式
宏
- q
- 录制和停止宏按钮
- qa 或 qA
- 录制宏到寄存器a 或 大写字母 追加内容到寄存器a
- q{register}
- 录制宏到寄存器
- @{register}
- 执行寄存器内的内容
- @@
- 重复最近调用过的宏
- [n]@a
- 加次数执行宏
- [range] normal @a
- 指定范围内执行宏
- :argdo normal @a
- 对参数列表的所有缓冲区执行宏@a
提前设置 hidden
5. 模式
按模式匹配及按原义匹配
- :set ignorecase
- 全局设置大小写敏感性
- \c \C
- 每次查找时设置大小写敏感性
- \v
- (very magic)来统一正则表达式所有特殊符号的无则
- \V
- 原则文本开关
- ()
- 捕获子匹配
- <>
- 界定单词边界
- \zs \ze
- 界定匹配的边界
- * 转义问题字符
反向查找时转义?号
查找
- / 或 ?
- 正向或反向查找
- n 或 N
- 跳转到下一处 或 上一处匹配,保持查找 方向与偏移不变
- gn 或 gN
- 进入面向字符的可视模式,并选中下一外或上一处匹配
- :h incsearch
- 在执行查找前预览每一处匹配
- //e
- e标记,将光标偏移到查找匹配的结尾
- :%s//"\1"/g
- 用上次查找模式查找
- :%s///gn
- substitute 统计匹配数目,不修改
- :vimgrep //g %
统计匹配总数
替换
- :[range] s[ubstitute]/{pattern}/{string}/[flags]
- 查找替换
- g flag
- 全局范围内执行
- c
- 确认或拒绝每一处修改
- n
- 抑制正常的替换行为
- e
- 屏蔽错误提示
- &
- 重用上一次flag
- 替换域中特殊字符
- \r
- 插入换行符
- \t
- 制表符
- \
- 反斜杠
- \1
- 插入第1个匹配
- \2
- 插入第2个匹配
- \0
- 插入匹配模式的所有内容
- &
- 同\0
- ~
- 使用上次调时的{string}
- ={vim script}
- 执行{vim script}表达式;并将结果作为替换{string}
- \r
- g&
- 在整个文件范围内重复面向行的替换操作
- :%s//~/& 等于 g&
- :[range]&&
- 重新执行替换
- g& 是:%&&的快捷方式
- :%s//=submatch(0)-1/g
- submatch(0) 可得到当前匹配的内容
- :%s//={"dog":"man", "man":"dog"}[submatch(1)]/g
- 用字典映射替换匹配的内容
- 在整个工程范围内查找
-
- :vimgrep // **/*.txt
-
- :cfdo %s//string/gc
- 设置 hidden
:cfdo %s//string/g | update
global
-
- :[range] global[!] /{pattern}/ [cmd]
在某个指定模式的所有匹配行上运行Ex命令
6. 工具
ctags
- Ctrl - ]
- 跳转到定义处
- g Ctrl - ]
- 如果多处匹配,提示用户指定一处进行跳转
- Ctrl - t
- 后退按钮
- :tag {kewword}
- :tjump {keyword}
- :pop 或 Ctrl -t
- 反向遍历标签历史
- :tag
- 正向遍历标签历史
- :tnext
- :tprev
- :tfirest
- :tlast
:tselect
Quickfix列表
- :cnext
- :cprev
- :cfirst
- :clast
- :cnfile
- :cpfile
- :cc N
- :copen
- :cclose
- :cdo {cmd}
:cfdo {cmd}
工程内查找
- grep
vimgrep
自动补全
- 调出命令
- 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)补全
- Ctrl - n
- 弹出菜单使用
- Ctrl - n
- 使用下一匹配项
- Ctrl - p
- 使用上一匹配项
- Down
- UP
- Ctrl - y
- 确认使用当前选中的匹配项
- Ctrl - e
- 还原最早输入的文本
- Ctrl - h
- 从当前匹配项中删除一个字条
- Ctrl - l
- 从当前匹配项中增加一个字符
- {char}
中止自动补全并插入字符
Vim拼写检查器
- Ctrl - n
- :set spell
- 启用拼写检查器
- [s
- 反向跳转
- ]s
- 正向跳转
- z=
- 修改建议
- zg
- 光标下单词添加到拼写文件中
- zw
- 标记为拼写错误
- zug
- 撤销zg zw操作
- 插入模式利用拼写补全
- Ctrl - x s
Ctrl -x Crtl - s
7. 插件
commentary.vim 注释
- gc {motion}
- 切换指定行的注释状态
- gcap
- 注释当前段落
- gcG
- 注释到结尾
- gcc
注释当前行
matchit
% 在配对的关键字间跳转