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使用无名寄存器(默认寄存器),可以通过 " 进入寄存器模式。
  • 使用寄存器 ab 等来存储复制或剪切的文本:
    • ":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提供了一种灵活的方式来管理和使用复制、剪切或保存的文本,这就是所谓的“寄存器”。寄存器类似于临时的存储空间,可以用来保存文本片段以便稍后使用。

寄存器的种类

  • 无名寄存器 ("): 默认使用的寄存器,当没有明确指定寄存器时,使用这个寄存器。
  • 命名寄存器 (ab 等): 用户可以给寄存器命名,方便存储不同的文本片段。
  • 特殊寄存器:
    • *+ 代表系统剪贴板。
    • " 代表无名寄存器。
    • # 代表上次替换命令中被替换掉的文本。
    • % 存储当前文件名。
    • = 用于计算表达式的值。

使用寄存器

  • 复制到寄存器: 例如 ":ayy 复制当前行到寄存器 a
  • 从寄存器粘贴: 例如 ":ap 从寄存器 a 粘贴。
  • 查看寄存器内容: 例如 :reg a 显示寄存器 a 的内容。
  • 清除寄存器: 使用 :let a="" 清除寄存器 a

特殊寄存器的使用

  • 系统剪贴板 ("+"*): 可以将文本复制到系统剪贴板,也可以从系统剪贴板粘贴文本。
  • 当前文件名 ("%): 存储当前文件名,可用于快速粘贴文件名到其他地方。

vim 宏

qa ->  I  -> " --> `<esc> ` --> A --> " --> `<esc>` --> q 
--> vG --> :normal @a

Vim的宏功能是一个非常强大的特性,它允许你记录一系列命令并重复执行这些命令。这对于需要重复执行相同或相似操作的情况特别有用,比如格式化代码、批量替换文本等。下面详细介绍如何在Vim中使用宏。

宏的基本用法

录制宏

  1. 进入正常模式。
  2. 输入 q 后跟一个字母,例如 qa,开始录制宏到寄存器 a
  3. 执行你需要录制的一系列命令。
  4. 当你完成录制时,再次输入 q 结束录制。

播放宏

  1. 进入正常模式。
  2. 输入 @ 后跟宏所在的寄存器名称,例如 @a,来播放宏。
  3. 如果需要重复播放宏多次,可以在前面加上数字,例如 3@a 表示重复播放三次。

示例

假设你需要重复执行以下操作:删除当前行,然后向下移动一行,再复制当前行。

  1. 进入正常模式。
  2. 输入 qa 开始录制宏到寄存器 a
  3. 输入 dd 删除当前行。
  4. 输入 j 向下移动一行。
  5. 输入 yy 复制当前行。
  6. 输入 q 结束录制。
  7. 输入 @a 播放宏。
  8. 输入 3@a 重复播放宏三次。

宏的高级用法

使用宏中的变量

  • 你可以使用寄存器来传递参数给宏。例如,录制宏时,可以使用 "a"b 等寄存器来存储中间结果,然后在宏中使用这些寄存器。

嵌套宏

  • 宏可以调用其他宏,这使得宏的功能更加丰富和强大。例如,你可以录制一个宏 a,然后再录制另一个宏 b,在宏 b 中调用宏 a

控制宏的执行

  • 使用 @: 来播放宏,直到遇到错误为止。
  • 使用 @@ 来重复播放上一个宏。
  • 使用 @:1@:2 等来指定播放宏的次数。

宏的一些注意事项

  • 录制宏时,尽量避免使用光标移动命令,因为它们可能依赖于初始光标位置。
  • 考虑宏的通用性和灵活性,尽量使宏能够适用于多种情况。
  • 宏中可以包含其他命令,比如条件语句和循环,但这需要更复杂的脚本编写技巧。

示例:格式化代码

假设你需要格式化一段代码,具体操作如下:删除多余的空格、将每个单词首字母大写,并且在每个单词之间添加一个空格。

  1. 进入正常模式。
  2. 输入 qb 开始录制宏到寄存器 b
  3. 输入 s/^\s+// 删除行首的空格。
  4. 输入 s/\s+$// 删除行尾的空格。
  5. 输入 g/^\s*\S+/norm! capital 使每行的第一个单词首字母大写。
  6. 输入 g/\s+/norm! s/\s+/ /g 替换多余的空格为单个空格。
  7. 输入 q 结束录制。
  8. 输入 @b 播放宏。

总结

Vim的宏功能可以极大地提高你的工作效率,尤其是在处理重复性任务时。通过合理地设计和使用宏,你可以轻松地处理大量文本编辑工作。希望这些信息能帮助你更好地利用Vim的强大功能!如果有其他问题或需要进一步的帮助,请随时提问。

配色

代码补全

以下是这些快捷键在Vim中的详细解释:

  1. 补全单词

    • ctrl+nctrl+p 用于在单词补全模式下导航候选单词列表。ctrl+n 向下移动一个候选项,而 ctrl+p 向上移动一个候选项。
  2. 补全文件名

    • ctrl+x ctrl+f 用于补全文件名。当你在命令模式下输入文件名时,可以使用这个快捷键来自动补全文件路径。
  3. 补全代码

    • ctrl+x ctrl+o 用于补全代码。这个操作需要开启文件类型检查(filetype detection),并且可能需要安装额外的插件来支持代码补全功能。

补全代码

补全文件名