四种模式
注意, 插入模式可以使用组合键
ctrl+h 前删一个字符,
ctrl+w 前删一个单词,
ctrl+u 前删到此行首
模式 |
作用 |
插入模式 |
普通模式下键入i I a A o O中的一个后即可进入插入模式, 在这种模式下可以手动输入文本内容, 当需要退出这种模式时按键盘上ecs键即可回到普通模式.
命令 |
作用 |
i |
在当前位置插入 |
I |
在当前行首插入 |
a |
在当前位置后插入 |
A |
在当前行尾插入 |
o |
在下一行插入 |
O |
在上一行插入 |
s |
删除下一个字符再插入 |
S |
删除当前行再插入到当前行首 |
|
可视模式 |
普通模式下键入 v V Ctrl+v 任意一个后可进入可视模式, 这种模式下, 移动光标后的光标和进入可视模式时的光标中间的文本会被选中( 类似于按住鼠标左键划过一段区域,划过的区域会被选中), 对选中的区域可以键入y进行修改操作.
命令 |
作用 |
v |
字符选中模式 |
V |
行选中模式 |
Ctrl+v |
块选中模式 |
|
正常模式 |
一般就是Vim打开文件的默认模式, 就是什么也插入不了, 但是大部分编辑命令都在这个模式下输入, 比如移动光标, 删除文本等
命令 |
作用 |
Esc |
退出 |
Ctrl+[ |
也是退出, 小技巧 |
|
命令模式 |
普通模式下输入 : 会进入命令行模式, 命令执行完毕后会回到普通模式.
|
常用命令记录
1.> 移动
命令 |
作用 |
基本移动 |
|
行内移动 |
命令 |
作用 |
^ |
行首非空白字符 |
g_ |
行尾非空白字符 |
0 |
行首 |
$ |
行尾 |
gg/[[ |
文件首 |
G/]] |
文件尾 |
w |
下一个单词( 以符号为分割 ) |
W |
下一个单词( 以空格为分隔 ) |
b |
上一个单词( 以符号为分隔 ) |
B |
上一个单词( 以空格为分割 ) |
e / E |
此单词尾部 |
F |
在此行中前查一个字符, 光标停留在目标字符 |
f |
在此行中后查一个字符,光标停留在目标字符 |
T |
在此行中前查一个字符, 光标停留在目标字符的 前一个字符 |
t |
在此行中后查一个字符, 光标停留在目标字符的 后一个字符 |
|
行间移动 |
命令 |
作用 |
:数字 |
跳到指定行 |
{ |
上一段 |
} |
下一段 |
H |
光标定位到屏幕最顶行 |
M |
光标定位到屏幕中间行 |
L |
光标定位到屏幕最顶行 |
zt |
光标所在行移动到屏幕顶端 |
zb |
光标所在行移动到屏幕底端 |
|
屏幕移动 |
命令 |
作用 |
ctrl+e |
向下滚动一行 |
ctrl+y |
向上滚动一行 |
ctrl+d |
向下滚动半屏 |
ctrl+u |
向上滚动半屏 |
ctrl+f |
向下滚动一屏 |
ctrl+b |
向上滚动一屏 |
|
2.> 功能
命令 |
作用 |
文件 |
命令 |
作用 |
:q |
退出 |
:q! |
强制退出(不保存) |
:wq |
保存退出 |
:x |
当文件被修改过保存退出, 未修改则直接退出 |
ZZ |
保存退出 |
ZQ |
不保存退出 |
:w |
另存为 |
:n |
新建 |
:e . |
浏览当前文件目录 |
u |
撤销 |
ctrl+r |
恢复 |
gf |
打开光标处的文件名 |
gh |
只有在VSCode的Vim插件中有效, 作用是鼠标聚焦在光标处 |
|
编辑 |
由于在 vim 里, 删除也会被存在寄存器剪切板里, 所以我更倾向于这个删除 就是 剪切
命令 |
作用 |
x |
向后剪切一个字符 |
X |
向前剪切一个字符 |
d加动作命令 |
剪切一个动作范围, 比如 d& 剪切到行尾, dgg 剪切到文本头 |
D |
剪切到行尾 |
c加动作命令 |
改变一个动作范围, 比如 d^ 改变到行首, cc 修改本行 |
C |
修改到行尾 |
y加动作命令 |
复制一个动作范围, 比如 yG 复制到全文尾, yy 复制当前行 |
Y |
复制当前行 |
p |
粘贴到下一行 |
P |
粘贴到上一行 |
|
查找 |
命令 |
作用 |
* |
向后查光标处的单词 |
# |
向前查光标处的单词 |
/ |
向后查找, 找到之后 n 下一个, N 上一个 |
? |
向前查找, 找到之后 n 下一个, N 上一个 |
:noh 或 :nohl 或 nohlsearch |
取消搜索高亮 |
|
替换 |
命令 |
作用 |
r |
覆盖替换一个字符, 不能替换空行( 替换后仍是普通模式 ) |
R |
连续覆盖替换字符, 可以替换空行( 替换后仍是普通模式 ) |
:[range]s/str_old/str_new/[c,e,g,i] |
命令 |
作用 |
range |
范围, 缺省则指的是当前行, .,+2 是指当前行到往后2行, 1,7 是指第一行到地起航, 1,$是指第一行到最后一行( 即整篇文章 ), % 也是是目前编辑的文章, # 是前一次編輯的文章. |
str_old |
原字符串, 若是\<原字符串\>,则指的是以单个单词的形式 |
str_new |
需要替换的字符串 |
c |
confirm,每次替換前会询问 |
e |
不显示 error. |
g |
global, 全局替换, 不提示 |
i |
ignore 不分大小写. |
选择了c参数,每次需要确认, replace with bar (y/n/a/q/l/E/Y)? 按下y表示替换,n表示不替换,a表示替换所有,q表示退出查找模式, l表示替换当前位置并退出。E与Y是光标移动快捷键 |
|
---------------------------------- ^ _ ^ 此处插入寄存器的概念 ^ _ ^ ------------------------------------
寄存器的概念
Vim 中的复制, 删除的内容都会被存放到默认( 未命名 )寄存器中,之后可以通过粘贴操作读取默认寄存器中的内容,
寄存器就是完成这一过程的中转站.
寄存器名称 |
作用 |
0-9 |
表示数字寄存器,是 Vim 用来保存最近复制、删除等操作的内容,其中 0 号寄存器保存的是最近一次的操作内容 |
a-z A-Z |
表示用户寄存器,Vim 不会读写这部分寄存器 |
" |
未命名的寄存器,是 Vim 的默认寄存器, 例如删除, 复制等操作的内容都会被保存到这里 |
+ |
剪切板寄存器, 关联系统剪切板, 保存在这个寄存器中的内容可以被系统其他程序访问, 也可以通过这个寄存器访问其他程序保存到剪切板中的内容 |
|
:reg 寄存器名称 |
比如要粘贴系统剪切板的内容 "+p 即可, 若要禁止寄存器的剪切板, 则 set clipboard+=unnamed |
---------------------------------- ^ _ ^ 此处结束寄存器的概念 ^ _ ^ ------------------------------------
3.> 其他高级命令
分屏
命令 |
作用 |
开启分屏 |
vim -o数字n file1 file2 … filen |
vim -O数字n file1 file2 filen |
小写o是水平分屏,大写O是垂直分屏中括号表示可有可无,n分屏的个数 |
命令 |
作用 |
:sp |
横向分屏 |
:vsp |
竖向分屏 |
:new 文件名 |
新建一个文件并开启水平分屏 |
|
移动光标 |
命令 |
作用 |
ctrl+w h |
光标移到左边屏 |
ctrl+w l |
光标移到右边屏 |
ctrl+w k |
光标移到上边屏 |
ctrl+w j |
光标移到下边屏 |
ctrl+w w |
光标移到下一个屏 |
ctrl+w p |
光标移到上一个屏 |
|
移动分屏 |
</tr
命令 |
作用 |
ctrl+w H |
向左移动 |
ctrl+w L |
向右移动 |
ctrl+w K |
向上移动 |
ctrl+w J |
向下移动 |
ctrl+w r |
向下旋转窗口 |
ctrl+w R |
向上旋转窗口 |
ctrl+w x |
当前窗口与下一个窗口对调 |
|
控制尺寸 |
命令 |
作用 |
ctrl+w - |
在上下分屏中, 减少当前窗口高度 |
ctrl+w + |
在上下分屏中, 增加当前窗口高度 |
ctrl+w > |
在左右分屏中, 增加当前窗口宽度 |
ctrl+w < |
在左右分屏中, 减少当前窗口宽度 |
ctrl+w = |
使所有窗口恢复平均大小 |
|
关闭分屏 |
命令 |
作用 |
:only |
关闭除当前分屏外的其他分屏 |
ctrl+w o |
关闭除当前窗口以外的所有分屏 |
:qa |
关闭所有分屏并退出 |
ctrl+w c |
关闭当前分屏, 最后一个分屏不能关闭 |
ctrl+w q |
关闭当前分屏, 最后一个分屏可以关闭 |
|
重复
命令 |
作用 |
. |
重复上次的命令 |
; |
重复行内搜索命令 f F t T |
& |
重复替换命令( 之后再含有替换文本所在行才有效 ) |
q加一个寄存器名称 |
开始录制宏, 普通模式下按 q 退出录制 |
@加一个寄存器名称 |
使用录制的宏 |
let @s=“宏内容” |
在 _vimrc 中编辑, 有"则"转义一下 |
实例 |
- |
aaaaaaaa 连续输入八个 a |
- 输入 8,表示要重复 8 次
- 输入 i 进入 编辑模式
- 输入 a 也就是重复的文字
- 按下 ESC 返回到 命令模式,返回之后 vi 就会把第 2、3 两步的操作重复 10 次
|
每行首插入#代表python的注释 |
- 移动到要添加注释的 第 1 行代码,按 ^ 来到行首
- 按 V 进入可视行模式
- 使用 j 向下连续选中要添加的代码行
- 输入 I 进入 编辑模式,并在 行首插入,注意:一定要使用 I
- 输入 # 也就是注释符号
- 按下 ESC 返回到 命令模式,返回之后 vi 会在之前选中的每一行代码 前 插入 #
|
向右移动 10 个字符 |
10l |
向左移动 2 个单词 |
2w |
加密
注意加密之后很容易被破坏, 且忘记密码无法找回
命令 |
作用 |
:X |
加密, 输入两次密码. 解密输入两次空密码即可, 或 set key= |
m |
命令 |
作用 |
m加26个大小写字母 |
做标记 |
’ |
移动到标记文本行首 |
`加标记 |
移动标记位置 |
:marks |
显示所有标记 |
:delmarks加标记 |
删除指定标记 |
:delmarks! |
删除所有标记 |
|
杂项
命令 |
作用 |
普通模式下两个 >> |
向右缩进 |
普通模式下两个 << |
向左缩进 |
可视模式下一个 < 或者 > 即可缩进 |
缩进 |
环境变量配置
贴一下实用用漂亮的vim
配置文件放在另一篇文章里, 详情点击
Vim/GVim_Windows下的Vim配置记录