【Linux】vim的使用

进入vim

vim是一款编辑器。自带,使用成本较高。

touch code.c我们创建一个普通文件,然后vim code.c,进入vim。

想要退出vim,怎么做?

(因为当前我们不知道在什么模式下),我们先按下键盘最左上角的Esc,然后再按冒号,最后再打出一个q,然后回车。

还有另一种方式也可以退出vim:

把键盘切成大写,然后快速按两下Z。

多模式编辑器

vim是一款多模式编辑器,将行为分类。最常见的为3种模式。

命令模式、底行模式、插入模式。

首次打开,处在命令模式。它是默认的模式。

命令模式怎么切换插入模式?

输入一下i。出现INSERT,就代表进入了插入模式,我们就可以正常去写代码了。

怎么再由插入模式回到命令模式呢?

按左上角的Esc。

这样就进入命令模式了。

怎么由命令模式进入底行模式呢?

shift+;(也就是:)

在底行模式里,w是保存(写入),q是退出;wq是保存并退出。

在底行模式里,我们输入set nu,就可以在现在这样还没有配置的情况下,显示行号:

然后我们就有行号了:

怎么再由底行模式回到命令模式呢?

Esc

当我们不知道在什么模式,就Esc回到命令模式。

不同模式

命令模式

方便我们去快速编辑。

上下移动(不同行间移动)

gg:快速让光标回归到最开始。

shift+g(即G):快速将光标定位到结尾。

n+shift+g:将光标定位到我们要的那一行。

左右移动(当前行)

shift+4,即$:定位到当前行结尾。

shift+6,即^:定位到当前行开头。

上下左右移动

上下左右键现在也可以使用了,但是兼容性最好的是hjkl这四个键(在命令模式中)。

h是向左,l是向右,j是向上,k是向下。

这是因为以前的老键盘里,是没有上下左右键的,而vim是在那个时代产生的,所以就是hjkl能作为方向键。

7h是向左移动7个,8j是向下移动8个,以此类推。

w可以以单词为单位,向右移动;b可以以单词 为单位,向左移动。w和b前面也可以带数字。

指令级别的复制、黏贴、删除

(在命令模式下)

yy是复制当前行,p是光标所在位置粘贴,dd是删除当前行。

也可以一次复制并粘贴多行:3 yy p,或者一次删除多行。

u是撤销刚才动作。

我们知道有重做,也就是撤销刚才的撤销:ctrl+r。

这二者可以互相撤销彼此。

但是一旦退出vim后,重新进来code.c,就无法再撤销以前的操作了;如果只是保存,没有退出,还可以撤销。

n+yy+n+p,我们可以一次性复制多行,并粘贴多次,比如我们可以将3行的内容,粘贴1000次。

dd+p,我们可以将某一行的内容删除然后粘贴到某一行,也就是剪切。我们也可以n+dd,删除n行,然后n+p,重复粘贴上n次。

命令模式下的删除

x,可以不断删除光标所在位置的字符(相当于右侧不断前移被删除)。

3x,可以一次删3个字符。

shift+x,即X,是光标右侧不动,左侧删除(相当于与x相反)。

n+shift+x,和上面一样,也可以一次性删除多个左侧字符。

可以更形象地理解,x就是右边的字符不断过来被"吃"掉,而shift+x是不断往左走去"吃"左侧的字符。

而x和shift+x,++也都是可以p进行粘贴的。++

字符替换

(命令模式下)输入r,然后再输入我们要替换的字符,就能进行光标处的替换。

同样,这个也可以一次性操作多个字符,n+r+我们要替换的字符。

替换模式

shift+r,即R,我们就可以进入replace模式。

r是替换单个字符,所以R就是批量化替换。

其实就是覆盖式地去写。

怎么回去呢?无脑Esc。

大小写切换

shift+~

并不常用的翻页指令

ctrl+b 屏幕往上翻动一页

ctrl+f 屏幕往下翻动一页

ctrl+u 屏幕往上翻动半页

ctrl+d 屏幕往下翻动半页

批量化注释(视图模式)

ctrl+v,进入视图模式。

进入这个模式后,我们可以使用hjkl进行区域化的选择:

我们先用j往下选中我们要的行:

然后我们按shift+i,也就是I,这时我们从视图模式直接进入了插入模式,这时我们在我们选中区域第一行的位置输入//:

然后,我们此时按Esc,我们从视图模式退到命令模式,并且我们可以看到我们刚才选中的区域前面都有注释了:

也就是说,我们可以从命令模式按ctrl+v进入视图模式,选完我们要的区域后按shift+i进入插入模式,然后插入我们要给选中区域带的注释,然后按Esc退回到命令模式的同时完成批量化注释。

在上面的视图模式选择区域那一步,我们可以按++shift+g++,来选中以下的全部代码,后续进行注释。

也可以按gg,反向选择以上的全部代码。

我们也可以在刚才选择区域的那一步里,在按j向下选中区域的时候,前面直接带数字,也就是我们要选择的行数。

也可以n+shift+g,这是选中当前行到第n行。

怎么批量删除注释

切到视图模式,输入8+shift+g,直接选中我们要删的区域,然后按一次l,将右半部分的注释也选上,然后再按一次d,我们就成功删除了注释。

类似的逻辑,我们可以通过shift+g,将全部的内容选中进行注释或去注释。

当然,它的作用不只是注释。

对某个单词进行查找

shift+3也就是#,我们可以选中某个单词,然后按n,就可以对这个单词出现过的位置,进行逆向查找。

不同的进入插入模式的方法

输入a,也可以进入插入模式,但是光标会往后走一格。

输入o,也可以进入插入模式,光标会向下新起一行。

aio就是三种比较常用的进入插入模式的方式。

底行模式指令

加个!代表强制,w!是强制保存,q!是强制退出;wq!就是强制保存并退出。

保存并退出除了切成大写后快速按两下ZZ,还能++按住shift的时候按两下zz++,都是两个大写Z。

但是快捷方式不如命令可靠。所以最好还是使用前者进行退出,而非ZZ。

set nonu是取消行号。

!ls -l,这样会得到:

还可以!gcc code.c,编译。

然后!ls -al

可以看到多出了a.out。

然后!./a.out我们就可以执行编译好的这段代码:

也就是说,在底行中,输入感叹号后我们就可以直接输入命令。可以在不退出vim的情况下就执行命令。

批量化替换

这是一个很实用的方式。

%s/src/dst/,src是我们要替换的原本内容,dst是我们要替换的新内容。

比如:

然后按下后变成:

可以看到,就替换成功了。

vim一个原本不存在的文件

vim 文件名

然后通过wq退出,就会自动生成这个文件。

分屏操作

我们可以先打开code.c的情况下, 进入底行模式,然后输入vs test.c:

可以看到,code.c就到右边的分屏去了,左边是test.c。

如果此时再进入底行做同样的操作,还可以分三个屏......

此时我们wq,退出的是test.c,也就是回到code.c里了,再wq,就从code.c退出了也就是退出vim了。

所以我们可以看出,分屏时的底行,是左侧文件的底行。光标在哪个窗口下,就是在操作哪个窗口。

光标切换窗口

按住ctrl不动,然后按两下w,就切换到另一个终端窗口了。

底行搜索

底行也可以进行搜索(类似shift+3,也就是#)

:/printf,这样就是搜索printf,会将其高亮。然后按n,就会匹配下一个。

打开直接到报错行

比如我们现在第13行,少了个分号,所以在编译时会报错:

打开vim默认光标是在我们上一次退出时的位置,但是我们也可以在打开vim时直接来到我们想要的报错的那一行。

在error前面我们看到是在14行的printf处报错,所以我们可以

vim code.c+14

这样打开时,光标默认就在第14行。

历史命令
查找历史命令

先输入ctrl+r,再输入vim:

执行最近命令

!v,这会让我们直接执行最近使用的v开头的命令比如vim code.c


那么,本文到此结束。

相关推荐
Mephisto.java5 分钟前
【大数据学习 | Spark-Core】RDD的五大特性(包含宽窄依赖)
大数据·学习·spark
weixin_4462608537 分钟前
AI大模型学习
人工智能·学习
行然梦实43 分钟前
学习日记_20241126_聚类方法(Affinity Propagation)
学习·聚类
GivemeAK44 分钟前
[Foc学习记录00]导览
学习
zmd-zk2 小时前
kafka命令的使用——主题命令(topic)
大数据·分布式·学习·kafka
一个假的前端男2 小时前
VMware安装CentOS 9 及mysql的安装
linux·运维·centos
red_redemption2 小时前
自由学习记录(25)
学习·lua
北京迅为2 小时前
【北京迅为】iTOP-4412全能版使用手册-第七章 Android 4.4系统编译
linux·嵌入式硬件·4412开发板
大风吹PP凉3 小时前
47小型项目的规划与实施
linux·运维·服务器