本文所有操作均通过ssh连接腾讯云服务器完成。如果你正在使用安装GNOME桌面的Linux,很多操作可以通过鼠标完成,或许更加直观。
推荐使用neovim
(结合鼠标操作更加丝滑)。
nvim
效果展示:
一、vim简介
二、vim操作
2.1 三种模式及其切换
2.2 常用命令
2.21 命令模式下常用命令
2.22 底行模式下常用命令
三、vim进阶
3.1 进阶操作
3.11 可视化模式
3.12 正则表达式
3.13 结合其他文本处理命令
3.14 修改文件属性(编码、格式、权限)
3.2 进阶配置
3.21 显示行号、语法高亮、自动缩进
3.22 安装插件
3.23 vim代码补全
3.24 实操:安装代码补全插件YCM
四、放弃vim,入手neovim(推荐)
4.1 什么是neovim
4.2 安装neovim(nvim)
4.3 nvim 的配置与使用
4.4 nvim插件(自动补全、文件树、格式化、对齐线)
4.41 自动补全插件:coc
4.42 文件树:nvim-tree
4.43 代码格式化
4.44 C语言代码格式化:clang-format
4.45 显示对齐线
4.5 我的nvim配置文件
一、vim简介
Vim(Vi IMproved)是一款强大而受欢迎的文本编辑器,广泛用于Linux和Unix系统。它是Vi编辑器的增强版本,提供了丰富的功能和高度可定制的环境。
本小节对vim做概括性介绍。
1.Vim的特点:
模态编辑:Vim以不同的模式(命令模式、插入模式、可视模式等)进行编辑,使得操作更加高效。
高度可定制:通过修改配置文件(如.vimrc),用户可以个性化设置Vim的外观、行为和功能。
强大的编辑功能:Vim提供了丰富的编辑命令,如搜索和替换、复制和粘贴、缩进和格式化等,提高了编辑效率。
多语言支持:Vim支持各种编程语言,并提供语法高亮、自动缩进、代码折叠等功能。
2.Vim的编辑模式:
命令模式(Normal Mode):用于导航、编辑和执行命令(也称一般模式)。
插入模式(Insert Mode):用于输入和编辑文本(也称编辑模式)。
可视模式(Visual Mode):用于选择和操作文本块(也称底行模式)。
3.Vim的扩展性:
插件:Vim支持各种插件,如代码补全、语法检查、文件管理等。插件可以通过插件管理器(如Vundle、Pathogen、vim-plug)进行安装和管理。
脚本和自定义函数:Vim允许用户编写自己的脚本和函数,以满足特定的需求。
定制化配置:通过修改.vimrc文件,用户可以自定义Vim的外观、键绑定、缩进设置等。
二、vim操作
本小节介绍vim的三种模式以及各种模式下的命令。
2.1 三种模式及其切换
命令模式:在命令行使用vim进入vim编辑环境时,默认就是命令模式。命令模式下,无法在文档中输入文字。只能输入各种命令(不会显示在任何地方),进行一些操作,比如移动光标,删除文本的一行等等。
如图所示:用vim打开一个C语言头文件
命令模式下,左下角显示的是:文件名、当前模式([dos]即命令模式)、行数、总字符数(字符、空格、制表符、回车符)
编辑模式: 在命令模式下,按下i
(当然不只是i
,在2.2节详细介绍,注意所有命令都是英文状态下输入)即可进入编辑模式。在编辑模式下,即可进行编辑。在编辑模式下,按ESC
,就可以切换到命令模式。
在编辑模式下,左下角会显示insert
。
底行模式:在命令模式下,输入:
,即可进入底行模式。在冒号后面就可以执行一些命令,这些命令通常是保存文件、退出、查找替换等等。
在三种模式中:
命令模式和底行模式主要用来执行一些命令(查找、删除、移动光标、追加、插入、退出、保存等等);
而编辑模式用以主要的文本编辑操作,该模式下不能执行命令(任何键盘输入都会作为文本或格式控制符添加到文件中)。
编辑模式,就是打字撒,不用讲了。下面介绍在命令模式和底行模式中常用的命令
2.2 常用命令
2.21 命令模式下常用命令
注意下面的命令是在命令模式执行的,多使用就记住了,结合单词记忆。
(1)进入编辑模式
下面的命令都可以进入编辑模式,但会在不同的位置进行编辑。
i
:在光标前面插入;a
:在光标后插入;I
:在光标所在行的开头插入(第一个非空字符前面);A
:在光标所在行的末尾插入;o
:在光标所在行的下面添加新的空行;O
:大写O,在光标所在行的上面添加新的空行。
块状光标: 光标默认是这种块状的,光标前面即字母K的前面,也就是说会在字母C和字母K中间插入新内容。(你可以在你的ssh工具中修改形状,如果支持的话)
(2)移动光标
hjkl:左、下、上、右(推荐直接使用方向键)
ctrl b:向上移动一页(pageup);
ctrl f:向下移动一页(pagedown);
gg:移动到文件第一行开头;
G:移到文件最后一行开头;
H:移到屏幕第一行开头;
M:移到屏幕中间行开头;
L:移到屏幕最下面一行开头;
-0:数字0,移到本行开头;
$:移到本行末尾;
^:移到本行第一个非空字符;
w:移动到后一个字的开头(比如单词);
e:移动到后一个字的结尾;
b:移动到前一个字的开头。
上面的大写字母都可以使用shif +小写字母的方式。下面两条命令,必须先大写锁定(caps lock),然后按下数字和字母(可以先按数字):
nL:移到屏幕第n行; nH:移到屏幕倒数第n行。
不必全部掌握,小范围的移动,或许使用方向键也不慢。
(3)删除
- x:删除光标指向的字符(比较适合块状光标);
- X:删除光标前一个字符(推荐直接backspace);
D
:删除至行尾(包括光标指向的字符);dd
:删除光标所在的行,也是剪切(这一行消失,光标跑到下一行开头);ndd
:向下删除n行,包括光标所在行;
(4)修改
cc
:重写光标所在行(即删除原有内容,从开头重写编辑,和删除行不同)
(5)取代
即用新的字符替换原来的字符。
r
:取代光标处字符;R
:连续取代,直到按下ESC。
(6)复制粘贴
yy:复制光标所在行到缓冲区(有点剪贴板的意思);
nyy:复制n行,从光标所在行向下数共n行;
p:将缓冲区内容复制到光标所在行下面;
P:复制到光标所在行上面。
(7)撤销重做
u:撤销,复原至上一个命令(默认最多1000次,我没验证);
.:重复上一个命令(不会重复撤销命令);
2.22 底行模式下常用命令
底行模式的命令通常用来退出vim和文件的全局操作。
注意下面的命令是在底行模式执行的,先在命令模式输入冒号,再输入下面命令。
(1)退出与保存文件
q
:退出vim,如果修改了文件会有提示;w
:保存文件;w filename
:保存名为filename的新文件(当前文件还在);wq
或x
:先保存再退出;q!
:不保存退出;- wq!:强制保存退出。
(2)删除
主要用来批量删除。
n1,n2 d:删除从n1到n2的所有行
例1:1,4 d:删除1-4行
例2:1,$ d:删除所有
例3:.,$:删除当前行到结尾
除此之外,还可以结合正则表达式来删除,放在3,1节介绍。
(3)恢复文件(很常用的)
recover:恢复文件
recover命令和u命令的效果不同。u命令用于撤消上一次的操作,而recover命令用于恢复上一次编辑会话中的文件。如果在编辑会话期间意外退出Vim,则可以使用recover命令恢复文件。
三、vim进阶
3.1 进阶操作
3.11 可视化模式
在命令模式中,除了普通的命令模式,还可以进入可视化模式,这个模式主要用来范围选择文本。
命令模式下,按下V
或v
,即可进入可视化模式(ESC退出):
V
:操作的基本单位是行:如图选择了4行。
v
:操作的基本单位是字符:如图选择了多个字符
选中目标文本后,就可以对选中内容进行一些操作:
y:复制 (前面yy复制一行)
d:剪切 (前面dd删除一行)
p:粘贴(P)
例,全选所有内容:ggVG
解释:命令模式下,gg先移动到文本开头,V进入可视化模式,G光标移动到最后一行,选择了所有内容
编辑文本时的选择、复制、粘贴等操作可以有多种方式:
1.在编辑模式下,可以使用鼠标来批量选择和复制粘贴,也可以使用键盘组合ctrl shift c这些完成;
2.在命令模式下:基于v命令和其他命令完成。
3.12 正则表达式
底行模式可以结合正则表达式来完成一些操作。主要是删除、查找和替换,举一些例子:
(1)删除
- 例1:删除所有包含某个字符串的行:
不加g则是在光标所在行操作,这一行匹配到就删除这行。
: g/solve/ d #将删除所有包含字符串solve的行
执行前:
执行后:
左下角也显示少了5行。
- 例2:删除匹配整个单词的所有行
:g/\<SOCKET\>/ d
(2)替换
- 例1:对将光标所在行所有满足条件的字符串进行替换
不加g只替换第一个匹配到的。
:s/solve/new/g
- 例2:对整个文件符合条件的字符串进行替换
不加g就是所有行第一个匹配到的。
:% s/solve/new/g
(3)查找
- 例1:查找光标后面所有匹配项
/solve
从执行该命令前光标的位向后开始查找,将光标移动到匹配到的第一个所在行开头,按n
移动到下一个。
- 例2:打印所有匹配到的行
:g/solve/p
3.13 结合其他文本处理命令
除了可以使用正则表达式,还可以用grep、sed、awk等文本处理命令一起使用。
例:使用sed命令,在文件所有匹配到的行前面添加一行内容
:%!sed '/solve/ i\我在这里插入了一行'
3.14 修改文件属性(编码、格式、权限)
文件属性的修改也经常遇到,比如windows下和Linux下文本的换行符不同。
- 修改文件编码:
:set encoding=utf-8
或:
:set fileencoding=utf-8
- 修改文件格式:
unix、dos、mac
:set fileformat=unix
:set fileformat?
:查看文件格式,编码也是如此。