~~~~
- 前言
- vim是什么
- 为什么有vim
- vim怎么用
- vim模式介绍
- 模式切换
- 命令模式(Normal mode)
- i/a/o 切换到插入模式
- : 切换到底行模式
- R 切换到替换模式
- 光标移动
- 删除文字
- 复制
- 撤销
- 更改
- 插入模式(Insert mode)
- 底行模式(last line mode)(需整理20240311)
- 替换模式
- vim简单配置
- vim配置文件 .vimrc
- vim常用配置举例:(可自行搜索更多)
- 成熟的vim配置方案
- vim学习资料
- 结语
前言
本文介绍Linux下著名且强大的vim编辑器。让我们开启命令行下的代码编写,就像在windows下一样。
vim是什么
vim是一款多模式编辑器,支持多种插件配置。vim编辑器存在着多种模式供用户使用,在Linux下写代码,掌握vim编辑器的使用是很有必要的。
为什么有vim
vim出现于早期没有图形化界面、没有鼠标的时候,当时的电脑只有黑窗口和键盘。程序员使用vim在黑窗口中进行编辑,对vim的操作都只通过键盘来控制。当时键盘上也没有上下左右方向键,而是通过hjkl控制光标的左下上右的移动的。
vim怎么用
vim模式介绍
vim是一款多模式编辑器,众多模式中,我们本文主要学习的命令模式、底行模式、插入模式这三个模式。
模式切换
命令模式(Normal mode)
是用户打开vim的默认模式,用户可以执行vim提供的各种命令。
控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入插入模式或底行模式。
i/a/o 切换到插入模式
i:从光标当前位置开始进行输入,光标不变。
a:从光标的下一个位置开始进行输入,光标后移1个位置。
o:从光标的下一行的行首开始进行输入,光标移到下一行起始位置,会新开一行。
: 切换到底行模式
R 切换到替换模式
R或ctrl+r:
光标移动
命令 | 功能 | 栗子 |
---|---|---|
gg | 移动到文本开始 | |
G | 移动到文本结束 | |
#G | 移动到指定的#行处 | 未输入#,默认移动到文本结束位置 |
^ | 移动到本行的行首 | |
$ | 移动到本行的行尾 | |
#l | 移动到光标后的第#个位置,已在行尾则不再移动 | 5l,即移动到光标后的第5个位置 |
#w | 移动到下#个字的开头 | 不输入#,默认是移动1个字 |
#e | 移动到下#个字的开头 | 不输入#,默认是移动1个字 |
#b | 移动到上#个字的开头 | 不输入#,默认是移动1个字 |
ctrl + b | 向上移动一个屏幕 | |
ctrl + f | 向下移动一个屏幕 | |
ctrl + u | 向上移动半个屏幕 | |
ctrl + d | 向下移动半个屏幕 | |
ctrl + w | 光标切换到下一个打开的文件内 | 用于vim使用vs分屏打开多个文件时,对光标的切换,光标在哪个文件,就是正在对那个文件进行编辑 |
删除文字
命令 | 功能 | 栗子 |
---|---|---|
#x | 删除光标所在位置及其之后的#个字符 | 不输入#默认删除1个字符 |
#X | 删除光标所在位置之前的#个字符 | 不输入#默认删除1个字符 |
#dd | 删除光标所在行及其之后的#行 | 不输入#默认删除1个字符 |
复制
命令 | 功能 | 栗子 |
---|---|---|
#yy | 复制光标所在行及其之后的共#行 | 不输入#默认删除1个字符 |
#yw | 复制光标位置到当前字字尾的字符 | 不输入#默认删除1个字符 |
p | 粘贴缓冲区的内容到光标所在位置 | |
复制操作yy/yw都会把复制的内容放入缓冲区 |
撤销
命令 | 功能 | 栗子 |
---|---|---|
u | 撤销上一步的操作 | 类似win的ctrl+z |
ctrl + r | 恢复你的撤销(对撤销的撤销) |
更改
命令 | 功能 | 栗子 |
---|---|---|
c#w | 更改光标所在字及其之后的共#个字 | 不输入#默认更改1个字符。更改的意思是,删除字符再进入插入模式等待用户输入 |
插入模式(Insert mode)
主要进行文字输入。
底行模式(last line mode)(需整理20240311)
文件保存或退出,也可以进行文件替换,找字符串,列出行号等操作。 在命令模式下,_shift+: _即可进入该模
式。要查看你的所有模式:打开vim,底行模式直接输入
命令 | 功能 | 栗子 |
---|---|---|
:set nu | 显示行号 | |
:# | 光标跳到#行行首 | #是需要输入的数字 |
:w | 保存并退出编辑,就算没有修改也会写入,并修改文件时间属性 | |
:w! | 强制保存文件内容 | |
:q | 关闭文件 | 一般wq搭配使用,完成保存退出的功能 |
:q! | 强制关闭文件,但并不保存当前修改 | |
:x! | 保存并退出编辑,仅当文件有修改时会保存,并修改文件时间属性 | |
😕# | 查询搜索文件中出现#内容的所有位置,并高亮。使用n跳到下一个#内容;使用N跳到上一个#内容。 | #是用户输入的内容,可以是数字,字符,汉字等 |
:?# | 查询搜索文件中出现#内容的所有位置,并高亮。使用n跳到上一个#内容;使用N跳到下一个#内容。 | #是用户输入的内容,可以是数字,字符,汉字等。 |
/和?搜索的结果相同,但使用n/N查询结果时移动方向是相反的。 | ||
😒 | 批量替换指定字符序列为新的字符序列 | :%s/string1/string2/g |
:[range]s[ubstitute]/{pattern}/{string}/[flags] [count] | ||
:p | 打印指定区间的行 |
:[range]p[rint] [flags] |
| :i | 在指定行上方添加文本 | :{range}i[nsert][!] |
| :vs filename | 分屏打开文件 | |
在vim的底行模式中,
😒 表示substitute,也就是替换, 格式为以下
:[range]s[ubstitute]/{pattern}/{string}/[flags] [count]
range 表示区间 % 用于表示全文, 2,3 表示从第2行开始到第3行
{pattern} 表示字符串匹配规则,要匹配什么样的字符串 , 比如^a 表示以a字符起始的字符串
{string} 表示要将匹配到的字符串替换为的新的string字符串
[flags] s_flags中,g比较常用,通常使用g表示全部替换,默认如果不给的话,表示只替换一次
[count] 表示在一行中匹配多少次,很少会用到…
如果想要将文件中所有 nihao 替换为 hello 则命令为: _%s/nihao/hello/g _
:p 用于打印指定区间的行
:[range]p[rint] [flags]
:i 在指定行上方添加文本
:{range}i[nsert][!]
替换模式
命令 | 功能 | 栗子 |
---|---|---|
#r | 命令模式下使用:替换光标所在位置及其之后的共#个字符 | 不输入#默认替换1个字符 |
R | 进入替换模式,一直替换光标所在位置的字符,直到按ESC退出替换模式 |
vim简单配置
vim初始时只是一个啥也没有的编辑器,界面很简陋,没有语法高亮,没有提示,没有换行控制、没有行号显示…等等。我们需要方便实用vim,需要对vim进行一些简单配置(插件安装)或者直接使用网上他人已经配置好的方案。
vim配置文件 .vimrc
在系统路径/etc
下有一个名为vimrc
的文件:
这个文件是所有用户公共配置文件,对所有用户都有效,一般我们不会直接对其进行配置,否则会影响所有用户。
每个用户的家目录/home/usr
下有一个隐藏的.vimrc
文件,这就是当前用户本地(私有)的vim配置文件,只对当前用户有效。
通常用户家目录下都会存在一个.vimrc
文件,如果不存在,用户需要自己创建。
vim常用配置举例:(可自行搜索更多)
set ai 自动缩进,与上一行保持一致的自动空格
set ic 在查询模型与匹配模式下忽略大小写
set number 左侧显示行号
set showmatch 显示括号配对,并高亮显示相匹配的括号
set showmode 文本输入模型下,加亮显示模式指示器
set showcmd 在状态栏显示所执行的指令,未完成的指令片段
set warn 长行显示自动折行
set cindent 以C/C++模式缩进
set ruler 打开状态栏标尺
set scrolloff=6 设置光标离窗口上下6行时窗口自动滚动
set tabstop=4 设置Tab长度为4
set wrap 自动换行显示
syntax enable
syntax on 自动语法高亮
成熟的vim配置方案
SpaceVim
vim学习资料
vim入门
结语
本文主要介绍了编辑器vim的四个模式:命令模式、插入模式、底行模式和替换模式,以及它们模式切换。还介绍了vim不同模式下的基本操作,vim想要熟练使用,只记忆是不行的,需要持续练习vim,向着精通vim的方向前进!
最后介绍了vim如何进行配置,毕竟没有配置过的vim是很难有使用欲望的。
T h e E n d TheEnd TheEnd