vim
vim
Vim 是一个 多模态 编辑 器:它对于插入文字和操纵文字有不同的模式。Vim 是可编程的(可以使用 Vimscript 或者像 Python 一样的其他程序语言),Vim 的接口本身也是一个程序语言:键入操作(以及其助记名) 是命令,这些命令也是可组合的。
normal模式下按i进入insert模式;按r进入replace模式;按v进入visual模式;按<S-V>ji进入visual-line模式;按^V进入visual-block模式,,再按esc返回normal。
按:进入command-line模式,输入q<enter>退出当前选项卡,qa<enter>退出所有。
命令行模式
control+v的三种表示方法:^V Ctrl-V <C-V>
保存
命令行模式下,:help 后输入想查询的内容可看到功能,注意要问带冒号的命令则也要带冒号,例如:help :w。:w
表示保存更改。
打开文件和缓存
:e {文件名}
打开要编辑的文件:ls
显示打开的缓存
窗口管理
- 分割窗口:
:split
或Ctrl-w s
: 水平分割窗口:vsplit
或Ctrl-w v
: 垂直分割窗口
- 关闭窗口:
:q
或:close
: 关闭当前窗口:qa
或:qall
: 关闭所有窗口
- 移动光标到其他窗口:
Ctrl-w w
: 在窗口之间循环切换Ctrl-w h/j/k/l
: 移动光标到左/下/上/右的窗口
缓冲区管理
- 查看缓冲区列表:
:buffers
或:ls
- 切换缓冲区:
:bn
或:bp
: 切换到下一个/上一个缓冲区:b {number}
: 切换到指定编号的缓冲区
- 删除缓冲区:
:bd {number}
: 删除指定编号的缓冲区
选项卡管理
- 创建新选项卡:
:tabnew
或gt
- 关闭选项卡:
:tabclose
或:tabc
- 切换选项卡:
gt
: 切换到下一个选项卡gT
: 切换到上一个选项卡:tabn {number}
: 切换到指定编号的选项卡
normal模式下的移动
- h: 向左移动一个字符
- j: 向下移动一行。在命令前加上数字,表示重复执行该命令的次数。例如,
5j
表示向下移动5行。 - k: 向上移动一行
- l: 向右移动一个字符
- w: 移动到下一个单词的开头
- b: 移动到上一个单词的开头
- e: 移动到下一个单词的末尾
- ^: 移动到行首
- $: 移动到行尾
- gg: 移动到文件开头
- G: 移动到文件末尾
- Ctrl+u: 向上滚动半屏
- Ctrl+d: 向下滚动半屏
- Ctrl+f: 向下滚动一屏
- Ctrl+b: 向上滚动一屏
- 跳转: 使用
f
或t
可以跳转到当前行中下一个或上一个出现的指定字符。例如,fx
表示跳转到下一个出现的字母x。 - 行数:
:{行数}\<CR>
或者{行数}G
({行数}为行数) - 杂项:
%
(找到配对,比如括号或者 /* */ 之类的注释对)
f命令
- 功能: 将光标移动到当前行中下一个出现的指定字符处。
- 用法:
fx
,其中x表示你要跳转到的字符。例如,fw
表示跳转到下一个单词的开头。
t命令
- 功能: 将光标移动到当前行中下一个出现的指定字符之前。
- 用法:
tx
,其中x表示你要跳转到的字符。例如,tw
表示跳转到下一个单词的开头之前。
扩展用法
- 重复跳转: 使用分号
;
可以重复上一次的f或t命令。例如,如果你输入fa
,然后输入;
,光标会继续跳转到下一个出现的”a”。 - 反向跳转: 使用逗号
,
可以反向重复上一次的f或t命令。例如,如果你输入fa
,然后输入,
,光标会跳转到上一个出现的”a”。 - 结合数字: 在f或t命令前加上数字,可以指定跳转的次数。例如,
2fw
表示跳转到下一个单词的开头,然后再跳转到下一个单词的开头。 - 大写F和T: F和T命令与f和t类似,但它们是向左搜索。例如,
Fx
会向左搜索第一个出现的x。 - 屏幕:
H
(屏幕首行),M
(屏幕中间),L
(屏幕底部)
insert模式
Vim 的编辑命令也被称为 “动词”, 因为动词可以施动于名词。
o命令
- 功能: 在当前行的下方插入一个新行,并进入插入模式。
- 用法: 在正常模式下,将光标移动到想要插入新行的位置,然后输入
o
。
O命令
- 功能: 在当前行的上方插入一个新行,并进入插入模式。
- 用法: 在正常模式下,将光标移动到想要插入新行的位置,然后输入
O
。
基本用法
- 删除字符:
x
:删除光标下的字符X
:删除光标前的字符
- 删除整行:
dd
:删除当前行
- 删除到行尾:
d$
:删除从光标处到行尾的所有字符
- 删除到行首:
d0
:删除从光标处到行首的所有字符
s
替换字符(等同于xi
)
与移动命令结合
dw
:删除到下一个单词的开头de
:删除到下一个单词的结尾db
:删除到上一个单词的开头dd
:删除当前行2dd
:删除当前行和下一行daw
:删除光标所在单词
撤销操作:
- u: 撤销上一步操作。连续按多次u可以撤销多个步骤。并且如果从insert模式返回到normal模式以后按u,会撤销在insert模式的所有操作。
重做操作:
- Ctrl+r: 重做上一步撤销的操作。
其他撤销相关命令:
- U: 撤销对当前行的所有修改。
- :undo:显示撤销列表,并允许你选择要撤销到哪个状态。
c命令:修改文本
- cw: 修改光标后的一个单词
- ce: 修改光标后的一个单词,直到单词末尾
- cb: 修改光标前的一个单词
- cc: 修改整行
- c$: 修改从光标到行尾的所有字符
- c0: 修改从光标到行首的所有字符
c和d唯一的区别就是在删除内容以后将你设置为insert状态
结合数字
- c2w: 修改接下来的两个单词
- c3l: 修改接下来的三个字符
- c.$: 修改到句号。
- c): 修改到下一个”)”。
- c{: 修改到下一个”{“。
r命令
rx: 将光标下的字符替换为x。例如,ra
将把光标下的字符替换为”a”。
- 字符选取:
v
:进入可视模式,然后使用光标键选择字符。
- 单词选取:
vw
:选中光标所在单词。ve
:选中光标所在单词到单词末尾。vb
:选中光标所在单词到单词开始。
- 行选取:
V
:进入行可视模式,选中整行。甚至可以按方块形状进行选择。ggVG
:选中整个文件。
复制
选中文本后,使用y
命令进行复制。例如:
vwyy
:选中当前单词并复制。Vyy
:选中当前行并复制。
粘贴
复制后的文本可以使用p
命令进行粘贴。
p
:在光标下方粘贴。P
:在光标上方粘贴。
大小写命令
#单个字符
~
命令: 将光标下的字符大小写反转。
单词
g~iw
: 将光标下的单词大小写反转。- 例子:将单词”hello”转换为”HELLO”。
行
guu
: 将当前行所有字母转换为小写。gUU
: 将当前行所有字母转换为大写。gu0
: 将光标所在位置到行首的字母转换为小写。gU0
: 将光标所在位置到行首的字母转换为大写。gu$
: 将光标所在位置到行尾的字母转换为小写。gU$
: 将光标所在位置到行尾的字母转换为大写。
可视模式
gu
或gU
: 在可视模式下,选中部分文本后,使用gu
将其转换为小写,使用gU
将其转换为大写。
修饰语
修饰语有 i
,表示“内部”或者“在内”,和 a
, 表示“周围”。
ci(
改变当前括号内的内容ci[
改变当前方括号内的内容da'
删除一个单引号字符串, 包括周围的单引号
vim
https://blakehansen130.github.io/2024/10/20/vim/