导语
VIM 是 Linux 系统上一款文本编辑器,它是操作 Linux 内二进制的一款利器。
当前有很多优秀的 IDE 都支持安装 VIM 插件,原因就是使用它便捷,高效。
以下是学习并记录了 VIM 的一些常用使用技巧,方便随时查阅学习 。
VIM模式
- 正常模式 (Normal-mode)
- 输入模式 (Insert-mode)
- 命令模式 (Command-mode)
- 可视模式 (Visual-mode)
可视模式 (Visual-mode)
在正常模式按下v, V, +v
,可以进入可视模式。可视模式中的操作有点像拿鼠标进行操作,选择文本的时候有一种鼠标选择
的即视感,有时候会很方便。
v
字符可视化,按下键盘的v
之后,就会提示visual
;进入可视化。操作 h,j,k,l就选中文本,继续按 v 退出可视化模式。
V 行可视化,按下键盘上的 V 以后,屏幕底部应该有一个 VISUAL LINE 的提示,操作 j,k 可以向上或者向下以行为单位选中文本,继续按下 V 退出可视化模式。
Ctrl+v 块状可视化,按下键盘上的 Ctrl+v 以后,屏幕底部应该会有一个提示 VISUALBLOCK ,可以通过 h,j,k,l 块状的操作选择区域,这是很多编辑器都不可以做到的,继续按下 Ctrl+v 会退出可视化模式。
可视化操作
可视化选择区域后。
d
# 删除刚刚选择区域
y
# y 会复制选择的区域,按下 p 会黏贴选择的区域。
当操作的文本光标在 “”,‘’ ,(),{} ,[(双引号,单引号,小括号,大括号,中括号)当中的时候,可以通过 va”选中 ”“ 内的所有内容包括双引号
vi” 选中 “” 内的所有内容,不包括 “”
va,vi 会快速选择区域,va 后面会紧跟一个区域结束标志,a 会选中结束符标志,i 就不会。例子如下:
假设当前光标定位在上面的文本 M 处:
va] 操作将会选中以下文本(加粗部分):
“hello world [VIM is so strong],{we all can master vim skill}“
如下图所示:
vi] 操作将会选中如下的区域,没有包含 []:
“hello world [VIM is so strong],{we all can master vim skill}“
如下图所示:
可视化-特殊操作
Ctrl+v
# 选中块区域以后,按下大写的 I
或者 A
可以在区域的前面
或者后面
输入内容, <ESC>
,可以看到选中的区域前面或者后面会有输入的内容。
VIM代码提示
在编辑模式下 ,快捷键 Ctrl+n
或者 Ctrl+p
会有代码提示功能.
VIM配置文件
.vimrc 可以有很多配置,例如显示行号,快捷键配置,插件配置等等。VIM 很多个性化的设置都离不开这个配置文件。
VIM打开文件
1 | vim file1 |
打开多个文件
1 | vim file1 file2 |
1 | 使用以下方式切换至不同文件,这样方便于 |
1 | 显示第二个文件 |
一次显示多个文件
1 | 左右分屏显示(大写字母O) |
1 | 上下分屏显示(小写字母o) |
VIM退出
1 | :w |
1 | :w! |
1 | :w file |
1 | :q! |
1 | :qa! |
1 | :wq |
1 | :x |
1 | :e file |
1 | :e! |
1 | :saveas file |
1 | :bn |
1 | ZZ |
输入模式(Insert-mode)
请记住下面几个常用启动录入文本的键盘字符 i,I,a,A,o,O,s,S
。
i
是在光标所在的字符之前插入需要录入的文本。
I
是在光标所在行的行首插入需要录入的文本。
a
是在光标所在的字符之后插入需要录入的文本。
A
是在光标所在行的行尾插入需要录入的文本。
o
是光标所在行的下一行行首插入需要录入的文本。
O
是光标所在行的上一行行首插入需要录入的文本。
s
删除光标所在处的字符然后插入需要录入的文本。
S
删除光标所在行,在当前行的行首开始插入需要录入的文本。
还有一个可能经常用到的就是 cw
,删除从光标处开始到该单词结束的所有字符,然后插入需要录入的文本(这个命令是两个字符的合体 cw )。
命令模式(Command-mode)
关于命令模式上文有提到过,下面主要来列举几个常用的命令模式操作(命令输入完以后,需要按下 Enter 键去执行命令):
1 | :set nu |
1 | :set nonu |
1 | :n |
VIM关键字查找
1 | /{目标字符串} |
查找文本中匹配的目标字符串,查到以后,输入键盘上的 n
会去寻找下一个匹配,N
会去寻找上一个匹配。
VIM大小写区别
1 | :set ic |
1 | :set noic |
VIM删除多行
1 | :n1,n2d |
VIM文本替换
1 | :{作用范围}s/{待替换值}/{替换成值}/{替换的标志} |
1 | :s/si1ent/handsome/g |
1 | :%s/si1ent/handsome/g |
1 | :n1,n2s/si1ent/handsome/g |
这里的 n1 和 n2 值得是行号
,将会替换掉 n1 到 n2 的所有 si1ent 为 handsome.
选区,在可视模式下选择区域后输入:
,VIM 会自动补全为 :'<,'>
。
1 | :'<,'>s/si1ent/handsome/g |
操作是可视模式 (Visual-mode) 下选区中的替换操作,可视模式下输入:
会自动补全 :'<,'>
这个是可视范围下的操作范围,类似于 %
和 n1,n2
,代表操作的文本范围,上面的例子就是替换掉可视区域的 si1ent 为 handsome。
VIM替换标志
g
#替换标志之一,表示全局global
替换,替换目标的所有出现。
空替换
#只替换从光标位置开始,目标的第一次出现。
1 | :s/si1ent/handsome |
1 | :%s/si1ent/handsome |
i
和I
#大小写敏感与否
1 | :%s/si1ent/handsome/i |
1 | :%s/si1ent/handsome/gi |
c
# 待用户确定后才可进行下一步替换
1 | :%s/si1ent/handsome/gc |
VIM系统命令
1 | :!command |
:
后面紧跟着 !
,!
后面紧跟着系统命令( command 指操作 Linux 系统的一系列命令,如创建文件,新建文件夹,查询文件的属性的等),例子如下:
1 | :!date |
VIM系统命令-输出至光标位置
1 | :r !command |
正常模式(Normal-mode)
VIM 正常模式下,主要进行的操作有光标的移动,复制文本,删除文本,黏贴文本等。
光标移动
快捷键 h,j,k,l
这几个按键主要是用来快速移动光标的,h
是向左移动光标,l
是向右移动光标,j
是向下移动光标,k
是向上移动光标,h , j , k ,l
在主键盘区完全可以取代键盘上的 ↑ ,↓ ,← , →
的功能。
当前行移动
0
# 移动到行头
$
# 移动到行尾
^
# 移动到本行的第一个不是blank字符
g_
# 移动到本行最后一个不是blank字符的位置
w
# 移动到下一个单词的开头
e
# 移动到下一个单词的结尾
fa
# 移动到本行下一个为 a 的字符处
fb
# 移动到下一个为 b 的字符处
nfa
# 移动到本行光标处开始的第 n 个字符为 a 的地方(n 是1,2,3,4…数字)
Fa
# 和fa效果一致,只是方向相反
nFa
# 和nFa效果一样,只方向相反
ta
# 移置 a 字符的前一个字符
nta
# 移置到第二个 a 字符的前一个字符处
Ta
# 和ta 效果一样,只是方向相反
nTa
# 和nta 效果一样,只是方向相反
;、,
# 当使用 f, F, t ,T, 关键字指定字符跳转的时候,使用 ;可以快速跳转到写一个指定的字符,, 是跳到前一个指定的字符。
跨行移动
nG
# 光标定位到第 n 行的行首
H
# 光标定位到屏幕的第一行行首
gg
# 光标定位到第一行的行首
G
# 光标定位到最后一行的行首
M
# 光标移动到当前屏幕的中间
L
# 光标移动到当前屏幕的尾部
zt
# 把当前行移动到当前屏幕的最上方,也就是第一行
zz
# 把当前行移动到当前屏幕的中间
zb
# 把当前行移动到当前屏幕的尾部
%
# 匹配括号移动,包括:( 、 { 、[ 需要把光标移动到括号上
*、#
# 匹配光标当前所在的单词,移动光标到下一个(上一个)匹配的单词(*:下一个,#:上一个)
翻页操作
ctrl+f
# 查看下一页内容
ctrl+b
# 查看上一页内容
VIM复制、粘贴、删除
VIM下使用以下字符进行复制、粘贴、删除操作:y、p、d
复制
y
# 复制的作用,通常搭配一个字符使用(复制范围)实现复制的功能
yw
# 复制一个单词,还有ynw
yfa
# 复制光标到下一个 a 的字符处,还有ynfa
yy
# 复制一行,还有nyy
y$
# 复制光标位置到本行的结尾
yH
# 复制屏幕显示的第一行文本到光标所在行
yG
# 复制光标所在行到文本的结尾
粘贴
p
# 粘贴作用,当执行完复制或者黏贴的命令以后,VIM 会把文本寄存起来。
p
# 小写p,粘贴至光标所在行后
P
# 大写P ,粘贴至光标所在行前
删除
d
# 删除作用,通常搭配一个字符使用(范围),实现删除功能
dw
# 删除一个单词
dnw
# 删除 n 个单词
dfa
# 删除光标处到下一个 a 字符处(fa定位光标至a字符处)
dnfa
# 删除光标处到第n个到a的字符
dd
# 删除一整行
ndd
# 删除光标处到开始的n行,自行确定行号
d$
# 删除光标到本行尾
dH
# 删除屏幕显示的第一行文本到光标所在的行
dG
# 删除光标所在行至文本的结尾
撤销操作
u
# 撤销当前修改操作
ctrl + r
# 恢复撤销操作
删除字符操作&替换
x
# 删除光标当前所在行
r
# 替换掉光标当前所在的字符
R
# 替换掉从光标开始以后的所有字符,除非<ECS>
退出
大小写替换
~
# 将光标下的字母改变大小写
3~
# 将光标位置开始的3个字母改变其大小写
g~~
# 改变当前行字母的大小写
gUU
# 将当前行的字母改成大写
guu
# 将当前行的字母改成小写
3gUU
# 将从光标开始到下面3行字母改成大写
gUw
# 将光标下的字母改成大写
guw
# 将光标下的字母改成小写
VIM重复
.
# 该命令重复上一条命令的操作
n<command>
# 重复某个命令n次
如:10dd # 重复10次删除
Referer
1 | https://zhuanlan.zhihu.com/p/68111471 |
若你觉得我的文章对你有帮助,欢迎点击上方按钮对我打赏
扫描二维码,分享此文章