当前位置: 首页 > news >正文

Linux Vim教程(十):自定义配置与插件管理

目录

1. 概述

2. Vim 配置文件

2.1 .vimrc 文件

2.2 .gvimrc 文件

3. 自定义配置

3.1 自定义快捷键

3.2 自动命令

3.3 函数定义

4. 插件管理

4.1 插件管理工具

4.1.1 安装 vim-plug

4.1.2 配置 vim-plug

4.1.3 安装插件

4.2 常用插件

4.2.1 NERDTree

4.2.2 Fzf

4.2.3 Lightline

5. 高级使用技巧

5.1 寄存器与宏录制

5.1.1 使用寄存器

5.1.2 录制宏

5.2 寄存器与剪切板的综合使用

5.3 实用技巧

5.3.1 快速移动光标

5.3.2 批量编辑

6. 结论


Vim 是一个强大且灵活的文本编辑器,广泛用于编写和编辑代码。其强大的自定义功能和插件生态系统使其成为开发者的最爱。在本文中,我们将深入探讨如何通过自定义配置和插件管理来优化 Vim,使其更加适应个人的开发需求和习惯。

1. 概述

Vim 的灵活性不仅体现在其基本功能上,还体现在其高度可定制化的配置和丰富的插件支持上。通过合理的配置和插件管理,开发者可以大幅提高工作效率,简化操作,提升使用体验。本文将介绍 Vim 的自定义配置方法,以及常用插件的安装和管理技巧。

2. Vim 配置文件

Vim 的配置文件主要包括 vimrc 文件和 gvimrc 文件。vimrc 文件用于配置 Vim 的一般设置,而 gvimrc 文件则用于配置 GVim 的图形界面设置。

2.1 .vimrc 文件

.vimrc 文件是 Vim 的主配置文件,通常位于用户的主目录中。通过编辑该文件,可以设置 Vim 的各种行为和选项。

" 基本配置示例
set number              " 显示行号
set relativenumber      " 显示相对行号
set tabstop=4           " 设置 tab 宽度为 4
set shiftwidth=4        " 设置缩进宽度为 4
set expandtab           " 将 tab 替换为空格
set autoindent          " 自动缩进
set smartindent         " 智能缩进
set cursorline          " 高亮当前行
set showcmd             " 显示命令
set showmode            " 显示模式
set incsearch           " 增量搜索
set hlsearch            " 高亮搜索结果
syntax on               " 启用语法高亮
filetype plugin indent on " 启用文件类型插件和自动缩进

2.2 .gvimrc 文件

.gvimrc 文件用于配置 GVim 的图形界面设置。GVim 是 Vim 的图形化版本,提供了更多的界面功能。

" 基本配置示例
set guifont=Monaco:h12  " 设置字体
set guioptions-=T       " 隐藏工具栏
set guioptions-=m       " 隐藏菜单栏
set lines=40            " 设置窗口高度
set columns=80          " 设置窗口宽度

3. 自定义配置

Vim 的自定义配置不仅限于基本的编辑器设置,还可以通过编写 Vim 脚本来自定义各种功能。

3.1 自定义快捷键

通过设置自定义快捷键,可以简化常用操作,提高编辑效率。

" 自定义快捷键示例
nnoremap <C-s> :w<CR>   " Ctrl+s 保存文件
nnoremap <C-q> :q<CR>   " Ctrl+q 退出 Vim
vnoremap <C-c> "+y      " Ctrl+c 复制到系统剪贴板
nnoremap <C-v> "+p      " Ctrl+v 从系统剪贴板粘贴

3.2 自动命令

自动命令(autocommand)用于在特定事件发生时执行特定命令。

" 自动命令示例
autocmd BufNewFile,BufRead *.py setlocal tabstop=4 shiftwidth=4 expandtab " 针对 Python 文件设置缩进
autocmd BufWritePre * :%s/\s\+$//e   " 保存文件前删除行尾空白
autocmd BufEnter * if &buftype == 'terminal' | :startinsert | endif " 进入终端缓冲区时自动进入插入模式

3.3 函数定义

通过定义函数,可以实现复杂的自定义操作。

" 函数定义示例
function! ToggleNumber()if &numberset nonumberelseset numberendif
endfunctionnnoremap <F3> :call ToggleNumber()<CR> " F3 切换行号显示

4. 插件管理

Vim 拥有一个丰富的插件生态系统,通过安装和管理插件,可以大幅扩展 Vim 的功能。

4.1 插件管理工具

常用的 Vim 插件管理工具包括 Vundle、Pathogen 和 vim-plug。本文以 vim-plug 为例,介绍插件的安装和管理。

4.1.1 安装 vim-plug

首先,下载并安装 vim-plug:

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

4.1.2 配置 vim-plug

.vimrc 文件中配置 vim-plug:

call plug#begin('~/.vim/plugged')" 插件列表
Plug 'tpope/vim-sensible'        " 常用配置
Plug 'scrooloose/nerdtree'       " 文件浏览器
Plug 'junegunn/fzf', { 'do': { -> fzf#install() } } " 模糊查找
Plug 'airblade/vim-gitgutter'    " Git 更改显示
Plug 'itchyny/lightline.vim'     " 状态栏
Plug 'junegunn/goyo.vim'         " 专注模式call plug#end()

4.1.3 安装插件

在 Vim 中运行 :PlugInstall 安装插件:

:PlugInstall

4.2 常用插件

4.2.1 NERDTree

NERDTree 是一个流行的文件浏览器插件,可以方便地浏览和管理项目文件。

" NERDTree 配置示例
nnoremap <C-n> :NERDTreeToggle<CR> " Ctrl+n 切换 NERDTree
let NERDTreeShowHidden=1           " 显示隐藏文件

4.2.2 Fzf

Fzf 是一个强大的模糊查找工具,可以快速查找文件和文本。

" Fzf 配置示例
nnoremap <C-p> :Files<CR>   " Ctrl+p 启动文件查找
nnoremap <C-g> :GFiles<CR>  " Ctrl+g 启动 Git 文件查找
nnoremap <C-b> :Buffers<CR> " Ctrl+b 启动缓冲区查找

4.2.3 Lightline

Lightline 是一个轻量级的状态栏插件,可以美化 Vim 的状态栏。

" Lightline 配置示例
let g:lightline = {\ 'colorscheme': 'wombat',\ 'active': {\   'left': [ [ 'mode', 'paste' ],\             [ 'readonly', 'filename', 'modified' ] ]\ },\ 'component_function': {\   'filename': 'LightlineFilename'\ }\ }function! LightlineFilename()return expand('%:t') . ( &modified ? '[+]' : '' )
endfunction

5. 高级使用技巧

5.1 寄存器与宏录制

寄存器和宏录制是 Vim 的高级功能,可以显著提高编辑效率。

5.1.1 使用寄存器

Vim 的寄存器用于临时存储和检索文本。可以使用 " 访问寄存器。

" 复制到寄存器 a
"ayy" 从寄存器 a 粘贴
"ap

5.1.2 录制宏

宏用于录制和重复执行一系列命令。使用 q 开始录制,q 结束录制。

" 录制宏到寄存器 a
qa
iHello, World!<Esc>
q" 执行宏
@a" 重复执行宏
@@

5.2 寄存器与剪切板的综合使用

Vim 可以与系统剪切板集成,方便地复制和粘贴文本。

" 复制到系统剪切板
"+y" 从系统剪切板粘贴
"+p

5.3 实用技巧

以下是一些实用的 Vim 技巧,可以进一步提升编辑效率。

5.3.1 快速移动光标

" 移动到文件开头
gg" 移动到文件结尾
G" 移动到行首
^" 移动到行尾
$

5.3.2 批量编辑

" 替换当前行的 foo 为 bar
:s/foo/bar/g" 替换整个文件的 foo 为 bar
:%s/foo/bar/g" 批量缩进
>G

6. 结论

通过合理地自定义配置和管理插件,Vim 可以成为一个强大、高效的文本编辑器。无论是基础设置、快捷键、自定义命令,还是高级功能如寄存器和宏录制,Vim 都提供了丰富的工具和方法来满足不同的编辑需求。希望本文能帮助开发者更好地利用 Vim 提高工作效率,享受编程的乐趣。

相关文章:

Linux Vim教程(十):自定义配置与插件管理

目录 1. 概述 2. Vim 配置文件 2.1 .vimrc 文件 2.2 .gvimrc 文件 3. 自定义配置 3.1 自定义快捷键 3.2 自动命令 3.3 函数定义 4. 插件管理 4.1 插件管理工具 4.1.1 安装 vim-plug 4.1.2 配置 vim-plug 4.1.3 安装插件 4.2 常用插件 4.2.1 NERDTree 4.2.2 Fzf…...

代理协议解析:如何根据需求选择HTTP、HTTPS或SOCKS5?

代理IP协议是一种网络代理技术&#xff0c;可以实现隐藏客户端IP地址、加速网站访问、过滤网络内容、访问内网资源等功能。常用的IP代理协议主要有Socks5代理、HTTP代理、HTTPS代理这三种。代理IP协议主要用于分组交换计算机通信网络的互联系统中使用&#xff0c;只负责数据的路…...

Verilog语言和C语言的本质区别是什么?

在开始前刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「C语言的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01; 用老石的一句话其实很好说…...

Delphi5实现鱼C屏幕保护程序

效果图 鱼C屏幕保护程序 添加背景图片 在additional添加image组件&#xff0c;修改picture属性上传图片。 这个图片可以截屏桌面&#xff0c;方便后面满屏不留白操作。实现无边框 即上面的“- □ ”不显示 将Form1的borderstyle属性改为bsnone实现最大化&#xff0c;满屏 将…...

【计算机毕业设计】844学籍管理系统

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…...

Java之开发 系统设计 分布式 高性能 高可用

1、restful api 基于rest构建的api 规范&#xff1a; post delete put get 增删改查路径 接口命名 过滤信息状态码 2、软件开发流程 3、命名规范 类名&#xff1a;大驼峰方法名&#xff1a;小驼峰成员变量、局部变量&#xff1a;小驼峰测试方法名&#xff1a;蛇形命名 下划…...

java连接redis和基础操作命令

引入依赖 <!--引入java连接redis的驱动--><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>4.3.1</version></dependency> 单机模式连接redis main(){ //连接redis的信息 默认连接…...

土耳其云手机提升TikTok电商效率

在数字化飞速发展的今天&#xff0c;TikTok不仅是一个社交平台&#xff0c;更是一个巨大的电商市场。随着TikTok电商功能在全球范围内的扩展&#xff0c;土耳其的商家和内容创作者正面临着前所未有的机遇。本文将详细介绍土耳其云手机怎样帮助商家抓住机遇&#xff0c;实现业务…...

《Utilizing Ensemble Learning for Detecting Multi-Modal Fake News》

系列论文研读目录 文章目录 系列论文研读目录论文题目含义ABSTRACTINDEX TERMSI. INTRODUCTIONII. RELATED WORKA. FAKE NEWS CLASSIFICATION APPROACHES FOR SINGLE-MODALITY 单模态虚假新闻分类方法1) SINGLE-MODALITY BASED CLASSIFICATION APPROACHES USING TEXTUAL FEATUR…...

Oracle集群RAC磁盘管理命令asmcmd的使用

文章目录 ASM磁盘共享简介ASM磁盘共享的优势ASM磁盘组成ASM磁盘共享的应用场景Asmcmd简介Asmcmd的功能Asmcmd的命令Asmcmd的使用注意事项Asmcmd运行模式交互模式运行非交互模式运行ASMCMD命令分类实例管理命令:文件管理命令:磁盘组管理命令:模板管理命令:文件访问管理命令:…...

vscode插件开发笔记——大模型应用之AI编程助手

系列文章目录 文章目录 系列文章目录前言一、代码补全 前言 最近在开发vscode插件相关的项目&#xff0c;网上很少有关于大模型作为AI 编程助手这方面的教程。因此&#xff0c;借此机会把最近写的几个demo分享记录一下。 一、代码补全 思路&#xff1a; 读取vscode插件上鼠…...

@JSONField(format = “yyyyMMddHH“)的作用和使用

JySellerItqrdDataDO对象中的字段为&#xff1a; private Date crdat; 2.数据库中的相应字段为&#xff1a; crdat datetime DEFAULT NULL COMMENT 创建时间,2. 打印出的结果为&#xff1a; “crdat”:“2024072718” 年月日时分秒 3. 可以调整format的格式 4. 这样就把Date类…...

计算机网络 6.1Internet概念

第六章 Internet基础 第一节 Internet概念 一、认识Internet 1.定义&#xff1a;集现代计算机技术、通信技术于一体的全球性计算机互联网。 2.地位&#xff1a;当今世界上规模最大的计算机互联网。 3.使用协议&#xff1a;TCP/IP。 4.基本结构&#xff1a; ​ ①主干网…...

编写SpringBoot的自定义starter包

starter项目 先来看一下Starter的官方解释&#xff1a; Spring Boot Starter 是一种方便的依赖管理方式&#xff0c;它封装了特定功能或技术栈的所有必要依赖项和配置&#xff0c;使得开发者可以快速地将这些功能集成到Spring Boot项目中。Spring Boot官方提供了一系列的Star…...

【LeetCode:3106. 满足距离约束且字典序最小的字符串 + 贪心】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…...

25 Python常用函数——reduce()

在 Python 3.x 中&#xff0c;reduce() 不是内置函数&#xff0c;而是放到了标准库 functools 中&#xff0c;需要先导入再使用。 标准库 functools 中的函数 reduce() 可以将一个接受两个参数的函数以迭代累积的方式从左到右依次作用到一个序列或迭代器对象的所有元素上&#…...

oracle登录报“ORA-27101: shared memory realm does not exist”

oracle登录报“ORA-27101: shared memory realm does not exist” 问题&#xff1a; 1、使用ip:1521/服务名方式连库报错" ORA-27101: shared memory realm does not exist Linux-x86_64 Error: 2: No such file or directory" 2、sqlplus XX/密码 可以登录数据库 …...

界面控件Telerik UI for WPF 2024 Q2亮点 - 全新的AIPrompt组件

Telerik UI for WPF拥有超过100个控件来创建美观、高性能的桌面应用程序&#xff0c;同时还能快速构建企业级办公WPF应用程序。UI for WPF支持MVVM、触摸等&#xff0c;创建的应用程序可靠且结构良好&#xff0c;非常容易维护&#xff0c;其直观的API将无缝地集成Visual Studio…...

IT服务运营过程中的资源要素管理(至简)

在IT服务运营管理过程中&#xff0c;所有资源要投入正式、连续、稳定运行&#xff0c;要保持规范化的管理和标准化的操作&#xff0c;具体包括工具管理、知识管理、服务台管理与评价、备件库管理等内容。 一、工具管理 1、工具的基本运营。见下表&#xff1a; 工具的基本运营…...

wodpress设置固定链接的方式和好处【SEO优化】

设置固定链接的好处 提高用户体验&#xff1a;固定链接使得网址更加直观和易于记忆&#xff0c;用户可以更容易地分享和访问文章。 优化SEO&#xff1a;搜索引擎更倾向于索引具有清晰结构的网址&#xff0c;固定链接有助于提高网站的SEO表现。 避免URL重复&#xff1a;固定链…...

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...

家政维修平台实战20:权限设计

目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系&#xff0c;主要是分成几个表&#xff0c;用户表我们是记录用户的基础信息&#xff0c;包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题&#xff0c;不同的角色&#xf…...

基于TurtleBot3在Gazebo地图实现机器人远程控制

1. TurtleBot3环境配置 # 下载TurtleBot3核心包 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git git clone -b noetic https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b noetic-dev…...

七、数据库的完整性

七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...

MySQL 8.0 事务全面讲解

以下是一个结合两次回答的 MySQL 8.0 事务全面讲解&#xff0c;涵盖了事务的核心概念、操作示例、失败回滚、隔离级别、事务性 DDL 和 XA 事务等内容&#xff0c;并修正了查看隔离级别的命令。 MySQL 8.0 事务全面讲解 一、事务的核心概念&#xff08;ACID&#xff09; 事务是…...

nnUNet V2修改网络——暴力替换网络为UNet++

更换前,要用nnUNet V2跑通所用数据集,证明nnUNet V2、数据集、运行环境等没有问题 阅读nnU-Net V2 的 U-Net结构,初步了解要修改的网络,知己知彼,修改起来才能游刃有余。 U-Net存在两个局限,一是网络的最佳深度因应用场景而异,这取决于任务的难度和可用于训练的标注数…...

Android写一个捕获全局异常的工具类

项目开发和实际运行过程中难免会遇到异常发生&#xff0c;系统提供了一个可以捕获全局异常的工具Uncaughtexceptionhandler&#xff0c;它是Thread的子类&#xff08;就是package java.lang;里线程的Thread&#xff09;。本文将利用它将设备信息、报错信息以及错误的发生时间都…...

【汇编逆向系列】六、函数调用包含多个参数之多个整型-参数压栈顺序,rcx,rdx,r8,r9寄存器

从本章节开始&#xff0c;进入到函数有多个参数的情况&#xff0c;前面几个章节中介绍了整型和浮点型使用了不同的寄存器在进行函数传参&#xff0c;ECX是整型的第一个参数的寄存器&#xff0c;那么多个参数的情况下函数如何传参&#xff0c;下面展开介绍参数为整型时候的几种情…...

Python爬虫(52)Scrapy-Redis分布式爬虫架构实战:IP代理池深度集成与跨地域数据采集

目录 一、引言&#xff1a;当爬虫遭遇"地域封锁"二、背景解析&#xff1a;分布式爬虫的两大技术挑战1. 传统Scrapy架构的局限性2. 地域限制的三种典型表现 三、架构设计&#xff1a;Scrapy-Redis 代理池的协同机制1. 分布式架构拓扑图2. 核心组件协同流程 四、技术实…...

python学习day39

图像数据与显存 知识点回顾 1.图像数据的格式&#xff1a;灰度和彩色数据 2.模型的定义 3.显存占用的4种地方 a.模型参数梯度参数 b.优化器参数 c.数据批量所占显存 d.神经元输出中间状态 4.batchisize和训练的关系 import torch import torchvision import torch.nn as nn imp…...