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

⚡ Linux 系统安装与配置 Vim 编辑器(包括 Vim 插件管理器)

⚡ Linux 系统安装与配置 Vim 编辑器(包括 Vim 插件管理器)


📌 1. Vim 简介

Vim(Vi IMproved)是一款高度可定制的文本编辑器,基于早期的 vi 编辑器扩展而来。

它支持语法高亮、插件扩展、多种编程语言,是程序员常用的轻量级开发工具。

虽然配置和操作相对复杂,学习周期相对较长,但是熟练使用的效率可以碾压大多数非AI编辑器。


⚙️ 2. Vim 功能检查

🖥️ 确认 Vim 的版本和功能

一般 Linux 系统都会预装 Vim ,按下 Alt + Ctrl + T 打开终端输入 vim --version 确认版本和功能:

VIM - Vi IMproved 9.0 (2022 Jun 28, 编译于 Feb  16 2025 05:12:41)
包含补丁:1-1378, 1499, 1532, 1848, 1858, 1873, 1969, 2142
修改者 team+vim@tracker.debian.org
编译者 team+vim@tracker.debian.org
巨型版本 无图形界面。 可使用(+)与不可使用(-)的功能:
+acl               +file_in_path      +mouse_urxvt       -tag_any_white
+arabic            +find_in_path      +mouse_xterm       -tcl
+autocmd           +float             +multi_byte        +termguicolors
+autochdir         +folding           +multi_lang        +terminal
-autoservername    -footer            -mzscheme          +terminfo
-balloon_eval      +fork()            +netbeans_intg     +termresponse
+balloon_eval_term -gettext           +num64             +textobjects
-browse            -hangul_input      +packages          +textprop
++builtin_terms    +iconv             +path_extra        +timers
+byte_offset       +insert_expand     -perl              +title
+channel           +ipv6              +persistent_undo   -toolbar
+cindent           +job               +popupwin          +user_commands
-clientserver      +jumplist          +postscript        +vartabs
-clipboard         +keymap            +printer           +vertsplit
+cmdline_compl     +lambda            +profile           +vim9script
+cmdline_hist      +langmap           -python            +viminfo
+cmdline_info      +libcall           -python3           +virtualedit
+comments          +linebreak         +quickfix          +visual
+conceal           +lispindent        +reltime           +visualextra
+cryptv            +listcmds          +rightleft         +vreplace
+cscope            +localmap          -ruby              +wildignore
+cursorbind        -lua               +scrollbind        +wildmenu
+cursorshape       +menu              +signs             +windows
+dialog_con        +mksession         +smartindent       +writebackup
+diff              +modify_fname      -sodium            -X11
+digraphs          +mouse             -sound             +xattr
-dnd               -mouseshape        +spell             -xfontset
-ebcdic            +mouse_dec         +startuptime       -xim
+emacs_tags        -mouse_gpm         +statusline        -xpm
+eval              -mouse_jsbterm     -sun_workshop      -xsmp
+ex_extra          +mouse_netterm     +syntax            -xterm_clipboard
+extra_search      +mouse_sgr         +tag_binary        -xterm_save
-farsi             -mouse_sysmouse    -tag_old_static    

这些信息里面需要注意的基本功能有:
+syntax: 支持语法高亮的功能。
+persistent_undo: 支持持久撤销的功能。
+virtualedit: 支持虚拟编辑的功能,Vim 的块可视模式需要此功能的协助
+tag_binary: 支持 ctags 标签跳转的功能
+cscope: 支持 cscope 代码导航的功能
+python3: 支持 python3 的功能

除此之外还需要注意的插件依赖功能有:
+signs: 支持标记列功能,vim-airline 插件依赖此功能。
+statusline: 支持状态栏的功能,vim-airline 插件依赖此功能。
+job: 支持异步任务的功能,vim-airline 插件依赖此功能。
+timers: 支持异步任务的功能,vim-airline 插件依赖此功能。
+autocmd: 支持自动命令的功能,NERDTree 插件依赖此功能。
+windows: 支持多窗口操作的功能,NERDTree 插件依赖此功能。

💡 这里提一下 +clipboard+X11 ,这两个是支持 Vim 的原生剪切板操作的功能,同时开启可以通过 "+y"+p 来实现和系统剪切板的交互,Vim 中默认不带,需要编译添加
如果不是系统资源非常紧张的情况下,一般都会无视这两个功能,通过配置 xclip 快捷键映射来实现 Vim 和系统剪切板的交互功能。

🛠️ 功能缺失简单修复

一般来说正常的 Vim 都会包含上述提到的基本功能和插件依赖功能,如果没有可以先尝试简单修复

打开终端依次执行以下命令:

sudo apt update
sudo apt install vim-nox

这两行命令可以解决大多数功能缺失的问题。
但如果命令执行完成,再次通过 vim --version 确认 Vim 的功能还是没有,那就需要自行编译 Vim 来添加功能了

📦 Vim 编译

一般只有在碰到以下情形时,需要自行编译 Vim:

  • Linux 包管理工具缺失或故障导致无法更新或安装 Vim (Windows的WSL1系统)
  • 需要自定义添加或裁剪 Vim 功能
  • 需要 Vim 在特殊的运行环境上工作(交叉编译)

Vim 的编译相对比较复杂,首先要安装依赖工具和库:

sudo apt update
sudo apt install -y git build-essential ncurses-dev python3-dev lua5.3 liblua5.3-dev \
libperl-dev libncurses5-dev libgtk2.0-dev libatk1.0-dev libcairo2-dev libx11-dev libxpm-dev libxt-dev

💡 这里的 sudo apt install 可以根据自己实际需要用到的功能,删减不需要使用的软件包(比如不用 lua 就可以把 lua5.3 和 liblua5.3-dev 去掉)

然后需要用 git 下载源码:

git clone https://github.com/vim/im.git
cd vim

进入 Vim 目录以后创建一个 bash 脚本 configure_vim.sh 用于配置构建参数:

#!/bin/bashPREFIX="/usr/local"PYTHON3=$(which python3)./configure \--prefix=$PREFIX \--with-features=huge \--enable-multibyte \--enable-python3interp=yes \--with-python3-command=$PYTHON3 \--enable-perlinterp=yes \--enable-luainterp=yes \--enable-rubyinterp=yes \--enable-cscope \--enable-terminal \--without-x \--disable-gui \--disable-nls \--with-tlib=ncurses

说明:
--prefix=$PREFIX: 指定 Vim 的安装路径。
--with-features=huge: 开启所有可用特性,包括语法高亮、折叠、插件等。
--enable-multibyte: 支持多字节字符集(如中文、日文、韩文)。
--enable-python3interp=yes: 启用 Python3 插件接口支持。
--with-python3-command=$PYTHON3: 指定 Python3 可执行文件路径。
--enable-perlinterp=yes: 启用 Perl 插件接口。
--enable-luainterp=yes: 启用 Lua 插件接口。
--enable-rubyinterp=yes: 启用 Ruby 插件接口。
--enable-cscope: 启用 Cscope 支持。
--enable-terminal: 启用内置终端功能(:terminal 命令)。
--without-x: 不使用 X11 图形库,防止误编译出 GUI 版本。
--disable-gui: 显式关闭 gVim 图形界面,仅编译纯终端 Vim。
--disable-nls: 禁用 Native Language Support,不使用本地化语言翻译,节省体积。
--with-tlib=ncurses: 指定终端库为 ncurses,它控制终端行为(颜色、键盘输入等)。

💡 这里 .configure 的参数也可以根据自己实际需要添加或删减。如果时交叉编译的话这里要添加交叉编译器

保存退出后给脚本赋予可执行权限,然后执行脚本:

chmod +x configure_vim.sh
./configure_vim.sh

完成配置构建参数以后执行 make 命令编译并安装 Vim :

make -j4
sudo make install

编译完成后的 Vim 在 /usr/local/bin 目录下,而系统默认调用的 Vim 一般位于 /usr/bin 目录下,所以只要覆盖掉 /usr/bin 目录下的软连接即可:

sudo mv /usr/bin/vim /usr/bin/vim.bac
sudo ln -s /usr/local/bin/vim /usr/bin/vim

💡 这里如果是交叉编译的话直接拷贝到目标运行环境的相应位置即可

最后执行再次确认 Vim 的版本和功能:

vim --version

🧾 3. Vim 配置文件

📕 .vimrc 配置文件

.vimrc 是 Vim 的主配置文件,在启动时自动加载。用于设置编辑器行为,比如缩进规则、颜色方案、快捷键等。如果系统默认没有可以手动创建。

这里就先简单配置一下

set encoding=utf-8
syntax on
set number
set relativenumber
vnoremap <C-c> y:call system('xclip -selection clipboard', @")<CR>
nnoremap <C-c> :call setline(line('.'), getline('.') . system('xclip -o -selection clipboard'))<CR><CR>

说明:

  • set encoding=utf-8:设置 Vim 使用 UTF-8 编码,支持多语言文本文件的读取与编辑。
  • syntax on:启用语法高亮,根据不同文件类型进行高亮显示。
  • set number:在编辑器左侧显示实际的行号,便于定位代码位置。
  • set relativenumber:显示相对行号。当前行显示为 0,其他行为相对于当前行的偏移。这有助于使用 j, k, d, y 等命令快速操作多行。
  • vnoremap y:call system(‘xclip -selection clipboard’, @"): xclip 复制的快捷键映射,在 Vim 可视模式下按下 Ctrl + C 即可将所选内容复制到系统剪切板
  • nnoremap :call setline(line(‘.’), getline(‘.’) . system(‘xclip -o -selection clipboard’)): xclip 粘贴的快捷键映射,在 Vim 普通模式下按下 Ctrl + V 即可在光标后面粘贴系统剪切板中的内容

💡 这里的配置已经能够满足基本的编辑器需求了,如果希望有更多功能的进阶配置,详见 Vim 配置文件 vimrc 详解

📘 .viminfo 配置文件

.viminfo 是 Vim 自动生成的状态记录文件。用于保存命令历史、寄存器内容、光标位置等信息。可帮助 Vim 在下次启动时恢复上一次的使用状态。一般不用去管。

📗 .vim目录

.vim 目录是 Vim 的用户配置目录。用于存放插件、主题、语法规则等扩展文件。相当于 Vim 的“工作文件夹”,结构灵活且常与插件管理器配合使用。一般都是插件自动管理。

💡 有时候网络波动插件无法安装,也可以直接把已经装了插件的.vim目录中相应内容复制到没装插件的.vim目录中,以此来实现“手动 ”安装


🧶 4. Vim 插件配置

🔧 安装 vim-plug 插件管理器

执行以下命令安装vim-plug

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

💡 有时候网络波动下载不了可以直接登录网址复制粘贴全部内容到 ~/.vim/autoload/plug.vim

✒️ 安装 Vim 插件

编辑 ~/.vimrc 添加插件配置,这里添加了三款经典的作为示例:

call plug#begin('~/.vim/plugged')Plug 'preservim/nerdtree'               
Plug 'vim-airline/vim-airline'          
Plug 'luochen1990/rainbow'              call plug#end()

保存退出后重新打开 Vim ,在 Vim 中执行以下命令完成插件安装

:PlugInstall

⚠️ 插件安装需要有 git 支持,Linux 系统如何安装和配置 git 详见Linux 系统安装与配置 Git


⚠️ 5. 注意事项

  • 🧩 插件太多可能影响启动速度,建议按需添加。
  • 💼 如果是编译了 Vim 并替换掉了旧版本的 Vim ,插件管理器可能识别不到旧的目录,需要重新执行 :PlugInstall 安装插件

📚 参考资料

  • vim 官网
  • vim-plug

相关文章:

⚡ Linux 系统安装与配置 Vim 编辑器(包括 Vim 插件管理器)

⚡ Linux 系统安装与配置 Vim 编辑器&#xff08;包括 Vim 插件管理器&#xff09; &#x1f4cc; 1. Vim 简介 Vim&#xff08;Vi IMproved&#xff09;是一款高度可定制的文本编辑器&#xff0c;基于早期的 vi 编辑器扩展而来。 它支持语法高亮、插件扩展、多种编程语言&am…...

小型语言模型:为何“小”才是“大”?

当说到人工智能&#xff08;AI&#xff09;的时候&#xff0c;大家通常会想到那些拥有数十亿参数的超大型语言模型&#xff0c;它们能做出一些令人惊叹的事情。 厉害不厉害&#xff1f;绝对厉害&#xff01; 但对于大多数企业和开发者来说&#xff0c;实用吗&#xff1f;可能…...

雪花算法:分布式ID生成的优雅解决方案

一、雪花算法的核心机制与设计思想 雪花算法&#xff08;Snowflake&#xff09;是由Twitter开源的分布式ID生成算法&#xff0c;它通过巧妙的位运算设计&#xff0c;能够在分布式系统中快速生成全局唯一且趋势递增的ID。 1. 基本结构 雪花算法生成的是一个64位&#xff08;lo…...

针对PostgreSQL中pg_wal目录占用过大的系统性解决方案

​一、问题现象与根本原因​ 当pg_wal目录占用超过预期&#xff08;如数十GB甚至占满磁盘&#xff09;&#xff0c;通常由以下原因导致 ​长事务未提交​&#xff1a;未完成的事务会阻塞WAL日志清理。​复制槽未释放​&#xff1a;逻辑复制或流复制槽未及时清理&#xff0c;导…...

git push Git远端意外挂断

git push Git远端意外挂断 枚举对象中: 99, 完成. 对象计数中: 100% (99/99), 完成. 使用 8 个线程进行压缩 压缩对象中: 100% (78/78), 完成. send-pack: unexpected disconnect while reading sideband packet 写入对象中: 100% (82/82), 2.78 MiB | 5.56 MiB/s, 完成. 总共…...

python学习day34

GPU训练及类的call方法 知识点回归&#xff1a; CPU性能的查看&#xff1a;看架构代际、核心数、线程数GPU性能的查看&#xff1a;看显存、看级别、看架构代际GPU训练的方法&#xff1a;数据和模型移动到GPU device上类的call方法&#xff1a;为什么定义前向传播时可以直接写作…...

秋招Day12 - 计算机网络 - 网络综合

从浏览器地址栏输入URL到显示网页的过程了解吗&#xff1f; 从在浏览器地址栏输入 URL 到显示网页的完整过程&#xff0c;并不是一个单一的数据包从头到尾、一次性地完成七层封装再七层解析的过程。 而是涉及到多次、针对不同目的、与不同服务器进行的、独立的网络通信交互&a…...

QT-JSON

#include <QJsonDocument>#include <QJsonObject>#include <QJsonArray>#include <QFile>#include <QDebug>void createJsonFile() {// 创建一个JSON对象 键值对QJsonObject jsonObj;jsonObj["name"] "John Doe";jsonObj[…...

IP 风险画像技术略解

IP 风险画像的技术定义与价值 IP 风险画像通过整合 IP 查询数据与 IP 离线库信息&#xff0c;结合机器学习算法&#xff0c;为每个 IP 地址生成多维度风险评估模型。其核心价值在于将传统的静态 IP 黑名单升级为动态风险评估体系&#xff0c;可实时识别新型网络威胁&#xff0…...

秋招Day12 - 计算机网络 - 基础

说一下计算机网络体系结构 OSI七层模型&#xff0c;TCP/IP四层模型和五层体系结构 说说OSI七层模型&#xff1f; 应用层&#xff1a;最靠近用户的层&#xff0c;用于处理特定应用程序的细节&#xff0c;提供了应用程序和网络服务之间的接口。表示层&#xff1a;确保从一个系…...

【网络安全】——Modbus协议详解:工业通信的“通用语言”

目录 一、初识Modbus&#xff1a;工业通信的基石 1.1 协议全称 1.2 协议简史 二、核心特性解析 2.1 架构设计 2.2 典型应用场景 三、协议族全景图 3.1 协议栈分类 3.2 版本演进对比 四、协议报文深度解析 4.1 Modbus RTU帧结构 4.2 Modbus TCP报文 五、通信机制实…...

MySQL 数据库备份与恢复利器:Percona XtraBackup 详解

一、XtraBackup 简介 1. 什么是 XtraBackup&#xff1f; XtraBackup 是 Percona 公司推出的免费开源工具&#xff0c;专为 InnoDB/XtraDB 引擎设计&#xff0c;支持 在线物理热备&#xff0c;具备以下核心特性&#xff1a; 非阻塞备份&#xff1a;备份过程中数据库仍可读写。…...

【GlobalMapper精品教程】095:如何获取无人机照片的拍摄方位角

文章目录 一、加载无人机照片二、计算方位角三、Globalmapper符号化显示方向四、arcgis符号化显示方向一、加载无人机照片 打开软件,加载无人机照片,在GLobalmapperV26中文版中,默认显示如下的航线信息。 关于航线的起止问题,可以直接从照片名称来确定。 二、计算方位角 …...

小提琴图绘制-Graph prism

在 GraphPad Prism 中为小提琴图添加显著性标记(如*P<0.05)的步骤如下: 步骤1:完成统计检验 选择数据表:确保数据已按分组排列(如A列=Group1,B列=Group2)。执行统计检验: 点击工具栏 Analyze → Column analyses → Mann-Whitney test(非参数检验,适用于非正态数…...

写作即是生活

一个问题 “我是什么时候开始写作的呢&#xff1f;”请你先暂停一下&#xff0c;别往下读&#xff0c;先想想这个问题。 什么才是写作&#xff1f; 或许在想上个问题之后&#xff0c;你就会开始想问另外一个问题&#xff0c;什么才算是写作呢&#xff1f; 我的回答是&#x…...

进阶知识:Selenium底层原理深度解析

Selenium底层原理深度解析&#xff1a;网络IO密集型系统揭秘 一、Selenium核心组件解析 1.1 三大核心角色 客户端&#xff08;Client&#xff09; 扮演"指挥官"角色&#xff0c;负责&#xff1a; 编写测试脚本&#xff08;模拟用户点击、输入等操作&#xff09;发送…...

基于 Flickr30k-Entities 数据集 的 Phrase Localization

以下示例基于 Flickr30k-Entities 数据集中的标注&#xff0c;以及近期&#xff08;以 TransVG &#xff08;Li et al. 2021&#xff09;为例&#xff09;在短语定位&#xff08;Phrase Grounding&#xff09;任务上的评测结果&#xff0c;展示了单张图片中若干名词短语的定位情…...

[GHCTF 2025]SQL???

打开题目在线环境&#xff1a; 先尝试注入&#xff1a; id1;show databases; 发现报错&#xff0c;后来看了wp才知道这个题目是SQLite注入。 我看的是这个师傅的wp: https://blog.csdn.net/2401_86190146/article/details/146164505?ops_request_misc%257B%2522request%255Fid…...

【科研绘图系列】R语言绘制GO term 富集分析图(enrichment barplot)

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍加载R包数据下载导入数据数据预处理画图code 2code 3系统信息介绍 本文介绍了使用R语言绘制GO富集分析条形图的方法。通过加载ggplot2等R包,对GO term数据进行预处理,包括p值转换…...

JavaScript 性能优化实战指南

JavaScript 性能优化实战指南 一、引言 JavaScript 是一种广泛使用的编程语言,尤其在前端开发中占据重要地位。随着 Web 应用的复杂度不断增加,性能优化成为开发过程中不可或缺的一部分。性能优化不仅可以提升用户体验,还能减少服务器负载,提高应用的响应速度。本文将从多…...

达梦数据库:同1台服务器如何启动不同版本的DMAP服务

需求背景&#xff1a; 用户使用资源比较高的服务器&#xff0c;作为测试环境提供服务器&#xff0c;因为在这台服务器&#xff0c;运行了很多个数据库版本实例的情况&#xff0c;但是当dmap版本和数据库版本不一致时&#xff0c;通过dmap备份会报错。 解决办法&#xff1a; 1…...

Laravel单元测试使用示例

Date: 2025-05-28 17:35:46 author: lijianzhan 在 Laravel 框架中&#xff0c;单元测试是一种常用的测试方法&#xff0c;它是允许你测试应用程序中的最小可测试单元&#xff0c;通常是方法或函数。Laravel 提供了内置的测试工具PHPUnit&#xff0c;实践中进行单元测试是保障代…...

Kotlin委托机制使用方式和原理

目录 类委托属性委托简单的实现属性委托Kotlin标准库中提供的几个委托延迟属性LazyLazy委托参数可观察属性Observable委托vetoable委托属性储存在Map中 实践方式双击back退出Fragment/Activity传参ViewBinding和委托 类委托 类委托有点类似于Java中的代理模式 interface Base…...

鸿蒙OSUniApp集成WebAssembly实现高性能计算:从入门到实践#三方框架 #Uniapp

UniApp集成WebAssembly实现高性能计算&#xff1a;从入门到实践 引言 在移动应用开发领域&#xff0c;性能始终是一个永恒的话题。随着计算需求的不断增加&#xff0c;特别是在图像处理、数据分析等领域&#xff0c;如何在跨平台应用中实现高性能计算成为了一个重要课题。本文…...

基于 HT for Web 轻量化 3D 数字孪生数据中心解决方案

一、技术架构&#xff1a;HT for Web 的核心能力 图扑软件自主研发的 HT for Web 是基于 HTML5 的 2D/3D 可视化引擎&#xff0c;核心技术特性包括&#xff1a; 跨平台渲染&#xff1a;采用 WebGL 技术&#xff0c;支持 PC、移动端浏览器直接访问&#xff0c;兼容主流操作系统…...

精英-探索双群协同优化(Elite-Exploration Dual Swarm Cooperative Optimization, EEDSCO)

一种多群体智能优化算法&#xff0c;其核心思想是通过两个分工明确的群体——精英群和探索群——协同工作&#xff0c;平衡算法的全局探索与局部开发能力&#xff0c;从而提高收敛精度并避免早熟收敛。 一 核心概念 在传统优化算法&#xff08;如粒子群优化、遗传算法&#xf…...

解决Ubuntu20.04上Qt串口通信 QSerialPort 打开失败的问题

运行Qt串口通信 open(QIODevice::ReadWrite) 时&#xff0c;总是失败。 1、打印失败原因 QString QSerialHelper::openSerail() {if(this->open(QIODevice::ReadWrite) true){return this->portName();}else{return "打开失败";//return this->errorStri…...

深入浅出:使用DeepSeek开发小程序的完整指南

深入浅出:使用DeepSeek开发小程序的完整指南 1. 《从零开始:DeepSeek小程序开发环境搭建》 ​​引言:​​ "工欲善其事,必先利其器",在开始DeepSeek小程序开发之旅前,搭建一个高效的开发环境是至关重要的第一步。本文将手把手带你完成从软件安装到第一个&quo…...

设计模式——观察者设计模式(行为型)

摘要 本文详细介绍了观察者设计模式&#xff0c;包括其定义、结构、实现方式、适用场景以及实战示例。通过代码示例展示了如何在Spring框架下实现观察者模式&#xff0c;以及如何通过该模式实现状态变化通知。同时&#xff0c;对比了观察者模式与消息中间件在设计理念、耦合程…...

【前端】Vue中使用CKeditor作为富文本编辑器

官网https://ckeditor.com/ 此处记录一下我在使用的时候具体初始化的代码。 <template><div><textarea :id"id"></textarea></div> </template><script> export default {name: CkEditor,data: function () {return {id:…...