⚡ 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 编辑器(包括 Vim 插件管理器) 📌 1. Vim 简介 Vim(Vi IMproved)是一款高度可定制的文本编辑器,基于早期的 vi 编辑器扩展而来。 它支持语法高亮、插件扩展、多种编程语言&am…...

小型语言模型:为何“小”才是“大”?
当说到人工智能(AI)的时候,大家通常会想到那些拥有数十亿参数的超大型语言模型,它们能做出一些令人惊叹的事情。 厉害不厉害?绝对厉害! 但对于大多数企业和开发者来说,实用吗?可能…...
雪花算法:分布式ID生成的优雅解决方案
一、雪花算法的核心机制与设计思想 雪花算法(Snowflake)是由Twitter开源的分布式ID生成算法,它通过巧妙的位运算设计,能够在分布式系统中快速生成全局唯一且趋势递增的ID。 1. 基本结构 雪花算法生成的是一个64位(lo…...
针对PostgreSQL中pg_wal目录占用过大的系统性解决方案
一、问题现象与根本原因 当pg_wal目录占用超过预期(如数十GB甚至占满磁盘),通常由以下原因导致 长事务未提交:未完成的事务会阻塞WAL日志清理。复制槽未释放:逻辑复制或流复制槽未及时清理,导…...
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方法 知识点回归: CPU性能的查看:看架构代际、核心数、线程数GPU性能的查看:看显存、看级别、看架构代际GPU训练的方法:数据和模型移动到GPU device上类的call方法:为什么定义前向传播时可以直接写作…...

秋招Day12 - 计算机网络 - 网络综合
从浏览器地址栏输入URL到显示网页的过程了解吗? 从在浏览器地址栏输入 URL 到显示网页的完整过程,并不是一个单一的数据包从头到尾、一次性地完成七层封装再七层解析的过程。 而是涉及到多次、针对不同目的、与不同服务器进行的、独立的网络通信交互&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 离线库信息,结合机器学习算法,为每个 IP 地址生成多维度风险评估模型。其核心价值在于将传统的静态 IP 黑名单升级为动态风险评估体系,可实时识别新型网络威胁࿰…...

秋招Day12 - 计算机网络 - 基础
说一下计算机网络体系结构 OSI七层模型,TCP/IP四层模型和五层体系结构 说说OSI七层模型? 应用层:最靠近用户的层,用于处理特定应用程序的细节,提供了应用程序和网络服务之间的接口。表示层:确保从一个系…...

【网络安全】——Modbus协议详解:工业通信的“通用语言”
目录 一、初识Modbus:工业通信的基石 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? XtraBackup 是 Percona 公司推出的免费开源工具,专为 InnoDB/XtraDB 引擎设计,支持 在线物理热备,具备以下核心特性: 非阻塞备份:备份过程中数据库仍可读写。…...

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

小提琴图绘制-Graph prism
在 GraphPad Prism 中为小提琴图添加显著性标记(如*P<0.05)的步骤如下: 步骤1:完成统计检验 选择数据表:确保数据已按分组排列(如A列=Group1,B列=Group2)。执行统计检验: 点击工具栏 Analyze → Column analyses → Mann-Whitney test(非参数检验,适用于非正态数…...
写作即是生活
一个问题 “我是什么时候开始写作的呢?”请你先暂停一下,别往下读,先想想这个问题。 什么才是写作? 或许在想上个问题之后,你就会开始想问另外一个问题,什么才算是写作呢? 我的回答是&#x…...
进阶知识:Selenium底层原理深度解析
Selenium底层原理深度解析:网络IO密集型系统揭秘 一、Selenium核心组件解析 1.1 三大核心角色 客户端(Client) 扮演"指挥官"角色,负责: 编写测试脚本(模拟用户点击、输入等操作)发送…...
基于 Flickr30k-Entities 数据集 的 Phrase Localization
以下示例基于 Flickr30k-Entities 数据集中的标注,以及近期(以 TransVG (Li et al. 2021)为例)在短语定位(Phrase Grounding)任务上的评测结果,展示了单张图片中若干名词短语的定位情…...

[GHCTF 2025]SQL???
打开题目在线环境: 先尝试注入: id1;show databases; 发现报错,后来看了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服务
需求背景: 用户使用资源比较高的服务器,作为测试环境提供服务器,因为在这台服务器,运行了很多个数据库版本实例的情况,但是当dmap版本和数据库版本不一致时,通过dmap备份会报错。 解决办法: 1…...

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

Kotlin委托机制使用方式和原理
目录 类委托属性委托简单的实现属性委托Kotlin标准库中提供的几个委托延迟属性LazyLazy委托参数可观察属性Observable委托vetoable委托属性储存在Map中 实践方式双击back退出Fragment/Activity传参ViewBinding和委托 类委托 类委托有点类似于Java中的代理模式 interface Base…...
鸿蒙OSUniApp集成WebAssembly实现高性能计算:从入门到实践#三方框架 #Uniapp
UniApp集成WebAssembly实现高性能计算:从入门到实践 引言 在移动应用开发领域,性能始终是一个永恒的话题。随着计算需求的不断增加,特别是在图像处理、数据分析等领域,如何在跨平台应用中实现高性能计算成为了一个重要课题。本文…...

基于 HT for Web 轻量化 3D 数字孪生数据中心解决方案
一、技术架构:HT for Web 的核心能力 图扑软件自主研发的 HT for Web 是基于 HTML5 的 2D/3D 可视化引擎,核心技术特性包括: 跨平台渲染:采用 WebGL 技术,支持 PC、移动端浏览器直接访问,兼容主流操作系统…...

精英-探索双群协同优化(Elite-Exploration Dual Swarm Cooperative Optimization, EEDSCO)
一种多群体智能优化算法,其核心思想是通过两个分工明确的群体——精英群和探索群——协同工作,平衡算法的全局探索与局部开发能力,从而提高收敛精度并避免早熟收敛。 一 核心概念 在传统优化算法(如粒子群优化、遗传算法…...

解决Ubuntu20.04上Qt串口通信 QSerialPort 打开失败的问题
运行Qt串口通信 open(QIODevice::ReadWrite) 时,总是失败。 1、打印失败原因 QString QSerialHelper::openSerail() {if(this->open(QIODevice::ReadWrite) true){return this->portName();}else{return "打开失败";//return this->errorStri…...
深入浅出:使用DeepSeek开发小程序的完整指南
深入浅出:使用DeepSeek开发小程序的完整指南 1. 《从零开始:DeepSeek小程序开发环境搭建》 引言: "工欲善其事,必先利其器",在开始DeepSeek小程序开发之旅前,搭建一个高效的开发环境是至关重要的第一步。本文将手把手带你完成从软件安装到第一个&quo…...

设计模式——观察者设计模式(行为型)
摘要 本文详细介绍了观察者设计模式,包括其定义、结构、实现方式、适用场景以及实战示例。通过代码示例展示了如何在Spring框架下实现观察者模式,以及如何通过该模式实现状态变化通知。同时,对比了观察者模式与消息中间件在设计理念、耦合程…...
【前端】Vue中使用CKeditor作为富文本编辑器
官网https://ckeditor.com/ 此处记录一下我在使用的时候具体初始化的代码。 <template><div><textarea :id"id"></textarea></div> </template><script> export default {name: CkEditor,data: function () {return {id:…...