si1ent

Vim学习记录

2020-11-07

导语

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 退出可视化模式。

image-20201102140436737

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}“

如下图所示:

image-20201102141236650

vi] 操作将会选中如下的区域,没有包含 []:
“hello world [VIM is so strong],{we all can master vim skill}“

如下图所示:

image-20201102141339418

可视化-特殊操作

Ctrl+v # 选中块区域以后,按下大写的 I 或者 A 可以在区域的前面或者后面输入内容, <ESC>,可以看到选中的区域前面或者后面会有输入的内容。

image-20201102141726067

VIM代码提示

在编辑模式下 ,快捷键 Ctrl+n 或者 Ctrl+p 会有代码提示功能.

image-20201102142044085

VIM配置文件

.vimrc 可以有很多配置,例如显示行号,快捷键配置,插件配置等等。VIM 很多个性化的设置都离不开这个配置文件。

image-20201027142331399

VIM打开文件
1
vim file1
打开多个文件
1
vim file1 file2
1
2
# 使用以下方式切换至不同文件,这样方便于
:ls

image-20201027142708822

1
2
# 显示第二个文件
:b2

image-20201027142731298

一次显示多个文件
1
2
# 左右分屏显示(大写字母O)
vim -On file1 file2 ... filen
1
2
# 上下分屏显示(小写字母o)
vim -on file1 file2 ... filen
VIM退出
1
2
:w
# 保存当前对文件的修改,但是不退出文件。
1
2
:w!
# 强制保存但是不退出文件。
1
2
:w file
# 保存当前的文件修改到 file 文件当中。
1
2
:q!
# 退出文件,对文件的修改不做保存。
1
2
:qa!
# 退出所有的文件,对所有的文件修改都不做保存。
1
2
:wq
# 退出文件并保存对文件的修改。
1
2
:x
# 退出文件并保存对文件的修改。
1
2
:e file
# 打开另一个文件。
1
2
:e!
# 放弃对文件的所有修改,恢复文件到上次保存的位置。
1
2
:saveas file
# 另存为 file。
1
2
3
:bn
:bp
# 当打开多个文件的时候可以输入 `:bn` 和 `:bp` 进行上一个文件或者下一个文件的切换。
1
2
ZZ
# 直接保存退出,大写Z直接键入两个字母
输入模式(Insert-mode)

请记住下面几个常用启动录入文本的键盘字符 i,I,a,A,o,O,s,S

i是在光标所在的字符之前插入需要录入的文本。

I 是在光标所在行的行首插入需要录入的文本。

a 是在光标所在的字符之后插入需要录入的文本。

A 是在光标所在行的行尾插入需要录入的文本。

o 是光标所在行的下一行行首插入需要录入的文本。

O 是光标所在行的上一行行首插入需要录入的文本。

s 删除光标所在处的字符然后插入需要录入的文本。

S 删除光标所在行,在当前行的行首开始插入需要录入的文本。

还有一个可能经常用到的就是 cw ,删除从光标处开始到该单词结束的所有字符,然后插入需要录入的文本(这个命令是两个字符的合体 cw )。

命令模式(Command-mode)

关于命令模式上文有提到过,下面主要来列举几个常用的命令模式操作(命令输入完以后,需要按下 Enter 键去执行命令):

1
2
:set nu
# 该命令会显示行号。
1
2
:set nonu
# 该命令会取消行号。
1
2
:n
# 定位到 n 行的首个字符。
VIM关键字查找
1
2
/{目标字符串}
# 文件内检索

查找文本中匹配的目标字符串,查到以后,输入键盘上的 n 会去寻找下一个匹配,N 会去寻找上一个匹配。

VIM大小写区别
1
2
:set ic
# 编辑器将不会区分大小写,如果你进行该设置之后,只要是字符相同不会区分大小写都会进行匹配。
1
2
:set noic
# 区分大小写的查询。
VIM删除多行
1
2
:n1,n2d
# n1 和 n2 指的是起始行号和结束行号,d 是删除关键字
VIM文本替换
1
2
:{作用范围}s/{待替换值}/{替换成值}/{替换的标志}
# 作用范围分为当前行、全文、选区等等。
1
2
:s/si1ent/handsome/g
# 将会把当前光标所在行的 si1ent 替换成 handsome
1
2
:%s/si1ent/handsome/g
# 将会把全文中的 si1ent 替换成 handsome
1
2
: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
2
:s/si1ent/handsome
# 作用于当前行,从光标处开始查找替换,仅仅替换第一次匹配 si1ent 的地方为handsome。
1
2
:%s/si1ent/handsome
# 替换掉文件中所有行第一次出现 si1ent 的地方为 handsome。

iI #大小写敏感与否

1
2
:%s/si1ent/handsome/i
# i 表示大小写不敏感查找,I表示大小写敏感查找:
1
2
:%s/si1ent/handsome/gi
# 替换掉所有行第一个出现 si1ent (不区分大小写) 为 handsome。

c # 待用户确定后才可进行下一步替换

1
2
:%s/si1ent/handsome/gc
# 表示需要确认,例如全局查找"si1ent"替换为"handsome"并须用户确认
VIM系统命令
1
:!command

: 后面紧跟着 !! 后面紧跟着系统命令( command 指操作 Linux 系统的一系列命令,如创建文件,新建文件夹,查询文件的属性的等),例子如下:

1
2
:!date
# 显示的系统当前时间

image-20201102100334418

image-20201102100344317

VIM系统命令-输出至光标位置
1
2
:r !command
# 执行 date 命令显示时间,并且添加命令结果到文本中

image-20201102101819227

image-20201102101839413

正常模式(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
使用支付宝打赏
使用微信打赏

若你觉得我的文章对你有帮助,欢迎点击上方按钮对我打赏

扫描二维码,分享此文章