Linux中vim文本编辑器你了解多少?

在Linux中,vim(Vi IMproved)是一个非常强大的文本编辑器,它基于更古老的vi编辑器,并添加了许多增强功能。vim有几种不同的模式,包括命令模式、插入模式和可视模式,每种模式都有特定的功能和快捷键。

下面是vim的基本使用教程:

  1. 启动vim

    • 在终端中输入 vim [filename] 来打开一个现有文件或创建一个新文件。如果不指定文件名,vim将以未命名缓冲区启动。
  2. 命令模式

    • 这是启动vim时的默认模式。
    • 使用方向键或HJKL(h向左,j向下,k向上,l向右)来移动光标。
    • i键进入插入模式,允许你开始输入文本。
  3. 插入模式

    • 在此模式下,你可以像在其他文本编辑器中那样输入文本。
    • Esc键返回命令模式。
  4. 底线命令模式

    • 在命令模式下,按:键进入底线命令模式,可以在这里输入命令。
    • 常见命令:
      • :w 保存当前文件。
      • :q 退出vim,如果文件有修改则需要加上!强制退出,即:q!
      • :wq:x 保存并退出。
      • :q! 不保存并退出。
  5. 文本编辑

    • 在命令模式下,使用以下命令进行编辑:
      • a 在当前位置后面插入文本。
      • A 在行尾插入文本。
      • o 在当前行下面新开一行并进入插入模式。
      • O 在当前行上面新开一行并进入插入模式。
      • r 替换当前字符。
      • R 替换并进入替换模式直到按Esc
  6. 撤销与重做

    • 在命令模式下,按u撤销上一次更改。
    • Ctrl+r重做被撤销的操作。
  7. 查找与替换

    • 在命令模式下,输入/后跟随搜索字符串来查找文本。
    • 输入:s/pattern/replacement/g全局替换文本中的模式。
  8. 分割窗口

    • 在命令模式下,输入:split [filename]来水平分割窗口。
    • 使用:vsplit [filename]垂直分割窗口。
  9. 导航

    • 在命令模式下,使用gg跳到文件开头,G跳到文件结尾。
    • 使用0^移动到行首,$移动到行尾。
  10. 退出vim

    • 如果文件未修改,可以直接按:q退出。
    • 如果文件有修改,使用:wq保存并退出,或使用:q!放弃更改并退出。

以上是vim基本功能的简要介绍,vim的功能远不止这些。以下是vim更高级的用法:

  1. 多级撤销
  • vim中,不仅可以撤销单个操作,还可以撤销一系列操作。这使得你可以撤销整个编辑会话,或者只撤销到某个特定点。使用u撤销,Ctrl+r重做,Ctrl+r+[数字]恢复到某次撤销的状态。
  1. 视觉模式
  • 视觉模式(Visual Mode)允许你选择文本。可以通过以下方式进入:
    • v:字符视觉模式,从光标位置开始选择文本。
    • V:行视觉模式,从光标所在行开始选择文本。
    • Shift+v:列视觉模式,从光标所在列开始选择文本。
  • 选中文本后,可以执行复制(y)、剪切(d)、粘贴(p)等操作。
  1. 寄存器
  • vim中的寄存器类似于剪贴板,用于存储剪切、复制的内容。使用"a+[命令]将内容存储到寄存器a中,使用"a+[粘贴命令]从寄存器a中粘贴内容。
  1. 替换命令
  • 更复杂的替换可以在命令模式下使用:%s/old/new/g,其中%表示全文,s表示替换,old是旧字符串,new是新字符串,g表示全局替换。
  1. 插件管理
  • vim支持插件以扩展功能。使用插件管理器如vim-plugVundle来安装和管理插件,这可以极大地提高编辑效率和代码质量。
  • 示例:安装vim-plug插件管理器后,你可以在.vimrc文件中添加如下代码来安装NERDTree插件:
    call plug#begin('~/.vim/plugged')
    Plug 'scrooloose/nerdtree'
    call plug#end()
    
  1. 编程支持
  • vim内置了对多种编程语言的支持,包括语法高亮、缩进规则、函数列表等。可以通过设置文件类型(:set ft=python)来启用特定语言的支持。
  1. 自动完成和代码补全
  • 使用插件如YouCompleteMedeoplete.nvim可以实现代码自动补全功能,提高编码速度。
  1. 跳转至定义和引用查找
  • 对于某些语言,vim可以跳转到变量、函数的定义处,或查找所有引用。这通常通过插件实现,如ctagsTagbar
  • 示例:假设你在一个C++项目中,想要跳转到函数myFunction的定义处,可以使用ctags生成tags文件,然后在vim中输入:tag myFunction
  1. 配置.vimrc
  • .vimrc文件是vim的配置文件,位于用户主目录下。通过编辑这个文件,可以自定义vim的行为,包括快捷键、颜色主题、插件加载等。
  • 示例:若要设置vim的背景为深色,可以在.vimrc文件中添加:
    set background=dark
    syntax enable
    
  1. 编辑多文件
  • 可以同时打开多个文件,使用tabeditt命令在标签页间切换,使用nextprev命令在文件间切换。
  1. 快速修复 (Quickfix)
  • 假设你有一个C程序,编译命令是gcc -Wall -o prog prog.c。你可以在vim中运行make命令:
    :make
    
    这将自动打开快速修复列表,显示所有的编译错误。你可以使用copenlopen来查看错误列表,使用cncp在错误之间导航。
  1. 映射 (Mappings)
  • 在你的.vimrc中,你可以自定义快捷键。例如,为了快速保存文件并退出,可以添加:
    nnoremap <leader>wq :wq<CR>
    
    现在,你可以按Ctrl+w再按q来保存文件并退出。
  1. 标签 (Tags) 和 Taglist
  • 安装ctags并生成tags文件后,你可以使用taglist插件在侧边栏显示所有函数和变量的列表。例如,要跳转到名为main的函数定义,可以执行:
    :tag main
    
  1. 语法检查 (Syntastic)**
  • 安装Syntastic插件后,当你打开一个Python文件时,插件会自动运行pylint或其他检查器,并在编辑器底部显示任何问题。例如,如果一个变量未被定义,你会看到一条错误消息。
  1. 缓冲区管理 (Buffer Management)
  • 打开多个文件后,你可以使用以下命令在缓冲区之间切换:
    :bn        " 切换到下一个缓冲区
    :bp        " 切换到上一个缓冲区
    :ls        " 列出所有打开的缓冲区
    
  1. 自动文件类型检测 (Filetype Detection)
  • 当你打开一个.py文件时,vim会自动加载Python相关的语法高亮和行为设置。如果你想要手动设置文件类型,可以执行:
    :set filetype=python
    
  1. 插件开发
  • 使用Lua脚本,你可以编写自己的插件。例如,一个简单的插件可以是:
    function! Hello()echomsg 'Hello, World!'
    end
    
  1. 会话管理 (Session Management)
  • 要保存当前的编辑会话(包括打开的文件、窗口布局等),可以执行:
    :mksession session.vim
    
    下次启动vim时,要恢复会话,可以执行:
    :source session.vim
    
  1. 自定义界面 (Customizing UI)
  • 要更改vim的颜色主题,你可以在.vimrc中添加:
    colorscheme desert
    
  1. 代码折叠 (Folding)
  • 你可以根据语法自动折叠代码块。例如,对于C语言,可以开启语法折叠:
    set foldmethod=syntax
    
    然后使用zozc在代码块之间展开和折叠。

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

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

相关文章

音乐:触动心灵的艺术语言

Enjoy your music 音 乐 作为一种跨越时空和文化的艺术形式&#xff0c;拥有着无穷的魅力和力量。 它不仅能够带给我们愉悦的听觉享受&#xff0c;还对我们的身心健康、认知发展和社会交往产生着深远的影响。 一、音乐的基本元素 音乐由多个基本元素构成&#xff0c;包括…

【CentOS7.6】yum 报错:Could not retrieve mirrorlist http://mirrorlist.centos.org

一、报错 1.报错内容如下 在使用 yum makecache 命令时报错&#xff0c;在 yum install -y xxx 的时候报错等等 [roothcss-ecs-a901 yum.repos.d]# yum makecache Loaded plugins: fastestmirror Determining fastest mirrors Could not retrieve mirrorlist http://mirrorl…

Linux 常见的几种编辑器的操作步骤

在大多数命令行文本编辑器中&#xff0c;保存并关闭文件的操作方式基本相似。以下是常见的几种编辑器的操作步骤&#xff1a; 使用 vi 编辑器保存并关闭文件 编辑文件&#xff1a; sudo vi /path/to/file 编辑内容&#xff1a; 按 i 进入插入模式&#xff0c;编辑文件内容。 …

Go 语言条件语句

Go 语言条件语句 在编程语言中&#xff0c;条件语句用于根据特定条件执行不同的代码路径。Go 语言提供了几种条件语句&#xff0c;包括 if、switch 和 select。这些语句使得程序可以根据不同的条件执行不同的操作&#xff0c;从而实现程序的逻辑分支。 1. if 语句 if 语句是…

【web APIs】快速上手Day03

目录 Web APIs - 第3天全选文本框案例事件流事件捕获事件冒泡阻止冒泡解绑事件on事件方式解绑addEventListener方式解绑 注意事项-鼠标经过事件的区别两种注册事件的区别 事件委托综合案例-tab栏切换改造 其他事件页面加载事件元素滚动事件页面滚动事件-获取位置页面滚动事件-滚…

巴西东南湾乌巴图巴 ANTARES 监测站数据

ANTARES monitoring station in Ubatuba, Southeast Brazilian Bight 巴西东南湾乌巴图巴 ANTARES 监测站 简介 ANTARES 区域网络由分布在拉丁美洲的沿岸时间序列站组成。主要目的是研究气候和人为影响引起的长期变化&#xff0c;以及用于卫星匹配和算法开发的海洋颜色。Uba…

SoftCLT: 时间序列的软对比学习《Soft Contrastive Learning for Time Series》(时间序列、时序分类任务、软...

2024年6月25日&#xff0c;10:11&#xff0c;好几天没看论文了&#xff0c;一直在摸鱼写代码(虽然也没学会多少)&#xff0c;今天看一篇师兄推荐的。 论文&#xff1a; Soft Contrastive Learning for Time Series 或者是&#xff1a; Soft Contrastive Learning for Time Seri…

[C++][设计模式][组合模式]详细讲解

目录 1.动机(Motivation)2.模式定义3.要点总结4.代码感受 1.动机(Motivation) 软件在某些情况下&#xff0c;客户代码过多地依赖于对象容器复杂的内部实现结构&#xff0c;对象容器内部实现结构(而非抽象结构)的变化引起客户代码的频繁变化&#xff0c;带来了代码的维护性、扩…

【Android面试八股文】什么是ANR?如何分析和定位ANR?如何避免ANR?

文章目录 一、ANR概述二、触发ANR的主要场景三、Android四大组件中的潜在的ANR风险五、避免ANR的实践建议六、ANR的产生原因与出现的场景6.1 原因:6.2 出现场景:七、ANR的定位与分析7.1. ANR分析思路——traces7.2 ANR其他分析思路与相关日志7.2.1 分析logcat思路7.2.2 分析k…

解释Java中的Java IO流模型。

Java IO流模型是Java中用于处理输入和输出的基础模型。它通过一组类和接口来实现文件、网络和其他I/O设备的读写操作。Java IO流模型主要包括以下几个部分&#xff1a; 1. **InputStream和OutputStream**&#xff1a;这些类是Java IO的核心&#xff0c;它们提供了一种抽象的方…

如何避免爬取网站时IP被封?

互联网协议 (IP) 地址是识别网络抓取工具的最常见方式。IP 是每个互联网交换的核心&#xff0c;对其进行跟踪和分析可以了解很多有关连接客户端的信息。 在网络抓取中&#xff0c;IP 跟踪和分析&#xff08;又名指纹&#xff09;通常用于限制和阻止网络抓取程序或其他不需要的访…

计算两个经纬度之间的球面距离(基于Mysql和PHP实现)

计算两个经纬度之间的球面距离 1、MySQL实现方式 - 基于空间函数(ST_Distance_Sphere)实现 前置条件&#xff1a;确保您使用的是 MySQL 8.0 或更高版本&#xff0c;因为较早的版本对地理空间的支持有限。 1.1 创建表和索引 说明&#xff1a;设置 location 为 point 类型 #…

hive乱码问题完全解决方案

修改数据库编码集 SET GLOBAL character_set_client utf8; SET GLOBAL character_set_connection utf8; SET GLOBAL character_set_database utf8; SET GLOBAL character_set_results utf8; SET GLOBAL character_set_server utf8; show variables like ‘character_set%…

c++ set和unordered_set区别

一.set介绍 C 中的 set 容器是一种关联容器&#xff0c;用于存储唯一的元素&#xff0c;并能够根据特定的顺序对元素进行排列。在这里&#xff0c;我们将对 set 容器进行详细的分析。 概述 set 容器是 C标准库中的一个部分&#xff0c;位于 头文件中。它是一个关联容器&…

基于Java的智能城市解决方案

基于Java的智能城市解决方案 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们将探讨基于Java的智能城市解决方案&#xff0c;探索如何利用现代技术构建智…

【Python数据分析及环境搭建】:教程详解1(第23天)

系列文章目录 Python进行数据分析的优势常用Python数据分析开源库介绍启动Jupyter服务Jupyter Notebook的使用 文章目录 系列文章目录前言学习目标1. Python进行数据分析的优势2. 常用Python数据分析开源库介绍2.1 NumPy2.2 Pandas2.3 Matplotlib2.4 Seaborn2.5 Sklearn2.6 Ju…

[AHK V2]鼠标悬停展开窗口,鼠标离开折叠窗口

演示鼠标悬停窗口标题栏则展开窗口&#xff0c;鼠标离开窗口标题栏则折叠窗口。 ;作者&#xff1a;sunwind ;日期&#xff1a;2024年6月30日11:36:08 ;脚本&#xff1a;演示鼠标悬停窗口标题栏则展开窗口&#xff0c;鼠标离开窗口标题栏则折叠窗口。 MyGui : Gui() mytext:MyG…

第一 二章 小车硬件介绍-(全网最详细)基于STM32智能小车-蓝牙遥控、避障、循迹、跟随、PID速度控制、视觉循迹、openmv与STM32通信、openmv图像处理、smt32f103c8t6

第一篇-STM32智能小车硬件介绍 后续章节也放这里 持续更新中&#xff0c;视频发布在小B站 里面。这边也会更新。 B站视频合集: STM32智能小车V3-STM32入门教程-openmv与STM32循迹小车-stm32f103c8t6-电赛 嵌入式学习 PID控制算法 编码器电机 跟随 小B站链接:https://www.bilib…

启航IT世界:高考后假期的科技探索之旅

随着高考的落幕&#xff0c;新世界的大门已经为你们敞开。这个假期&#xff0c;不仅是放松身心的时光&#xff0c;更是为即将到来的IT学习之旅打下坚实基础的黄金时期。以下是一份专为你们准备的IT专业入门预习指南&#xff0c;希望能助你们一臂之力。 一&#xff1a;筑基篇&a…

STM32F407ZGT6驱动TFT屏ILI9341(硬件SPI)

硬件连接 我购买的是ili9341,2.8inch&#xff0c;带触摸 开发板是野火stm32f407霸天虎 LCD模块STM32单片机VCCDC5V/3.3VGNDGNDSDI(MOSI)PB5SDO(MISO)PB4LEDPB13SCKPB3DC/RSPB14RSTPB12CSPB15触摸连接T_IRQPB1T_DOPB2T_DINPF11T_CSPC5T_CLKPB0 初始化 本次使用的是硬件SPI1&…