进入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
那么,本文到此结束。