Vim 编辑模式
插入模式 (Insert mode)
Ctrl + H删除上一个字符Ctrl + W删除上一个单词Ctrl + U删除当前行Ctrl + O进入单词命令模式Ctrl + [退出编辑模式,进入正常模式
正常模式 (Normal mode)
i在光标位置进入插入模式I移动到行首并进入插入模式a在当前字符后面进入插入模式A移动到行尾并在行尾添加字符o在当前行下新开一行并进入插入模式O在当前行上新开一行并进入插入模式r替换光标所在字符s删除当前字符并进入插入模式R进入替换模式,连续替换字符S删除当前整行并进入插入模式x删除后面的一个字符dd删除当前行yy复制当前行p粘贴v进入可视模式,选中文本后按y进行复制<ctrl> v进入垂直选择模式V进入行选择模式A移动到行尾并在行尾添加字符cw删除一个单词并进入插入模式dw删除一个单词w移动到下一个单词的开头W移动到下一个大写单词的开头e移动到下一个单词的结尾E移动到下一个大写单词的结尾b回到上一个单词的开头B回到上一个大写单词的开头f{char}移动到字符{char}t{char}移动到字符{char}前一个字符F{char}反向搜索并移动到字符{char}0移动到行首^移动到行首的第一个非空白字符$移动到行尾(移动到句子的开头)移动到句子的结尾{移动到段落的开头}移动到段落的结尾gg移动到文件的开头G移动到文件的结尾H移动到屏幕的顶部M移动到屏幕的中间L移动到屏幕的底部Ctrl + U向上滚动半屏Ctrl + D向下滚动半屏Ctrl + F向下滚动一屏Ctrl + B向上滚动一屏zz将当前行移到屏幕中央
搜索与替换
/开始搜索(正向)?开始搜索(反向)n查找下一个匹配项N查找上一个匹配项:set hls设置高亮搜索:set incsearch设置增量搜索:[range] s/{pattern}/{replacement}/[flags]range表示范围(例如%表示全文){pattern}要替换的模式{replacement}替换后的文本[flags]标志(例如g全局替换,c确认替换)
缓冲区切换
:ls列出所有缓冲区:b n跳转到第n个缓冲区:bpre切换到前一个缓冲区:bnext切换到下一个缓冲区:bfirst切换到第一个缓冲区:blast切换到最后一个缓冲区:b [name]切换到名为[name]的缓冲区
窗口管理
Ctrl + W + s水平分割窗口 (:sp)Ctrl + W + v垂直分割窗口 (:vs)Ctrl + W + w切换到下一个窗口Ctrl + W + H移动到左边的窗口Ctrl + W + J移动到下面的窗口Ctrl + W + K移动到上面的窗口Ctrl + W + L移动到右边的窗口Ctrl + W + q关闭当前窗口
标签页操作
:tabnew新建一个标签页:tabnext切换到下一个标签页:tabprev切换到上一个标签页:tabclose关闭当前标签页:tabmove移动当前标签页的位置
文本对象
i{object}选择内部文本对象a{object}选择整个文本对象{object}包括w单词、W大写单词、(句子、{段落等
复制粘贴与寄存器的使用
复制粘贴
y复制yy复制当前行yw复制当前单词d剪切dd剪切当前行dw剪切当前单词p粘贴
寄存器的使用
- 默认情况下,Vim使用无名寄存器(默认寄存器),可以通过
"进入寄存器模式。 - 使用寄存器
a、b等来存储复制或剪切的文本:":ayy复制当前行到寄存器a":byy复制当前行到寄存器b":a2yy复制当前行及其下一行到寄存器a":ay复制选定的文本到寄存器a":ap从寄存器a粘贴":bp从寄存器b粘贴
- 查看寄存器内容:
:reg显示无名寄存器内容:reg a显示寄存器a内容:reg b显示寄存器b内容
- 特殊寄存器:
"+代表系统剪贴板"*也代表系统剪贴板"%存储当前文件名
- 使用系统剪贴板:
"+yy复制当前行到系统剪贴板"+y复制选定的文本到系统剪贴板"+p从系统剪贴板粘贴
- 使用当前文件名:
"%p粘贴当前文件名
终端下
Ctrl + B前移Ctrl + F后移Ctrl + A快速移动到开头Ctrl + E快速移动到结尾
Vim 寄存器的深入理解
Vim提供了一种灵活的方式来管理和使用复制、剪切或保存的文本,这就是所谓的“寄存器”。寄存器类似于临时的存储空间,可以用来保存文本片段以便稍后使用。
寄存器的种类
- 无名寄存器 (
"): 默认使用的寄存器,当没有明确指定寄存器时,使用这个寄存器。 - 命名寄存器 (
a、b等): 用户可以给寄存器命名,方便存储不同的文本片段。 - 特殊寄存器:
*和+代表系统剪贴板。"代表无名寄存器。#代表上次替换命令中被替换掉的文本。%存储当前文件名。=用于计算表达式的值。
使用寄存器
- 复制到寄存器: 例如
":ayy复制当前行到寄存器a。 - 从寄存器粘贴: 例如
":ap从寄存器a粘贴。 - 查看寄存器内容: 例如
:reg a显示寄存器a的内容。 - 清除寄存器: 使用
:let a=""清除寄存器a。
特殊寄存器的使用
- 系统剪贴板 (
"+或"*): 可以将文本复制到系统剪贴板,也可以从系统剪贴板粘贴文本。 - 当前文件名 (
"%): 存储当前文件名,可用于快速粘贴文件名到其他地方。
vim 宏


qa -> I -> " --> `<esc> ` --> A --> " --> `<esc>` --> q
--> vG --> :normal @a
Vim的宏功能是一个非常强大的特性,它允许你记录一系列命令并重复执行这些命令。这对于需要重复执行相同或相似操作的情况特别有用,比如格式化代码、批量替换文本等。下面详细介绍如何在Vim中使用宏。
宏的基本用法
录制宏
- 进入正常模式。
- 输入
q后跟一个字母,例如qa,开始录制宏到寄存器a。 - 执行你需要录制的一系列命令。
- 当你完成录制时,再次输入
q结束录制。
播放宏
- 进入正常模式。
- 输入
@后跟宏所在的寄存器名称,例如@a,来播放宏。 - 如果需要重复播放宏多次,可以在前面加上数字,例如
3@a表示重复播放三次。
示例
假设你需要重复执行以下操作:删除当前行,然后向下移动一行,再复制当前行。
- 进入正常模式。
- 输入
qa开始录制宏到寄存器a。 - 输入
dd删除当前行。 - 输入
j向下移动一行。 - 输入
yy复制当前行。 - 输入
q结束录制。 - 输入
@a播放宏。 - 输入
3@a重复播放宏三次。
宏的高级用法
使用宏中的变量
- 你可以使用寄存器来传递参数给宏。例如,录制宏时,可以使用
"a或"b等寄存器来存储中间结果,然后在宏中使用这些寄存器。
嵌套宏
- 宏可以调用其他宏,这使得宏的功能更加丰富和强大。例如,你可以录制一个宏
a,然后再录制另一个宏b,在宏b中调用宏a。
控制宏的执行
- 使用
@:来播放宏,直到遇到错误为止。 - 使用
@@来重复播放上一个宏。 - 使用
@:1或@:2等来指定播放宏的次数。
宏的一些注意事项
- 录制宏时,尽量避免使用光标移动命令,因为它们可能依赖于初始光标位置。
- 考虑宏的通用性和灵活性,尽量使宏能够适用于多种情况。
- 宏中可以包含其他命令,比如条件语句和循环,但这需要更复杂的脚本编写技巧。
示例:格式化代码
假设你需要格式化一段代码,具体操作如下:删除多余的空格、将每个单词首字母大写,并且在每个单词之间添加一个空格。
- 进入正常模式。
- 输入
qb开始录制宏到寄存器b。 - 输入
s/^\s+//删除行首的空格。 - 输入
s/\s+$//删除行尾的空格。 - 输入
g/^\s*\S+/norm! capital使每行的第一个单词首字母大写。 - 输入
g/\s+/norm! s/\s+/ /g替换多余的空格为单个空格。 - 输入
q结束录制。 - 输入
@b播放宏。
总结
Vim的宏功能可以极大地提高你的工作效率,尤其是在处理重复性任务时。通过合理地设计和使用宏,你可以轻松地处理大量文本编辑工作。希望这些信息能帮助你更好地利用Vim的强大功能!如果有其他问题或需要进一步的帮助,请随时提问。
配色

代码补全
以下是这些快捷键在Vim中的详细解释:
-
补全单词:
ctrl+n和ctrl+p用于在单词补全模式下导航候选单词列表。ctrl+n向下移动一个候选项,而ctrl+p向上移动一个候选项。
-
补全文件名:
ctrl+x ctrl+f用于补全文件名。当你在命令模式下输入文件名时,可以使用这个快捷键来自动补全文件路径。
-
补全代码:
ctrl+x ctrl+o用于补全代码。这个操作需要开启文件类型检查(filetype detection),并且可能需要安装额外的插件来支持代码补全功能。
补全代码

补全文件名
