Linux中vim常用命令和技巧(超详细保姆级教程)(二)

最近被要求改用vim写代码,感觉自己的一些操作非常笨拙,完全浪费了vim的强大功能,下定决心从头学习vim的各种操作和技巧,顺便把学到的内容整理出来,内容持续更新中,包括各种基础操作和一些提高生产力的小技巧,适合和我一样刚接触vim或者想要系统练习vim操作的友友们,一起成为vim高手!

(一)Vim 的一些简单配置 

(二)Vim 普通模式下的常用操作和技巧:移动,编辑,查找与替换

(三) Vim 可视模式下的常用操作和技巧:选择高亮区,批量快速的操作

(四)Vim命令行模式下的常用操作和技巧:批量进行文本编辑 

(五)Vim插入模式下的快捷操作和多文件的窗口管理 :分割窗口,打开目录

(六)Vim的查找与替换操作和技巧:手动控制每一次替换 

......

更新中

1. Vim的常用模式

普通模式:默认状态,在此模式下,可以实现光标的快速移动和文本的快速编辑

插入模式:进行文本输入,类似普通编辑器

可视模式:对选择的区域高亮,并进行操作

选择模式:类似于文档编辑时的鼠标高亮选择,在选择模式下输入字符会直接代替高亮区域,并进入插入模式

命令行模式:在编辑器底部输入命令并执行

插入-普通模式:可以执行一个普通模式命令后返回插入模式

替换模式:替换光标所在位置的字符

1.1 常用模式之间的转换

Vim的初始状态是普通模式,其他模式下可以通过 Esc Ctrl+[(等同于 Esc)回到普通模式,图中展示了Vim中各模式之间的转换关系,其中普通模式向插入模式和可视模式的转换比较常用,且方法比较多,所以放到后面单独介绍。

1.1.1 普通模式/插入模式 -> 替换模式

替换模式下,输入的字符将直接替换光标下的内容,可以实现字符的快速修改。在普通模式下,命令 R 可以进入替换模式下,在插入模式下也可以使用 Insert键 实现和替换模式下的相互转换。

1.1.2 插入-普通模式

在插入模式下,Ctrl+o 可以进入插入-普通模式,将在执行一个普通模式下的命令后自动回到插入模式。例如,可以使用 Ctrl+o 进入插入-普通模式后,使用命令 zz 重绘屏幕,把当前行显示在中间,然后返回插入模式继续编辑。

2. 普通模式下的操作

vim中的很多快速操作都是在普通模式下实现的,掌握好普通模式下的操作技巧非常重要。

2.1 光标移动

2.1.1 单个字符的移动

模式

按键

功能

普通模式

h

左移

j

下移

k

上移

l

右移

 此外,可以在命令前加上数字,代表重复执行。例如:4h – 向左移动4个字符。

2.1.2 在单行内移动

模式

按键

功能

普通模式

0

移到本行开头

$

移到本行结尾

[num]|

移到本行第[num]列的字符

^

移动到本行第一个非空白字符

这一系列操作是对于实际行来进行的,而由于vim窗口的大小限制,实际的一行可能会被分成几行显示在屏幕上,如果想要针对于屏幕行进行移动,可以在命令前加g命令。

模式

按键

功能

普通模式

g0

移到本行开头

g$

移到本行结尾

g[num]|

移到本行第[num]列的字符

g^

移动到本行第一个非空白字符

这种按屏幕行移动的方法也适用于其他移动方法,比如h, j, k, l操作。

2.1.3 按文字区域移动

模式

按键

功能

普通模式

w

移动到下一单词开头

b

移动到当前单词/上一单词开头

e

移动到下一单词结尾

ge

移动到上一单词结尾

当使用大写字母时,可以基于字符串进行操作:

模式

按键

功能

普通模式

W

移动到下一字符串开头

B

移动到当前字符串/上一字符串开头

E

移动到下一字符串结尾

gE

移动到上一字符串结尾

在按区域移动时,也可以通过数字进行多次移动。例如:2w - 移动到后面第二个单词开头。

使用g可以在行间进行移动:

模式

按键

功能

普通模式

gg

移动到文本开头

G

移动到最后一行

[num]G

移动到第num行

gf

跳转到光标下的文件名

2.1.4 光标快速跳转

模式

按键

功能

普通模式

%

在开闭括号之间跳转

( 或 )

跳转至上一句/下一句开头

{ 或 }

跳转到上一段/下一段开头

[[ 或 ]]

跳转到本节/下一节开头

可以通过 m{char} 命令设定标志点进行跳转,也可以快速跳转至其他关键位置,跳转列表记录了此前的跳转操作:

模式

按键

功能

普通模式

Ctrl+]

跳转到光标下的关键词定义处

‘{char}

跳转到标记处

‘’

跳转回上次跳转之前的位置

‘.

跳转到上次修改的位置

‘^

跳转回上次插入的位置

‘[

上次修改复制的起始位置

‘<

上次高亮选区的起始位置

Ctrl+o和Ctrl+l

向前跳转和向后跳转

:jumps

查看跳转列表

Ctrl+]

跳转到光标下的关键词定义处

‘{char}

跳转到标记处

‘’

跳转回上次跳转之前的位置

‘.

跳转到上次修改的位置

普通模式下可以实现快速翻页:

模式

按键

功能

普通模式

Ctrl+F

向前移动一个屏幕

Ctrl+B

向后移动一个屏幕

Ctrl+D

向前移动半个屏幕

Ctrl+U

向后移动半个屏幕

也可以快速跳转光标到屏幕上的指定位置:

模式

按键

功能

普通模式

zz/z.

移动屏幕使光标处于屏幕中间

z+Enter

移动屏幕使光标处于屏幕上方

z-

移动屏幕使光标处于屏幕底部

H/M/L

跳转到屏幕最上方/中间/最下方

2.2 基本编辑操作

2.2.1 删除操作

删除操作实际上是将内容剪切到无名寄存器,因此在使用时要注意寄存器的覆盖问题,在 命令前 “{register} 可以更改寄存器。普通模式下删除操作主要由 命令完成:

模式

按键

功能

普通模式

dl/x

删除当前光标下的内容

d[num]w

删除当前光标到下个(第num个)单词开头的内容

d[num]b

删除当前光标到上个(第num个)单词开头的内容

d[num]e

删除当前光标到本单词/后一(第num个)单词结尾的内容

d[num]ge

删除当前光标到本单词/前一(第num个)单词结尾的内容

daw

删除光标所在单词

同样的,大写字母命令可以基于字符串进行操作

模式

按键

功能

普通模式

d[num]W

删除当前光标到下个(第num个)字符串开头的内容

d[num]b

删除当前光标到上个(第num个)字符串开头的内容

d[num]E

删除当前光标到本字符串/后一(第num个)字符串结尾的内容

d[num]gE

删除当前光标到本字符串/前一(第num个)字符串结尾的内容

daW

删除光标所在字符串

命令也可以对更大范围操作:

模式

按键

功能

普通模式

[num]dd

删除当前num行

d0

删除当前光标到本行开头

d$/D

删除当前光标到本行结尾

dap

删除当前段

dt[char]

删除到首个[char]前一个字符

d+

删除下一行

d[num]|

删除本行第num列

d{

删除上一段

d/pattern

删除到第一个pattern中间的内容

dG

删除到结尾

d[num]G

删除第num行

2.2.2 修改操作

与删除命令基本一致,且直接进入插入模式进行更改替换。普通模式下用 命令替换 d,可以参考删除操作进行更改操作。其中删除当前光标下内容可用 r 命令代替 cl 删除当前光标下的内容。

2.2.3 粘贴操作

模式

按键

功能

普通模式

p

将缓存中的内容放在光标后

P

将缓存中的内容放在光标前

​​​​​​​2.2.4 复制操作

复制操作和删除粘贴操作一样,可以与游标移动命令相结合,普通模式下用 y 命令替换 d,可以参考删除操作进行复制操作。例外是:并不是复制到行尾而是复制整行。

​​​​​​​2.2.5 其他常用操作

模式

按键

功能

普通模式

i

在游标所在位置插入文字

I

在一行的开头插入文字

a

在游标后加入文字

A

在一行的最后加入文字

o

在游标下一行开启新行

O

在游标上一行开启新行

s

消除当前字元并代换文字

S

消除一行并代换文字

J

合并目前这一行与下一行

~

切换目前字符的大小写

.

重复上一步操作

u

还原上一步动作

U

将一整行还原回原来的状态

​​​​​​​2.3 查找与替换

模式

按键

功能

普通模式

/patten

向后开始寻找符合样式的内容

?patten

向前开始寻找符合样式的内容

n

往同一方向重复搜索

N

反向重复搜索

查找行内的单个字符可以直接用 f/t 命令:

模式

按键

功能

普通模式

f{char}

移动光标到本行下一个{char}

F{char}

移动光标到本行上一个{char}

t{char}

移动光标到本行下一个{char}的前一个字符

T{char}

移动光标到本行上一个{char}的后一个字符

;

重复寻找,方向相同

,

重复寻找,方向相反

在这些命令前加上数字 [num],则会搜寻字符第 [num] 次出现的地方。

总结:普通模式下的操作比较灵活多样,但其实都有规律可循。我的建议是先掌握光标移动的各种技巧,基本编辑操作实际上就是操作关键词 d(删除)、c(修改)、y(复制)和移动操作的灵活结合。多加练习后就可以熟练快速的对文本进行操作啦。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值