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),并且可能需要安装额外的插件来支持代码补全功能。
补全代码
补全文件名