【史上最全】vim编辑器从入门到入坟,从惊叹到精通(不断完善中)

2023-10-07 13:10

本文主要是介绍【史上最全】vim编辑器从入门到入坟,从惊叹到精通(不断完善中),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

玩linux的人都知道vi,这是一个传奇的工具,所有的类Unix系统都会内建vi文本编辑器,其他的编辑器则不一定会存在。不过vi使用起来比较繁琐,功能也相对比较单一,所以目前我们使用比较多的是它的进阶版——vim编辑器。这篇文章就是对vim进行全方位的介绍,包括理论、实践各个方面各个维度,而且会加入我自己在实际操作中的一些心得总结,最关键的是会不断的完善和补充,希望本文真能如标题所述,成为一篇引导大家从入门到入坟,从惊叹到精通的好文,也希望大家多多指导、多多交流!

1、什么是vim

如上所述,vim是从vi发展出来的一个文本编辑器。代码补全、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用,和Emacs并列成为类Unix系统用户最喜欢的文本编辑器。

vim的设计理念是命令的组合,用户学习了各种各样的文本间移动/跳转的命令和其他的普通模式的编辑命令,并且能够灵活组合使用的话,能够比那些没有模式的编辑器更加高效的进行文本编辑。同时vim与很多快捷键设置和正则表达式类似,可以辅助记忆,并且vim针对程序员做了优化。

2、vim的优势

网上随便找找,漫天的粉丝都在称赞vim的强大,我就不多说了,直接摘录了一段简书【https://www.jianshu.com/p/ca7fff98edfb】上的原文供大家参考。

  1. 编辑文本效率高。
    编辑器的作用主要还是去处理文本,处理文本又有快慢之分。文本的操作主要有输入、光标移动、删除、以及复制粘贴等,同样光标的移动,vim可以比一般的编辑器快上许多,vim的复制粘贴功能也强大到足以使你想再次放弃vim的学习:D,相信我,学好vim将显著提升你编码或者编辑文本的效率。

  2. 完美配合各家编辑器以及IDE。
    如果你想把vim打造成c/c++/python甚至java的IDE,完全没有问题,但是我相信你再怎么配置也不可能超越JetBrain家族的那一套。如果能够把Android Studio或者Pycharm的快捷键配合上vim的高效率编辑岂不是如虎添翼?事实证明这是可行的,ideavim对vim的支持还是很不错的,而且几乎所有的编辑器或者IDE都有vim插件,你不用担心去mac上没有你心爱的notepad++,也不用担心从android转行ios在编辑方式上的巨大改变了,学会了vim,在不同平台上,不同编辑器或者IDE里面,一个vim走天下。

  3. 远程编辑
    linux系统大部分都内置了vi编辑器,这应该是为什么大多数人学习vim而不是emacs的原因吧,我想只要搞开发应该是逃不过远程访问一些日志或者修改一些配置参数什么的,这时候vi的技能就派上用场啦,如果你认为只需要知道i和:wq就ok了,那我真的也没法反驳,毕竟有段时间我就是这么干的,但我想当你真的把hjkl弄熟,顺便还能流利移动光标之后应该就不这么想了。

  4. 扩展性强,私人订制功能
    vim虽然已经很强大,但是部分特殊的需求并不能尽善尽美,如果你有能力的话可以自己学习vimscript来自己写脚本,绝对地私人订制。当然,如果懒得学vimscript的话,python也是可以的,但是基本的vimscript还是要掌握的。如果你实在懒的不行了,可以去google或者github,你想到的需求没准别人已经帮你写好了插件等着你发现呢。

  5. 启动快
    这是我认为作为编辑器必须具备的一个条件,像Atom启动速度就很慢,notepad++做的就不错,可惜只支持windows平台,vim的启动速度还是挺快的,用来打开修改一些配置文件以及编辑文本很高效的。另外,据说emacs启动没有vim快,哈哈。

还在等什么呢,是时候好好审视一下这么多年来形成的打字习惯了,稍微深入了解一下vim,你会发现以前的码字有多么大的提升空间。下面我将陆续跟大家分享一些vim的学习和操作技巧,希望一起学习,把vimmer的精神发扬光大,让vim成为你最后的编辑器。

3、vim的安装

很简单,直接一个命令搞定!

sudo apt-get install vim

默认情况下,系统会安装在/usr/share/vim目录下。安装好之后,使用“vim -version”命令可以查看你所安装的版本:

leon@Ubuntu:~$ vim --version
VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Jun 07 2019 15:35:43)
Included patches: 1-1689
Extra patches: 8.0.0056
Modified by pkg-vim-maintainers@lists.alioth.debian.org
Compiled by pkg-vim-maintainers@lists.alioth.debian.org

4、vim的配置

vim的所有配置选项全部存放于它的配置文件【.vimrc】中。它的配置文件通常有两个,全局版本(global)和用户版本(personal)。

  • 全局配置文件放在你安装vim的目录中【/etc/vim/vimrc,也可以访问它的链接文件/usr/share/vim/vimrc】。如果你改动其中的内容,将对所有用户生效。
  • 用户配置文件放在你的主目录下【~/.vimrc】。如果你改动其中的内容,则只对你当前的用户生效。

如果只对单次编辑启用某个配置项,可以在命令模式下,先输入一个冒号,再输入配置。举例来说,set number这个配置可以写在.vimrc里面,也可以在命令模式输入。

配置项一般都有"打开"和"关闭"两个设置。“关闭"就是在"打开"前面加上前缀"no”。

" 打开
set number" 关闭
set nonumber

查询某个配置项是打开还是关闭,可以在命令模式下,输入该配置,并在后面加上问号。

:set number?

上面的命令会返回number或者nonumber。

如果想查看帮助,可以使用help命令。

:help number

下面就是我本文在实际使用中所总结的一些经验心得:

4.1、如何解决vim显示中文乱码的问题

很简单,在vim的全局配置文件【/etc/vim/vimrc,也可以访问它的链接文件/usr/share/vim/vimrc】中,末尾处加入下面几行代码即可:

set fileencodings=utf-8,gb2312,gb18030,gbk,ucs-bom,cp936,latin1
set termencoding=utf-8
set fileformats=unix
set encoding=prc

4.2、待添加

待添加…

5、vim的使用

5.1、使用vim打开文件

快捷键功能描述
vim filename打开或新建一个文件,并将光标置于第一行的首部
vim -r filename恢复上次 vim 打开时崩溃的文件
vim -R filename把指定的文件以只读方式放入 Vim 编辑器中
vim + filename打开文件,并将光标置于最后一行的首部
vi +n filename打开文件,并将光标置于第 n 行的首部
vi +/pattern filename打幵文件,并将光标置于第一个与 pattern 匹配的位置
vi -c command filename在对文件进行编辑前,先执行指定的命令

5.2、使用vim阅读文件

快捷键功能描述
h 或 向左箭头键(←)光标向左移动一个字符【见下说明】
j 或 向下箭头键(↓)光标向下移动一个字符【见下说明】
k 或 向上箭头键(↑)光标向上移动一个字符【见下说明】
l 或 向右箭头键(→)光标向右移动一个字符【见下说明】
[Ctrl] + [f]屏幕『向下』移动一页,相当于 [Page Down]按键 (常用)
[Ctrl] + [b]屏幕『向上』移动一页,相当于 [Page Up] 按键 (常用)
[Ctrl] + [d]屏幕『向下』移动半页
[Ctrl] + [u]屏幕『向上』移动半页
+光标移动到非空格符的下一行
-光标移动到非空格符的上一行
nn表示数字,例如20。按下数字后再按空格键,光标会向右移动这一行的n个字符
0或功能键[Home] 这是数字『 0 』:移动到这一行的最前面字符处 (常用)
$或功能键[End] 移动到这一行的最后面字符处(常用)
H光标移动到这个屏幕的最上方那一行的第一个字符
M光标移动到这个屏幕的中央那一行的第一个字符
L光标移动到这个屏幕的最下方那一行的第一个字符
G移动到这个档案的最后一行(常用)
nGn 为数字。移动到这个档案的第 n 行。例如 20G 则会移动到这个档案的第 20 行(可配合 :set nu)
gg移动到这个档案的第一行,相当于 1G 啊! (常用)
nn 为数字。光标向下移动 n 行(常用)

说明:如果你将右手放在键盘上的话,你会发现 hjkl 是排列在一起的,因此可以使用这四个按钮来移动光标。 如果想要进行多次移动的话,例如向下移动 30 行,可以使用 “30j” 或 “30↓” 的组合按键, 亦即加上想要进行的次数(数字)后,按下动作即可!

5.3、使用vim编辑文件

5.3.1、插入文本

从命令模式进入输入模式进行编辑,可以按下 I、i、O、o、A、a 等键来完成,使用不同的键,光标所处的位置不同,如下表所示。

快捷键功能描述
i在当前光标所在位置插入随后输入的文本,光标后的文本相应向右移动
I在光标所在行的行首插入随后输入的文本,行首是该行的第一个非空白字符,相当于光标移动到行首执行 i 命令
o在光标所在行的下面插入新的一行。光标停在空行首,等待输入文本
O在光标所在行的上面插入新的一行。光标停在空行的行首,等待输入文本
a在当前光标所在位置之后插入随后输入的文本
A在光标所在行的行尾插入随后输入的文本,相当于光标移动到行尾再执行 a 命令

5.3.2、查找文本

快捷键功能描述
/abc从光标所在位置向前查找字符串 abc
/^abc查找以 abc 为行首的行
/abc$查找以 abc 为行尾的行
?abc从光标所在为主向后查找字符串 abc
n向同一方向重复上次的查找指令
N向相反方向重复上次的查找指定

说明:
1、如果在文件中并没有找到所要查找的字符串,则在文件底部会出现 “Pattern not found” 提示。
2、在查找过程中需要注意的是,要查找的字符串是严格区分大小写的,如查找 “shenchao” 和 “ShenChao” 会得到不同的结果。
3、如果在字符串中出现特殊符号,则需要加上转义字符 “”。常见的特殊符号有 \、*、?、$ 等。如果出现这些字符,例如,要查找字符串 “10$”,则需要在命令模式中输入 “/10$”。

5.3.3、替换文本

快捷键功能描述
r替换光标所在位置的字符
R从光标所在位置开始替换字符,其输入内容会覆盖掉后面等长的文本内容,按“Esc”可以结束
:n1,n2s/a1/a2/g将文件中 n1 到 n2 行中所有 a1 都用 a2 替换
:g/a1/a2/g将文件中所有的 a1 都用 a2 替换

例如,要将某文件中所有的 “root” 替换为 “liudehua”,则有两种输入命令,分别为:

:1, $s/root/liudehua/g
或
:%s/root/liudehua/g

上述命令是在编辑模式下操作的,表示的是从第一行到最后一行,即全文查找 “root”,然后替换成 “liudehua”。

如果刚才的命令变成【:10,20 s/root/liudehua/g】,则只替换从第 10 行到第 20 行的 “root”。

5.3.4、删除文本

快捷键功能描述
x删除光标所在位置的字符
dd删除光标所在行
ndd删除当前行(包括此行)后 n 行文本
dG删除光标所在行一直到文件末尾的所有内容
D删除光标位置到行尾的内容
:a1,a2d函数从 a1 行到 a2 行的文本内容

注意,被删除的内容并没有真正删除,都放在了剪贴板中。将光标移动到指定位置处,按下 “p” 键,就可以将刚才删除的内容又粘贴到此处。

5.3.5、复制文本

快捷键功能描述
p将剪贴板中的内容复制到光标后
P将剪贴板中的内容复制到光标前
yy将光标所在行复制到剪贴板,此命令前可以加数字 n,可复制多行
yw将光标位置的单词复制到剪贴板

5.4、使用vim保存文件

快捷键功能描述
:wq保存并退出 Vim 编辑器
:wq!保存并强制退出 Vim 编辑器
:q不保存就退出 Vim 编辑器
:q!不保存,且强制退出 Vim 编辑器
:w保存但是不退出 Vim 编辑器
:w!强制保存文本
:wfilename 另存到 filename 文件
x!保存文本,并退出 Vim 编辑器,更通用的一个 vim 命令
ZZ直接退出 Vim 编辑器

在这里插入图片描述
在这里插入图片描述

结束语

vim是一个非常强大的工具,强大到你不敢想象。我也只是一个刚入门的初学者,这里只是收集和总结了我自己已经了解到的一些信息和技巧,还有很多其他的部分我还没有接触到,欢迎大家留言交流,多多补充!

这篇关于【史上最全】vim编辑器从入门到入坟,从惊叹到精通(不断完善中)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/157956

相关文章

Spring WebClient从入门到精通

《SpringWebClient从入门到精通》本文详解SpringWebClient非阻塞响应式特性及优势,涵盖核心API、实战应用与性能优化,对比RestTemplate,为微服务通信提供高效解决... 目录一、WebClient 概述1.1 为什么选择 WebClient?1.2 WebClient 与

Spring Boot 与微服务入门实战详细总结

《SpringBoot与微服务入门实战详细总结》本文讲解SpringBoot框架的核心特性如快速构建、自动配置、零XML与微服务架构的定义、演进及优缺点,涵盖开发环境准备和HelloWorld实战... 目录一、Spring Boot 核心概述二、微服务架构详解1. 微服务的定义与演进2. 微服务的优缺点三

从入门到精通详解LangChain加载HTML内容的全攻略

《从入门到精通详解LangChain加载HTML内容的全攻略》这篇文章主要为大家详细介绍了如何用LangChain优雅地处理HTML内容,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录引言:当大语言模型遇见html一、HTML加载器为什么需要专门的HTML加载器核心加载器对比表二

从入门到进阶讲解Python自动化Playwright实战指南

《从入门到进阶讲解Python自动化Playwright实战指南》Playwright是针对Python语言的纯自动化工具,它可以通过单个API自动执行Chromium,Firefox和WebKit... 目录Playwright 简介核心优势安装步骤观点与案例结合Playwright 核心功能从零开始学习

从入门到精通MySQL联合查询

《从入门到精通MySQL联合查询》:本文主要介绍从入门到精通MySQL联合查询,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下... 目录摘要1. 多表联合查询时mysql内部原理2. 内连接3. 外连接4. 自连接5. 子查询6. 合并查询7. 插入查询结果摘要前面我们学习了数据库设计时要满

从入门到精通C++11 <chrono> 库特性

《从入门到精通C++11<chrono>库特性》chrono库是C++11中一个非常强大和实用的库,它为时间处理提供了丰富的功能和类型安全的接口,通过本文的介绍,我们了解了chrono库的基本概念... 目录一、引言1.1 为什么需要<chrono>库1.2<chrono>库的基本概念二、时间段(Durat

解析C++11 static_assert及与Boost库的关联从入门到精通

《解析C++11static_assert及与Boost库的关联从入门到精通》static_assert是C++中强大的编译时验证工具,它能够在编译阶段拦截不符合预期的类型或值,增强代码的健壮性,通... 目录一、背景知识:传统断言方法的局限性1.1 assert宏1.2 #error指令1.3 第三方解决

从入门到精通MySQL 数据库索引(实战案例)

《从入门到精通MySQL数据库索引(实战案例)》索引是数据库的目录,提升查询速度,主要类型包括BTree、Hash、全文、空间索引,需根据场景选择,建议用于高频查询、关联字段、排序等,避免重复率高或... 目录一、索引是什么?能干嘛?核心作用:二、索引的 4 种主要类型(附通俗例子)1. BTree 索引(

Redis 配置文件使用建议redis.conf 从入门到实战

《Redis配置文件使用建议redis.conf从入门到实战》Redis配置方式包括配置文件、命令行参数、运行时CONFIG命令,支持动态修改参数及持久化,常用项涉及端口、绑定、内存策略等,版本8... 目录一、Redis.conf 是什么?二、命令行方式传参(适用于测试)三、运行时动态修改配置(不重启服务

Oracle 数据库数据操作如何精通 INSERT, UPDATE, DELETE

《Oracle数据库数据操作如何精通INSERT,UPDATE,DELETE》在Oracle数据库中,对表内数据进行增加、修改和删除操作是通过数据操作语言来完成的,下面给大家介绍Oracle数... 目录思维导图一、插入数据 (INSERT)1.1 插入单行数据,指定所有列的值语法:1.2 插入单行数据,指