Vim 的键描述体例
<Esc>
表示 Esc 键;显示为“⎋”<CR
表示回车键;显示为“↩”<Space>
表示空格键;显示为“␣”<Tab>
表示 Tab 键;显示为“⇥”<BS
表示退格键;显示为“⌫”<Del>
表示删除键;显示为“⌦”<lt>
表示 < 键;显示为“<”<Up>
表示光标上移键;显示为“⇡”<Down>
表示光标下移键;显示为“⇣”<Left>
表示光标左移键;显示为“⇠”<Right>
表示光标右移键;显示为“⇢”<PageUp>
表示 Page Up 键;显示为“⇞”<PageDown>
表示 Page Down 键;显示为“⇟”<Home>
表示 Home 键;显示为“↖”<End>
表示 End 键;显示为“↘”<F1> - <F12>
表示功能键 1 到 12;显示为“F1”到“F12”<S-…>
Shift 组合键;显示为“⇧” (较少使用,因为我们需要写 ! 而不是;和特殊键组合时仍然有用) <C-…>
Control 组合键;显示为“⌃”<M-…>
Alt 组合键;显示为“⌥” 对于大部分用户,它的原始键名 Meta 应该只具有历史意义)-
<D-…>
Command 组合键;显示为“⌘”(Mac 键盘) - 显示当前编辑文件的文件类型
:set ft?
文本修改 *
- 可以认为
c
(修改)的功能就是执行d
(删除)然后i
(插入) d
加动作来进行删除(dd
删除整行);D
则相当于d$
,删除到行尾。c
加动作来进行修改(cc
修改整行);C
则相当于c$
,删除到行尾然后进入插入模式。s
相当于cl
,删除一个字符然后进入插入模式;S
相当于cc
,替换整行的内容。i
在当前字符前面进入插入模式;I
则相当于^i
,把光标移到行首非空白字符上然后进入插入模式。 -a
在当前字符后面进入插入模式;A
相当于$a
,把光标移到行尾然后进入插入模式。o
在当前行下方插入一个新行,然后在这行进入插入模式;O
在当前行上方插入一个新行,然后在这行进入插入模式。r
替换光标下的字符;R
则进入替换模式,每次按键(直到 )替换一个字符。u
撤销最近的一个修改动作;U
撤销当前行上的所有修改。
文本对象选择 *
还有几个动作只能在 c、d、v、y 这样命令之后用
dw
- delete worddiw
- delete inside worddaw
- delete a worddiW
daW
di"
di(
或di)
da(
或da)
上面演示了 a、i 和 w、双引号、圆括号搭配使用,这些对于任何语言的代码编辑都是非常有用的
- 搭配
s
(sentence)对句子进行操作——适合西文文本编辑 - 搭配
p
(paragraph) 对段落进行操作——适合西文文本编辑,及带空行的代码编辑 - 搭配
t
(tag)对 HTML/XML 标签进行操作——适合 HTML、XML 等语言的代码编辑 - 搭配 `` 和
'
对这两种引号里的内容进行操作——适合使用这些引号的代码,如 shell 和 Python - 搭配方括号(“[”和“]”)对方括号里的内容进行操作——适合各种语言(大部分都会用到方括号吧)
- 搭配花括号(“{”和“}”)对花括号里的内容进行操作——适合类 C 的语言
- 搭配角括号(“<”和“>”)对角括号里的内容进行操作——适合 C++ 的模板代码
再进一步,在 a 和 i 前可以加上数字,对多个(层)文本对象进行操作
c2i{
重复功能 *
;
重复最近的字符查找(f、t 等)操作,
重复最近的字符查找操作,反方向n
重复最近的字符串查找操作(/ 和 ?)N
重复最近的字符串查找操作(/ 和 ?),
反方向. 重复执行最近的修改操作.
重复执行最近的修改操作
光标移动
w
- 跳到下一个词的开始e
- 跳到词的结尾f
- findt
- tail(
和)
移到上一句和下一句{
和}
移到上一段和下一段gg
文件开头G
文件结尾zz
将光标所在的行居中
更快地移动
- 可以使用
<PageUp>
和<PageDown>
来翻页,但 Vim 更传统的用法是<C-B>
和<C-F>
,分别代表 Backward 和 Forward。
control + b 后退一页
control + f 前进一页
-
除了翻页,Vim 里还能翻半页,有时也许这种方式更方便,需要的键是
<C-U>
和<C-D>
,Up 和 Down。 - 数字 +
G
跳转到指定行 - 数字 +
|
跳转到指定列
用 vim -c ‘normal 5G36 ’ 来执行跳转到出错位置第 5 行第 36 列
- 快速移动光标到屏幕的顶部、中间和底部:用
H
(High)、M
(Middle)和L
(Low)就可以做到
6H 将光标移动到屏幕顶部第6行 和 6L将光标移动到屏幕底部第6行
- 把当前行“滚动”到屏幕的顶部、中部或底部。Vim 里的对应按键是
zt
、zz
和zb
Vim 的选项和配置
cat ~/.vimrc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 设置编辑文件的内码是 UTF-8(非所有平台缺省,但为编辑多语言文件所必需)
set enc=utf-8
# 设置 Vim 不需要和 vi 兼容(仅为万一起见,目前大部分情况下这是缺省情况)
set nocompatible
# 导入 Vim 的示例配置(这会打开一些有用的选项,如语法加亮、搜索加亮、命令历史、记住上次的文件位置,等等)
source $VIMRUNTIME/vimrc_example.vim
# 备份和撤销文件
set backup # 每次编辑会保留上一次的备份文件
set undofile # 使得 Vim 在重新打开一个文件时,仍然能够撤销之前的编辑(undo),这就会产生一个保留编辑历史的“撤销文件”(undofile)了
-
zz
在 vim 中,输入 zz 可以将当前行滚动到屏幕中央 :set undodir?
查看把撤销文件放在用户个人的哪个特定目录下。既保证了安全,又免去了其他目录下出现不必要文件的麻烦:set nobackup?
查看是否设置了不备份
undodir=~/.vim_runtime/temp_dirs/undodir
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# 这段代码是 Vim 或 Neovim 配置脚本中的一部分,用于自动创建撤销文件(undo file)的存储目录。它的作用是确保撤销历史能够持久化保存,即使关闭 Vim 后重新打开文件,仍然可以撤销之前的操作。
# 1. if !isdirectory(&undodir)
# &undodir
# 这是 Vim 的一个选项(option),表示撤销文件的存储目录(通常通过 set undodir=... 设置)。
# isdirectory()
# Vim 内置函数,检查给定的路径是否存在且是一个目录。
# !
# 逻辑非运算符,表示“如果目录不存在”。
# 作用:
# 检查 undodir 设置的目录是否存在。如果不存在,则执行 mkdir 创建它。
# 2. call mkdir(&undodir, 'p', 0700)
# mkdir()
# Vim 内置函数,用于创建目录。
# 参数说明:
# &undodir:要创建的目录路径。
# 'p':
# 表示递归创建父目录(类似 mkdir -p 命令),如果路径中的上级目录不存在,会自动创建。
# 0700:
# 设置目录权限(八进制格式):
# 7 = 用户可读、可写、可执行(rwx)。
# 0 = 组和其他用户无权限。
# 作用:
# 以安全的方式创建 undodir 目录,并确保只有当前用户有权限访问。
if !isdirectory(&undodir)
call mkdir(&undodir, 'p', 0700)
endif
:help isdirectory()
:help mkdir()
:help call
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# 这段代码是 Vim/Neovim 的鼠标支持配置,它会根据不同的运行环境(终端或 GUI)智能启用鼠标功能。下面是对代码的详细解析:
# 代码功能
# 检测系统是否支持鼠标 (has('mouse'))
# 如果支持,则继续判断运行环境。
# 根据环境设置鼠标模式:
# GUI 或 xterm 终端:启用全功能鼠标 (mouse=a)
# 其他终端(如 macOS 终端):启用有限鼠标支持 (mouse=nvi)
# 逐行解析
# 1. if has('mouse')
# 作用:检查当前 Vim 是否编译了鼠标支持。
# 说明:
# 如果 Vim 是在没有鼠标支持的情况下编译的(比如某些精简版),则跳过整个配置。
# 2. if has('gui_running') || (&term =~ 'xterm' && !has('mac'))
# 条件 1: has('gui_running')
# 判断是否在 GUI 版本的 Vim(如 gvim、MacVim)中运行。
# 条件 2: &term =~ 'xterm' && !has('mac')
# &term =~ 'xterm':检查当前终端类型是否是 xterm 或兼容终端(如 Linux 下的 GNOME Terminal)。
# !has('mac'):排除 macOS 原生终端(通常对鼠标支持较差)。
# 效果:在 Linux/Unix 的 xterm 终端中启用鼠标,但跳过 macOS 终端。
# 3. set mouse=a
# 作用:
# 在 GUI 或 xterm 终端 中启用全功能鼠标支持:
# 点击移动光标
# 滚轮滚动
# 拖拽选择文本
# 调整窗口大小
# 4. else
# 作用:
# 如果不在 GUI 或 xterm 中(比如 macOS 原生终端、SSH 连接等),则进入保守模式。
# 5. set mouse=nvi
# 作用:
# 启用有限鼠标支持,仅允许:
# Normal 模式 (n):用鼠标移动光标
# Visual 模式 (v):用鼠标选择文本
# Insert 模式 (i):点击移动光标
# 6. endif
# 结束条件判断块。
if has('mouse')
if has('gui_running') || (&term =~ 'xterm' && !has('mac'))
set mouse=a
else
set mouse=nvi
endif
endif
set guifont?
guifont=Hack_Nerd_Font_Mono:h16
links
- https://iterm2.com/documentation-captured-output.html iterm2 捕获输出
- https://brew.sh/ mac 包管理器
- https://yianwillis.github.io/vimcdoc/doc/help.html vim中文在线帮助文档