Vim 入门教程

Vim

本教程是基于ACWing的《Linux基础课》所做,希望大家支持ACWing

Vim是终端里的编辑器,可根据文件扩展名,自动判断编程语言

功能

  • 命令行模式下的文本编辑器。

  • 根据文件扩展名自动判别编程语言,支持代码缩进、代码高亮等功能。

  • 使用方式:vim filename

    如果已有该文件,则打开它。

    如果没有该文件,则打开个一个新的文件,并命名为filename。

模式

共三种模式

  • 一般命令模式

    Vim的默认模式,刚进去就是这个模式,但不允许编辑。

    命令输入方式:按不同字符,即可进行不同操作,可以复制粘贴、删除文本等。

  • 编辑模式

    在一般命令模式里按下i,会进入编辑模式。

    按下Esc会退出编辑模式,返回到一般命令模式。

  • 命令行模式

    在一般命令模式里按下 : / ? 三个字母中的任意一个,会进入命令行模式。命令行在最下面。

    可以查找、替换、保存、退出、配置编辑器等。

设置行号

在复制代码时,有时候若有行号,复制时会连带行号一起复制了,所以需要取消行号之后再复制代码

设置行号

:set nu

取消行号:

:set nonu

此处的nu代表number的意思

进入编辑模式

输入 i

进入一般命令模式

输入Esc

移动光标

:光标向左移动一个字符

:光标向下移动一个字符

:光标向上移动一个字符

:光标向左移动一个字符

若没有小键盘,vim提供了 h j k l

hjkl

注意,在vim中,光标移到最边上时,不会跳到另外一行去,且一般命令模式时,会卡在最后一个字符的前面,在编辑模式时,会卡在最后

光标向右移动n个字符

前提:处于一般命令模式中

n<space>

此处n不代表键盘字母n,而是表示数字,按下数字后再按空格<space>,光标会向右移动这一行的n个字符

可以自动换行,如果到了行末,会自动换行

光标移动到本行开头

0功能键[Home]

光标移动到本行末尾

$功能键[End]

光标移动到最后一行

Shift + gG

注意是大写G

光标移动到第n行

:n 或 nG

n为数字

nG的意思是 按下一个数字然后再按G,注意是大写的G

光标移动到第1行

gg

相当于1G

光标向下移动n行

n<Enter>

区别于n<space><space>是向右,<Enter>是向下

查找字符串

/word  # 向光标之下寻找第一个值为word的字符串
?word  # 向光标之上寻找第一个值为word的字符串

输入/? 会进入命令行模式,然后输入想要寻找的字符串

/int

找到之后回车,即可到达目标位置

重复前一个查找操作

n

若已经找了第一个int,无需再次输入\int?int,只需要按n,就会按上一次的命令执行查找,继续往下或往上寻找目标字符串,并且这个查找是循环进行的

反向重复前一个查找操作

N

注意是大写N,且如果上一次查找是向光标之上,则会往光标之下查找

替换操作

:n1,n2s/word1/word2/g  # 在第n1行和第n2行之间寻找word1这个字符串,并将该字符串替换为word2
:1,$s/word1/word2/g  # 将全文的word1替换为word2
:1,$s/word1/word2/gc  # 将全文的word1替换为word2,且在替换前要求用户确认

$表示最后一行

例如,将代码的第5行到第七行之间的int都替换为double

:5,7s/int/double/g

若是gc,则每次替换时,都会确认是否替换该单词,可以选择取消替换

关闭查找关键词高亮

:noh

只是当前查找时会关闭,下一次查找时,高亮还在

选中文本

按下v后,就可以用方向键选择文本

取消选中状态:按两下Esc

剪切

在一般命令模式下使用

d  # 剪切选中的文本
dd  # 剪切当前行

这个d可以当成删除使用

dd可以直接剪切一整行

复制

在一般命令模式下使用

y  # 复制选中的文本
yy  # 复制当前行

粘贴

在一般命令模式下使用

p  # 将复制的数据在光标的下一行/下一个位置粘贴

若复制的内容是一整行,则会粘贴在光标的下一行

若复制的是选中的文本,则会粘贴在光标的下一个位置

撤销

u  # 撤销

取消撤销

ctrl + r

在windows中,类似的操作如下:

Ctrl + z  # 撤销
Ctrl + Shift + z # 取消撤销

挂起当前进程

Ctrl + z

恢复当前进程

fg

将选中文本整体移动

需要事先使用v选中

Shift + >  # 将选中的文本整体向右移动
Shift + <  # 将选中的文本整体向左移动

将整行内容移动

需要按两次方向键

Shift + > + >
Shift + < + < 

保存

在命令行模式中

:w

强制保存

在命令行模式中使用

:w!

退出

在命令行模式中使用

:q

强制退出

在命令行模式中使用

:q!

保存并退出

在命令行模式中使用

:wq

强制保存退出

在命令行模式中使用

:wq!

设置成粘贴模式

若直接从外面复制shift + Insert,粘贴进vim中时,若代码在复制时就已经有缩进了,则vim可能会出现重复多次缩进,自动缩进反而弄巧成拙,导致代码格式混乱。

所以需要paste模式,其可以取消代码自动缩进

:set paste

设置成粘贴模式以后,在编辑模式下是无法自动缩进的

取消粘贴模式

:set nopaste

取消粘贴模式以后,编辑模式下是可以自动缩进的

删除全部内容

gg + d + G

其实就是一个组合键:ggdG

gg表示从第一行开始

d是表示要剪切

G表示删到最后一行

将一行代码格式化

==

将全文格式化

格式化的意思是,若代码格式不对,可以直接调整为正确代码格式

gg + = + G

也是一个组合键:gg=G

gg表示从第一行开始

=表示格式化

G表示格式化到最后一行

取消当前执行的命令

当vim卡死时,可以取消当前正在执行的命令

Ctrl + q

异常处理

读写冲突

若在另一个进程中已经打开了某个文件,若此时同时打开该文件,则两者同时写,就会有冲突,就会报错

解决办法:保证只有一个进程在打开这个文件即可,即让其他进程关掉此文件

临时文件

每次用vim编辑文件时,会自动创建一个 .filename.swp的临时文件

若打开某个文件时,该文件的swp文件已存在,则会报错。

解决办法:

  • 找到正在打开该文件的程序,并退出
  • 直接删除掉该swp文件即可
posted @ 2021-09-02 17:19  SeanSiyang  阅读(371)  评论(0编辑  收藏  举报