【vim】从入门到放弃(“四种”模式、常用命令、正则表达式、文件属性、插件安装)

news2025/1/17 15:51:49

文章目录

  • 一、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代码补全

一、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的新文件(当前文件还在);
  • wqx:先保存再退出;
  • 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 可视化模式

在命令模式中,除了普通的命令模式,还可以进入可视化模式,这个模式主要用来范围选择文本。

命令模式下,按下Vv,即可进入可视化模式(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?:查看文件格式,编码也是如此。

3.2 进阶配置

Vim的主要配置文件是 .vimrc,但实际上还存在其他一些配置文件和目录,用于更详细和细粒度地配置Vim的不同方面。

除了 .vimrc 文件之外,以下是其他常见的Vim配置文件和目录:

  1. vimrc:在Windows系统上使用的Vim配置文件,位于用户目录下的 vimfiles 目录中。
  2. .vim/:Vim的主配置目录,包含诸如插件、颜色方案、语法文件等。
  3. .vim/colors/:用于存放颜色方案文件的目录。
  4. .vim/plugin/:用于存放插件文件的目录。
  5. .vim/autoload/:用于存放自动加载的脚本文件的目录。
  6. .vim/ftplugin/:用于特定文件类型的插件文件的目录。
  7. .vim/after/:用于覆盖默认设置和插件的目录。
  8. .vim/doc/:用于存放插件的文档文件的目录。

3.21 显示行号、语法高亮、自动缩进

要对Vim编辑器进行个性化设置,可以按照以下步骤进行操作:

  1. 打开终端并输入 vim ~/.vimrc 命令,它会打开名为 .vimrc 的文件(如果文件不存在,则会创建一个新的)。

  2. .vimrc 文件中,您可以添加和编辑各种设置以满足您的个性化需求。下面是一些示例设置:

    • 设置行号显示:在文件中添加 set number
    • 启用语法高亮:使用命令 syntax on 开启语法高亮。
    • 设置自动缩进:添加 set autoindent
    • 更改颜色方案:使用命令 colorscheme <scheme_name>,将 <scheme_name> 替换为您喜欢的颜色方案的名称。
    • 设置制表符宽度:例如,使用 set tabstop=4 将制表符宽度设置为 4 个空格。
  3. 保存并关闭 .vimrc 文件。您可以使用 :wq 命令保存并退出。

重新启动 Vim,个性化设置将生效

以下是一些常见的颜色方案名称:

  1. default:Vim的默认颜色方案。
  2. desert:具有沙漠风格的颜色方案。
  3. evening:暗色调的颜色方案,适合夜间使用。
  4. industry:专业和现代感的颜色方案。
  5. koehler:明亮的颜色方案,适合对比度较高的显示器。
  6. murphy:柔和和平衡的颜色方案。
  7. peachpuff:柔和的粉色调颜色方案。
  8. ron:黑色背景搭配明亮的颜色方案。
  9. slate:深灰色调的颜色方案。
  10. torte:深色背景搭配浅色的颜色方案。

3.22 安装插件

Vim可以通过添加插件来扩展其功能和增加额外的特性。Vim插件可以提供各种功能,如语法高亮、代码补全、版本控制集成、文件浏览等。

有几种不同的方法可以管理和安装Vim插件:

  1. 手动安装:手动下载插件的源代码,并将其放置在 .vim/plugin/ 目录(如果插件是单个文件)或 .vim/pack/{任意名称}/start/ 目录(如果插件是一个目录结构)下。

  2. 使用插件管理器:插件管理器能够简化插件的安装、更新和卸载过程。一些常见的插件管理器包括 Vundle、Pathogen、vim-plug 和 dein.vim。

无论选择哪种安装方法,插件安装完成,要在 Vim 的配置文件(如 .vimrc)中使用相应的命令和设置来激活插件。


例:
(1)安装插件管理器 vim-plug

  curl -fLo ~/.vim/autoload/plug.vim --create-dirs \https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim

(2)配置插件管理器

  • 打开 ~/.vimrc 文件(如果不存在则新建一个)。
  • 添加插件管理器的配置。以 vim-plug 为例,插入以下内容:
    call plug#begin('~/.vim/plugged')
    " 插件配置
    call plug#end()
    
  • 在 “插件配置” 部分添加你想要安装的代码补全插件的配置项。

(3)安装代码补全插件

  • call plug#begin('~/.vim/plugged')call plug#end() 之间添加要安装的代码补全插件的配置。以 YouCompleteMe 插件为例:
    Plug 'ycm-core/YouCompleteMe'
    
  • 保存并关闭 ~/.vimrc 文件。
  • 在终端中执行 vim 命令打开 Vim。
  • 在 Vim 中执行 :PlugInstall 命令,插件管理器会自动下载和安装指定的插件。
    在这里插入图片描述

(4)配置代码补全插件

我使用C语言补全功能。

  • 打开终端,并进入 ~/.vim/plugged/YouCompleteMe 目录。

    • 运行 python3 install.py --clang-completer 命令来安装 YouCompleteMe 插件及其 C 语言补全功能(没有Python3安装一下)。
    • 等待安装过程完成。如果需要,根据终端的提示可能需要安装额外的依赖项
    • 安装完成后,返回到 根目录。
  • 配置 .vimrc 文件

    • 打开 ~/.vimrc 文件。
    • 在文件中添加以下配置项,以启用 YouCompleteMe 插件的 C 语言补全功能:
      let g:ycm_global_ycm_extra_conf = '~/.vim/plugged/YouCompleteMe/third_party/ycmd/cpp/ycm/.ycm_extra_conf.py'
      
    • 保存并关闭 ~/.vimrc 文件。

我的.vimrc文件:

set number
syntax on
set autoindent
colorscheme ron

call plug#begin('~/.vim/plugged')
" 插件配置
Plug 'ycm-core/YouCompleteMe'
call plug#end()
let g:ycm_global_ycm_extra_conf = '~/.vim/plugged/YouCompleteMe/third_party/ycmd/cpp/ycm/.ycm_extra_conf.py'

3.23 vim代码补全

在 Vim 中实现代码补全可以通过以下几种方式:

  1. Vim 内置的补全功能:Vim 提供了基本的补全功能,可以按下 Ctrl+PCtrl+N 来进行单词补全。这将根据当前文件中已经存在的单词进行补全。

  2. 插件:有一些插件可以增强 Vim 的代码补全功能。其中一些流行的插件包括:

    • YouCompleteMe:这是一个功能强大的代码补全插件,支持多种编程语言和补全源。
    • coc.nvim:另一个功能强大的插件,提供了完整的代码补全和语言服务支持。
    • UltiSnips:这是一个代码片段插件,可以更快地输入常用的代码块。
  3. 外部工具:有一些外部工具可以与 Vim 集成,提供更强大的代码补全功能。例如,通过配置和使用 ctags、ctags、LSP(Language Server Protocol)等工具,可以实现更智能和全面的代码补全功能。


使用上一小节安装的插件示例:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/556994.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

cpu压力测试、平均负载、切换上下文(linux)

和windows下有很多图形化测试工具不同&#xff0c;linux下的压力测试通常需要命令行 一、平均负载 1.查看命令 uptime会给出类似如下的信息 2.说明 三个数值代表1分钟&#xff0c;5分钟&#xff0c;15分钟的平均进程数。 换成更容易理解但不准确的说法就是几个核满载 比如…

目前前端流行的框架总结

框架 前端框架 前端框架一般指用于简化网页设计的框架&#xff0c;使用广泛的前端开发套件&#xff0c;比如&#xff0c;jquery&#xff0c;extjs&#xff0c;bootstrap等等&#xff0c;这些框架封装了一些功能&#xff0c;比如html文档操作&#xff0c;漂亮的各种控件&#x…

取余,取模

目录 一&#xff1a;取整方式 1&#xff1a;向0取整 --- trunc取整函数 2.向-∞取整 --- floor&#xff08;地板&#xff09;函数 3.向∞取整 --- ceil函数 4.四舍五入取整 --- round 函数 5.四种取整方式的对比 二&#xff1a;取模 1.引入 2.取模与取余等价&#xff1f; 一&a…

JavaScript实现通过表格方式显示三角形的代码

以下为实现通过表格方式显示三角形的程序代码和运行截图 目录 前言 一、通过表格方式显示三角形 1.1 运行流程及思想 1.2 代码段 1.3 JavaScript语句代码 1.4 运行截图 前言 1.若有选择&#xff0c;您可以在目录里进行快速查找&#xff1b; 2.本博文代码可以根据题目要…

5.python列表

文章目录 一、什么是列表二、列表的表示方法三 、列表元素的索引四、访问列表元素五、修改列表元素直接赋值 六、添加列表元素6.1 方法append()6.2 方法insert() 七、删除列表元素7.1 语句del7.2方法pop()7.3方法remove() 八、组织列表8.1倒着打印列表8.2确定列表长度8.3 列表排…

【机器学习】 - 作业5: 基于Kmeans算法的AAAI会议论文聚类分析

课程链接: 清华大学驭风计划 代码仓库&#xff1a;Victor94-king/MachineLearning: MachineLearning basic introduction (github.com) 驭风计划是由清华大学老师教授的&#xff0c;其分为四门课&#xff0c;包括: 机器学习(张敏教授) &#xff0c; 深度学习(胡晓林教授), 计算…

HC-05蓝牙模块的使用

我最近刚刚开始学习嵌入式&#xff0c;在第一次使用蓝牙模块HC-05的时候遇到了很多问题&#xff0c; 甚至连接线都不会&#xff0c;因此下面我会十分详细地介绍我一步一步探索的步骤&#xff0c;直到完成使用手机APP和51单片机收发数据。 调试步骤 首先&#xff0c;我们需要明…

2023开放原子全球开源峰会分论坛即将来袭,Pick你最关注的峰会话题!

2023开放原子全球开源峰会即将开启 二十余场分论坛主题重磅首发 聚焦全球开源发展最新动向 前沿技术、行业实践、开源项目与治理等 多场知识盛宴等您来享 为更好地了解大家的参与意向 分论坛投票今天正式启动&#xff01; 投票时间&#xff1a;5月19-26日 长按识别二维码 …

MFC 给对话框添加图片背景

在windows开发当中做界面的主要技术之一就是使用MFC&#xff0c;通常我们看到的QQ,360,暴风影音这些漂亮的界面都可以用MFC来实现。今天我们来说一下如何用MFC美化对话框&#xff0c;默认情况下&#xff0c;对话框的背景如下&#xff1a; 那么&#xff0c;我们如何将它的背景变…

【Servlet 基础】

&#x1f389;&#x1f389;&#x1f389;点进来你就是我的人了博主主页&#xff1a;&#x1f648;&#x1f648;&#x1f648;戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔&#x1f93a;&#x1f93a;&#x1f93a; 目录 1. 什么是Servlet&#xff1f; 2. 第一个Serv…

微软 LoRA| 使用万分之一的参数微调你的GPT3模型

一、概述 title&#xff1a;LORA: LOW-RANK ADAPTATION OF LARGE LAN- GUAGE MODELS 论文地址&#xff1a;https://arxiv.org/abs/2106.09685 代码&#xff1a;GitHub - microsoft/LoRA: Code for loralib, an implementation of "LoRA: Low-Rank Adaptation of Large …

课时6—死锁(二)

一、死锁的避免 避免死锁同样属于事先预防策略&#xff0c;是在资源动态分配过程中&#xff0c;防止系统进入不安全状态&#xff0c;以避免发生死锁。 1、系统安全状态 在避免死锁方法中&#xff0c;把系统的状态分为安全状态和不安全状态。当系统处于安全状态时可避免发生死…

Android UI开发之多样式富文本的简洁实现

多样式富文本的简洁实现 原文链接&#xff1a;Android UI开发之多样式富文本的简洁实现 AppendableStyleString 允许你快速构建多种样式文字。 特性 支持对于同一个字符串设置多种样式。支持文字和图片。提供默认样式。采用 DSL 确保更清晰的样式作用范围 快速开始 下面的…

【事务失效】十种常见场景

前提 大多数Spring Boot项目只需要在方法上标记Transactional注解&#xff0c;即可一键开启方法的事务性配置。 但是&#xff0c;事务如果没有被正确出&#xff0c;很有可能会导致事务的失效&#xff0c;避免因为事务处理不当导致业务逻辑产生大量偶发性BUG 事务的传播类型 …

JDK8-17的特性发生了哪些变化

JDK8-17的特性发生了哪些变化 垃圾回收器Java交互式编程接口定义扩展String底层结构变更of 创建不可变序列HTTP 2 协议接口引入 var 关键字字符串增强lambda 表达式类型推导switch 增强支持文本块定义instanceof 模式匹配引入record 关键字新增密封类的定义switch二度加强模块…

栈及其实现

目录 一&#xff1a;栈 1.栈的概念和结构 2.栈的实现 <1>.初始化栈 <2>.入栈 <3>.出栈 <4>:获取栈顶元素 <5>.获取栈中有效元素个数 <6>.销毁栈 <7>.示例 二&#xff1a;栈的完整代码 一&#xff1a;栈 1.栈的概念和结构 …

Origin中log2的计算,设置以2为底的log坐标

使用高中的换底公式即可&#xff0c;把2的底换成10的底计算 ![在这里插入图片描述](https://img-blog.csdnimg.cn/5747fdbd2b5c43f095d716092fd17124.png

模式介绍和基本管理

模式介绍&#xff1a; 用户的模式(SCHEMA&#xff09;指的是用户账号拥有的对象集&#xff0c;在概念上可将其看作是包含表、 视图、索引和权限定义的对象。在 DM 中&#xff0c;一个用户可以创建多个模式&#xff0c;一个模式中的对象 &#xff08;表、视图等&#xff09;可以…

【深度学习】- 作业2: MNIST手写数字识别

课程链接: 清华大学驭风计划 代码仓库&#xff1a;Victor94-king/MachineLearning: MachineLearning basic introduction (github.com) 驭风计划是由清华大学老师教授的&#xff0c;其分为四门课&#xff0c;包括: 机器学习(张敏教授) &#xff0c; 深度学习(胡晓林教授), 计算…

stata软件基本操作

一、stata软件介绍 Stata是一个用于分析和管理数据的功能强大又小巧玲珑的实用统计分析软件&#xff0c;由美国计算机资源中心&#xff08;Computer Resource Center&#xff09;研制。它同时具有数据管理软件、统计分析软件、绘图软件、矩阵计算软件和程序语言的特点&#xf…