vim 学习记录文档

2021-10-18 大约 10 分钟

# vim 学习记录文档

学习进度 user_25.txt

# 帮助文档使用

中文vim帮助文档参见https://github.com/yianwillis/vimcdoc (opens new window), 文档中有安装方法.

快捷键:

命令 说明
ctrl+] 跳转到定义
ctrl+o, ctrl+t 跳回原始位置

# 模式

vim主要使用的有一下几种模式

  1. 普通模式
  2. 可视模式
  3. 插入模式
  4. 命令模式

查看当前所处模式: :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] 次。

; - 重复上次的 ftF 或者 T 命令 [count]

, - 反向重复上次的 ftF 或者 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 - 切换与znzN两者之间.

zO - 打开所有光标行上的折叠.

zC - 关闭所有标行上的折叠.

zd - 删除一个光标行上的折叠.

zD - 删除所有光标行上的折叠.

# 插入模式

插入模式可使用的快捷键:

Ctrl-mCtrl-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-pCtrl-n上下移动.

Ctrl-left/Shift-leftCtrl-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
1

# 在配置文件中

# 基本设置

通常使用set 命令设置参数, 如:

set history=200 " 保存命令历史为200行
1

# 键盘映射

例如:

" 映射Q为gq
map Q gq
1
2

普通映射命令:

map : 普通,可视模式及操作符等待模式

vmap : 可视模式

nmap : 普通模式

omap : 操作符等待模式

map! : 插入和命令行模式

imap : 插入模式

cmap : 命令行模式

防止递归映射:

noremap : 普通,可视和操作符等待模式

vnoremap : 可视模式

nnoremap : 普通模式

onoremap : 操作符等待模式

noremap! : 插入和命令行模式

inoremap : 插入模式

cnoremap : 命令行模式

删除映射:

unmap: 普通,可视和操作符等待模式

vunmap: 可视模式

nunmap: 普通模式

ounmap: 操作符等待模式

unmap!: 插入和命令行模式

iunmap: 插入模式

cunmap: 命令行模式