vim 学习记录文档
# vim 学习记录文档
学习进度 user_25.txt
# 帮助文档使用
中文vim帮助文档参见https://github.com/yianwillis/vimcdoc (opens new window), 文档中有安装方法.
快捷键:
| 命令 | 说明 |
|---|---|
ctrl+] | 跳转到定义 |
ctrl+o, ctrl+t | 跳回原始位置 |
# 模式
vim主要使用的有一下几种模式
- 普通模式
- 可视模式
- 插入模式
- 命令模式
查看当前所处模式: :set showmode
# 普通模式
# 编辑
插入: i - 在光标位置进入插入模式, I - 在行首进入插入模式, a - 在光标后方进入插入模式, A - 在行尾进入插入模式, o - 在光标下方插入一行并进入插入模式, o - 在光标上方插入一行并进入插入模式.
删除: d - 删除, dd - 删除整行, d{move} - d加移动操作可删除移动范围内单词(如d2w, 删除光标后方两个单词), x - 删除当前光标下字符(即dl), X - 删除光标左侧字符(即dh), D - 删除到行尾(即d$), j - 删除换行符,即连接上下两行.
修改: c - 修改并进入插入模式, cc - 修改整行, c{move} - c加移动操作可修改移动范围内单词, C - 修改到行尾(即c$), s - 修改一个字符(即cl), S - 修改一整行(即cc), r - 替换一个字符但不进入插入状态, R - 从光标所在位置开始替换字符ESC结束.
复制: y - 复制内容到寄存器中, yy - 复制一行, Y - 复制一行, y$ - 复制到行尾.
粘贴: p - 粘贴寄存器中的内容到光标后, P - 粘贴寄存器中内容到光标前.
删除、修改、复制、粘贴等操作都可以添加移动和数量修饰来操作多个字符、单词、行等.
撤销: u - 撤销上一个编辑操作, ctrl+r - 重做, 撤销刚才的撤销, u - 行撤销
重复修改操作: . - 重复撤销除外的编辑命令.
保存: zz - 保存文件并退出, :q! - 放弃修改并退出, :w - 保存文件, :e! - 放弃修改并重新加载文件.
改变大小写: ~ - 改变光标处字母的大小写.
# 重复命令
. - 重复上次改变, 有计数前缀的重复 [count] 次。
; - 重复上次的 f、t、F 或者 T 命令 [count] 次
, - 反向重复上次的 f、t、F 或者 T 命令 [count] 次
# 移动
光标移动: h - 左, j - 下, k - 上, l - 右, + - 下, - - 上
单词移动: w - 下一个单词词首, b - 前一个单词词首, e - 下一个单词词尾, ge - 前一个单词词尾;
单词(空格分隔视为单词)移动: W - 下一个单词词首, B - 前一个单词词首, E - 下一个单词词尾, gE - 前一个单词词尾;
行移动: 0 - 行首, $ - 行尾, ^ - 行首(首个非空白字符)
行内查询并移动: f - 向右查询, F - 向左查询, t - 向右查询并移动到字母前一字符位置, T - 向左查询并移动到字母后一字符位置.
括号匹配移动: % - 括号匹配移动
移动到指定行: gg - 移动到文件首, 1G - 移动到文件首, G - 移动到文件尾, n% - 如50%,移动到文件50%位置.
移动到当前屏幕视野内的位置: H - 移动到屏幕顶部, M - 移动到屏幕中部, L - 移动到屏幕底部.
跳转: `` - 跳转到来源位置,再次按下跳回当前位置, `' - 和反引号功能一致;
Ctrl-o - 跳转到较老位置,Ctrl-i - 跳转到较新位置,TAB - 和Ctrl-i功能一致,Ctrl-] - 跳转到定义.
书签标记: m{mark} - 设定书签(mark为26 个字母,小写字母仅在当前文件内起作用,大写字母在文件列表中都可以起作用),
`{mark} - 跳转到标记,'{mark} - 和反引号一致, 也可跳转.
# 滚屏
滚屏: Ctrl-d - 向下滚半屏, Ctrl-u - 向上滚半屏, Ctrl-f - 向下滚一屏, Ctrl-b - 向上滚一屏.
行滚动: Ctrl-e - 向下滚屏一行, Ctrl-y - 向上滚屏一行.
按光标位置调整屏幕: zz - 屏幕滚动至光标行在中部, zt - 屏幕滚动至光标行在顶部, zb - 屏幕滚动至光标行在底部.
# 窗口操作
新建分割窗口: Ctrl-w s - 左右分割窗口, Ctrl-w v - 左右分割窗口, Ctrl-w n - 在上方新建空白窗口.
在窗口间移动:
Ctrl-w h - 光标移动到左侧窗口,
Ctrl-w j - 光标移动到下方窗口,
Ctrl-w k - 光标移动到上方窗口,
Ctrl-w l - 光标移动到右侧窗口,
Ctrl-w t - 跳转到最顶上的窗口,
Ctrl-w b - 跳转到最底下的窗口,
Ctrl-w Ctrl-w - 跳转到下一个窗口,
Ctrl-w w - 跳转到上一个窗口,
Ctrl-w p - 跳转到上一次激活的窗口.
移动窗口:
Ctrl-w K - 把当前窗口移到最上边.
Ctrl-w H - 把当前窗口移到最左边.
Ctrl-w J - 把当前窗口移到最下边.
Ctrl-w L - 把当前窗口移到最右边.
调整窗口大小: {n}Ctrl-w + - 增加当前窗口宽度(n表示要增加的行数,不写数字则增加1行),
Ctrl-w - - 减少当前窗口高度, {n}Ctrl-w _ - 设置当前窗口高度(缺省:尽可能高),
Ctrl-w = - 使所有窗口等高等宽, Ctrl-w < - 减少当前窗口宽度,
Ctrl-w > - 增加当前窗口宽度, Ctrl-w | - 设置当前窗口宽度(缺省:尽可能宽).
关闭窗口: Ctrl-w q - 退出编辑并关闭窗口, Ctrl-w c - 隐藏当前缓冲区并关闭窗口, Ctrl-w o - 使当前窗口成为唯一窗口.
# 查找
查找: / - 开始正向查找, ? - 开始反向查找, n - 跳转到下一个匹配单词, N - 跳转到上一个匹配单词.
光标在单词上时查找: * - 正向查找光标所在单词, # - 反向查找光标所在单词.
匹配词首或词尾: /word/> - />匹配词尾, /</word - </匹配词首, /</word/> - 仅匹配单词word.
匹配行首行尾: /word$ - $匹配行尾, /^word - ^匹配行首.
匹配字符: /c.m - .匹配任意字符, /word\. - \.匹配..
# 操作命令搭配说明
操作命令一般分为3个部分, 操作符 [+ 量词] + 移动, 如d2w表示删除两个单词.
操作符: d, c, r, y, p等.
量词: n - 数量, i - in的意思,如dis表示删除一个句子,
a -如daw表示删除一个单词(i,a的详细操作可参考文本对象text-objects).
移动: h,j,k,l,w,b,e等.
# 折叠
折叠命令以z开头:
zf - 手动折叠, 后跟量词移动命令可折叠一片区域, 如zfap 折叠光标所在段落.
zo - 打开折叠.
zc - 关闭折叠.
zr - 全文件减少折叠(r-reduce).
zm - 全文件折叠更多(m-more).
zR - 全部打开.
zM - 全部折叠.
zn - 禁止折叠功能.
zN - 恢复原来的折叠.
zi - 切换与zn和zN两者之间.
zO - 打开所有光标行上的折叠.
zC - 关闭所有标行上的折叠.
zd - 删除一个光标行上的折叠.
zD - 删除所有光标行上的折叠.
# 插入模式
插入模式可使用的快捷键:
Ctrl-m 或 Ctrl-j: 开始新行.
Ctrl-e: 插入光标下方的字符.
Ctrl-y: 插入光标上方的字符.
Ctrl-a: 插入上次插入的文本.
Ctrl-@: 插入上次插入的文本并结束插入模式.
Ctrl-r {0-9a-z%#:.-="}: 插入寄存器的内容.
Ctrl-h: 删除光标前一个字符.
Ctrl-w: 删除光标前的一个单词.
Ctrl-u: 删除当前行的所有字符.
Ctrl-i: 在光标位置插入<Tab>.
Ctrl-t: 在当前行首插入一个移位宽度的缩进.
Ctrl-d: 从当前行首删除一个移位宽度的缩进.
0 Ctrl-d: 删除当前行的所有缩进.
^ Ctrl-d: 删除当前行的所有缩进,恢复下一行的缩进.
Ctrl-[: <Esc>, 退出插入模式.
Ctrl-c: 退出插入模式.
Ctrl-p: 显示智能提示信息, 提示框显示出来后按Ctrl-p和Ctrl-n上下移动.
Ctrl-left/Shift-left和Ctrl-right/Shift-right: 左右跳过单词.
Shift-up/Shift-down: 上下翻页.
Ctrl-x Ctrl-e: 视图向下移动.
Ctrl-y Ctrl-e: 视图向上移动.
Ctrl-o: 临时进入命令模式, 命令执行完成后回到插入模式.
# 可视模式
进入可视模式: v - 普通可视模式, V - 按行选择, Ctrl-v - 列块选择.
选择: 移动操作(h,j,k,l,w,b,0,$等)在可视模式移动并选择内容, o - 选择模式中移动到另一端进行选择, O - 列块模式时移动到同一行的另一个角.
选择内容后操作: d - 删除选中内容, c - 删除选中内容并进入插入模式(即修改), y - 复制选中内容, p - 替换选中内容.
# 命令模式
# 未归类命令
:scriptnames: 确定文件在什么地方.
:jumps: 查看跳转列表.
:marks: 查看标记列表.
:maps: 查看键盘映射.
:options: 查看选项列表.
:reg: 查看寄存器列表.
:edit {filename}: 编辑文件
:saveas {newfilename}: 另存为新文件.
:file {newfilename}: 改变当前文件的文件名但不立即保存.
:command: 查看所有用户自定义命令.
:autocmd: 查看当前定义的所有自动命令.
:function: 列出所有用户自定义的函数及其参数.
# 分割窗口
:split: 上下分割.
:split {otherfile}: 在另一个窗口打开指定文件.
:new: 在上方新打开一个窗口.
:vsplit: 左右分割.
:vnew: 在左侧新开一个窗口.
:close: 关闭光标所在窗口.
:only: 关闭当前窗口外的所有窗口.
# 标签页操作
:tabedit {otherfile} - 在新标签页打开文件.
:tab split - 在新标签页打开当前文件.
:tabonly - 关闭除当前标签页外的所有标签页.
# 替换
:[range]substitute/from/to/[flags] - 替换字符串
# 高亮匹配
:set hlsearch : 高亮显示匹配内容.
:set nohlsearch : 去掉高亮显示.
:nohlsearch: 暂时去掉高亮显示.
:set incsearch: 查找时输入字符就开始匹配.
:set nowrapscan: 查找到文件结尾后停止,不会再回到文件头重新搜索.
# 选项设置
命令行模式可打开配置文件
:edit $MYVIMRC: 编辑配置文件.
:source $MYVIMRC: 使配置文件生效.
或者直接在外部打开自定义配置文件:
vim ~/.vimrc
# 在配置文件中
# 基本设置
通常使用set 命令设置参数, 如:
set history=200 " 保存命令历史为200行
# 键盘映射
例如:
" 映射Q为gq
map Q gq
2
普通映射命令:
map : 普通,可视模式及操作符等待模式
vmap : 可视模式
nmap : 普通模式
omap : 操作符等待模式
map! : 插入和命令行模式
imap : 插入模式
cmap : 命令行模式
防止递归映射:
noremap : 普通,可视和操作符等待模式
vnoremap : 可视模式
nnoremap : 普通模式
onoremap : 操作符等待模式
noremap! : 插入和命令行模式
inoremap : 插入模式
cnoremap : 命令行模式
删除映射:
unmap: 普通,可视和操作符等待模式
vunmap: 可视模式
nunmap: 普通模式
ounmap: 操作符等待模式
unmap!: 插入和命令行模式
iunmap: 插入模式
cunmap: 命令行模式