在 macOS 上优化 Vim 用于开发
简介
这篇指南将带你通过一系列步骤,如何在 macOS 上优化 Vim,使其具备 代码补全、语法高亮、代码格式化、代码片段管理、目录树等功能。此外,我们还会解决在安装过程中可能遇到的常见错误。
1. 安装必备工具
在开始 Vim 配置之前,我们需要确保你的 macOS 系统中安装了以下工具:
安装 Homebrew(如果未安装)
Homebrew 是 macOS 上的包管理器,它帮助我们安装各种软件包。
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
安装 Vim
通过 Homebrew 安装最新版本的 Vim:
brew install vim
安装其他依赖工具
我们还需要安装一些额外的工具,例如 Node.js 和 npm(用于插件 coc.nvim 和 prettier),以及其他必要工具:
brew install node
brew install dos2unix
brew install fzf
2. 安装插件管理器 - vim-plug
我们将使用 vim-plug 来管理 Vim 插件。通过以下命令来安装 vim-plug 插件管理器:
curl -fLo ~/.vim/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
3. 配置 ~/.vimrc 文件
如果不支持 Python 3,那么就不能安装UltiSnips 插件。检查 Vim 是否支持 Python 3:
vim --version | grep python

使用 Vim 打开配置文件:
vim ~/.vimrc
然后,粘贴以下配置到 ~/.vimrc:
" 🔹 自动安装 vim-plug(如果未安装)
if empty(glob('~/.vim/autoload/plug.vim'))silent !curl -fLo ~/.vim/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vimautocmd VimEnter * PlugInstall | source $MYVIMRC
endif" 📌 基础配置
set number
set relativenumber
set cursorline
set mouse=a
set clipboard=unnamedplus" 📝 代码缩进
set tabstop=4
set shiftwidth=4
set expandtab
set autoindent
set smartindent" 🔍 搜索优化
set ignorecase
set smartcase
set incsearch
set hlsearch" 🚀 启动优化
set lazyredraw
set updatetime=300" 🔗 启用文件类型检测 & 插件支持
filetype plugin indent on" 📌 插件管理
call plug#begin('~/.vim/plugged')" 代码补全(Coc.nvim,仍然尝试保留)
Plug 'neoclide/coc.nvim', {'branch': 'release'}" 代码片段(改用 vim-vsnip,避免 UltiSnips 依赖 Python)
Plug 'hrsh7th/vim-vsnip'
Plug 'hrsh7th/vim-vsnip-integ'" 目录树(文件管理)
Plug 'preservim/nerdtree'" 状态栏美化(更清晰的状态栏)
Plug 'vim-airline/vim-airline'" 代码格式化(仅保留 Prettier)
Plug 'prettier/vim-prettier', { 'do': 'npm install' }call plug#end()" 🚀 绑定快捷键
nnoremap <leader>n :NERDTreeToggle<CR>
nnoremap <leader>f :Files<CR>" 代码补全(Coc.nvim)
inoremap <silent><expr> <TAB> pumvisible() ? "\<C-n>" : "\<TAB>"
nnoremap <silent> gd <Plug>(coc-definition)
nnoremap <silent> K :call CocActionAsync('doHover')<CR>
nnoremap <leader>f :CocFix<CR>" 代码格式化(只保留 Prettier)
nnoremap <leader>p :Prettier<CR>
上面是使用 macOS 自带 vim 需要的插件。如果你的 vim 支持 Python 3,那么可以安装下面的配置:
" 🔹 自动安装 vim-plug(如果未安装)
if empty(glob('~/.vim/autoload/plug.vim'))silent !curl -fLo ~/.vim/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vimautocmd VimEnter * PlugInstall | source $MYVIMRC
endif" 📌 基础配置
set number " 显示行号
set relativenumber " 相对行号
set cursorline " 高亮当前行
set mouse=a " 允许鼠标操作
set clipboard=unnamedplus " 复制同步到系统剪贴板" 📝 代码缩进
set tabstop=4
set shiftwidth=4
set expandtab " 用空格替代 Tab
set autoindent
set smartindent" 🔍 搜索优化
set ignorecase " 忽略大小写
set smartcase " 智能区分大小写
set incsearch " 增量搜索
set hlsearch " 高亮搜索结果" 🚀 启动优化
set lazyredraw " 需要时才重绘,提高性能
set updatetime=300 " 降低 CursorHold 触发时间" 🔗 启用文件类型检测 & 插件支持
filetype plugin indent on" 📌 插件管理
call plug#begin('~/.vim/plugged')" 代码补全 & 语法检查(必装)
Plug 'neoclide/coc.nvim', {'branch': 'release'}" 语法解析 & 高亮(推荐)
Plug 'nvim-treesitter/nvim-treesitter', {'do': ':TSUpdate'}" 代码片段
Plug 'SirVer/ultisnips'
Plug 'honza/vim-snippets'" 代码格式化(Python & JS)
Plug 'psf/black', { 'for': 'python' }
Plug 'prettier/vim-prettier', { 'do': 'npm install' }" 目录树(文件管理)
Plug 'preservim/nerdtree'" 状态栏美化(更清晰的状态栏)
Plug 'vim-airline/vim-airline'call plug#end()" 🚀 绑定快捷键
nnoremap <leader>n :NERDTreeToggle<CR> " <leader>n 打开/关闭目录树
nnoremap <leader>f :Files<CR> " <leader>f 搜索文件(需要 fzf)" 代码补全(Coc.nvim)
inoremap <silent><expr> <TAB> pumvisible() ? "\<C-n>" : "\<TAB>"
nnoremap <silent> gd <Plug>(coc-definition) " 跳转到定义
nnoremap <silent> K :call CocActionAsync('doHover')<CR> " 显示文档
nnoremap <leader>f :CocFix<CR> " 自动修复代码" 代码格式化
nnoremap <leader>b :Black<CR> " Python 代码格式化
nnoremap <leader>p :Prettier<CR> " JS/TS/HTML 代码格式化
保存并退出:
:wq
4. 安装插件
打开 Vim 后,运行以下命令安装所有插件:
:PlugInstall
5. 安装 LSP(Coc.nvim)
安装需要的语言服务器,如 Python、C/C++、JavaScript:
:CocInstall coc-python coc-clangd coc-tsserver
6. 目录树(NERDTree)
使用快捷键打开或关闭 目录树:
<leader>n
(如果 leader 是 \,那么 \n 将打开/关闭 NERDTree。)
7. 代码格式化(Prettier & Black)
\b " 格式化 Python 代码
\p " 格式化 JS/TS/HTML 代码
8. 语法解析 + 代码高亮(nvim-treesitter)
安装语法解析器(Python、JavaScript、C/C++ 等):
:TSInstall python javascript c cpp html css json
然后在 ~/.vimrc 文件中添加:
lua << EOF
require'nvim-treesitter.configs'.setup {ensure_installed = "all",highlight = { enable = true },indent = { enable = true },
}
EOF
9. 终极优化
通过以下快捷键更快速地切换窗口:
nnoremap <C-h> <C-w>h
nnoremap <C-l> <C-w>l
nnoremap <C-j> <C-w>j
nnoremap <C-k> <C-w>k
常见错误及解决方案
错误 1: vim-prettier Exit 状态 1
问题: vim-prettier 更新失败,出现 Exit status: 1。
解决方案: 运行以下命令来解决依赖问题:
cd ~/.vim/plugged/vim-prettier
npm install --legacy-peer-deps
如果还是失败,强制安装:
npm install --force
然后返回 Vim,运行:
:PlugUpdate
错误 2: TSUpdate 不是编辑器命令
问题: 安装 nvim-treesitter 时出现 E492: Not an editor command: TSUpdate。
解决方案: 这是因为 Neovim 是必须的,Vim 不支持 nvim-treesitter。你可以安装 Neovim:
brew install neovim
然后使用 Neovim (nvim 而非 vim) 打开配置文件并运行:
:TSInstall python javascript c cpp html css json
如果不想使用 Neovim,可以从 ~/.vimrc 删除 nvim-treesitter 插件,然后重新运行:
:PlugClean
:PlugInstall
总结
通过上述步骤,你的 macOS 上的 Vim 已经优化完成,具备了:
- 代码补全(Coc.nvim)
- 语法高亮(nvim-treesitter)
- 代码格式化(Prettier 和 Black)
- 代码片段管理(UltiSnips)
- 目录管理(NERDTree)
- 状态栏美化(Airline)
现在你可以享受一个 强大的 Vim 开发环境!🚀
相关文章:
在 macOS 上优化 Vim 用于开发
简介 这篇指南将带你通过一系列步骤,如何在 macOS 上优化 Vim,使其具备 代码补全、语法高亮、代码格式化、代码片段管理、目录树等功能。此外,我们还会解决在安装过程中可能遇到的常见错误。 1. 安装必备工具 在开始 Vim 配置之前ÿ…...
SOME/IP-SD -- 协议英文原文讲解8
前言 SOME/IP协议越来越多的用于汽车电子行业中,关于协议详细完全的中文资料却没有,所以我将结合工作经验并对照英文原版协议做一系列的文章。基本分三大块: 1. SOME/IP协议讲解 2. SOME/IP-SD协议讲解 3. python/C举例调试讲解 5.1.4.4 S…...
【Agent实战】货物上架位置推荐助手(RAG方式+结构化prompt(CoT)+API工具结合ChatGPT4o能力Agent项目实践)
本文原创作者:姚瑞南 AI-agent 大模型运营专家,先后任职于美团、猎聘等中大厂AI训练专家和智能运营专家岗;多年人工智能行业智能产品运营及大模型落地经验,拥有AI外呼方向国家专利与PMP项目管理证书。(转载需经授权) 目录 结论 效果图示 1.prompt 2. API工具封…...
Spring Boot使用线程池创建多线程
在 Spring Boot 2 中,可以使用 Autowired 注入 线程池(ThreadPoolTaskExecutor 或 ExecutorService),从而管理线程的创建和执行。以下是使用 Autowired 方式注入线程池的完整示例。 1. 通过 Autowired 注入 ThreadPoolTaskExecuto…...
PyTorch 深度学习实战(11):强化学习与深度 Q 网络(DQN)
在之前的文章中,我们介绍了神经网络、卷积神经网络(CNN)、循环神经网络(RNN)、Transformer 等多种深度学习模型,并应用于图像分类、文本分类、时间序列预测等任务。本文将介绍强化学习的基本概念࿰…...
在Eclipse 中使用 MyBatis 进行开发,通常需要以下步骤:
在Eclipse 中使用 MyBatis 进行开发,通常需要以下步骤: 1. 创建 Maven 项目 首先,在 Eclipse 中创建一个 Maven 项目。如果你还没有安装 Maven 插件,可以通过 Eclipse Marketplace 安装 Maven 插件。 打开 Eclipse,选…...
Python学习第十九天
Django-分页 后端分页 Django提供了Paginator类来实现后端分页。Paginator类可以将一个查询集(QuerySet)分成多个页面,每个页面包含指定数量的对象。 from django.shortcuts import render, redirect, get_object_or_404 from .models impo…...
Adobe Premiere Pro2023配置要求
Windows 系统 最低配置 处理器:Intel 第六代或更新版本的 CPU,或 AMD Ryzen™ 1000 系列或更新版本的 CPU,需要支持 Advanced Vector Extensions 2(AVX2)。操作系统:Windows 10(64 位ÿ…...
面试求助:接口测试用例设计主要考虑哪些方面?
一、基础功能验证 1. 正常场景覆盖 关键点:验证接口在合法输入下的正确响应(状态码、数据结构、业务逻辑)。 案例: json 复制 // 用户登录接口 输入:{"username": "合法用户", "password…...
C语言——变量与常量
C语言中的变量与常量:简洁易懂的指南 在C语言编程中,变量和常量是最基本的概念之一。理解它们的区别和使用方法对于编写高效、可维护的代码至关重要。本文将详细介绍C语言中的变量和常量,并通过图表和代码示例帮助你更好地理解。 目录 什么…...
考研408-数据结构完整代码 线性表的顺序存储结构 - 顺序表
线性表的顺序存储结构 - 顺序表 1. 顺序表的定义 用一组地址连续的存储单元依次存储线性表的数据元素,从而使逻辑上相邻的两个元素在物理位置上也相邻 2. 顺序表的特点 随机访问: 即通过首地址和元素序号可以在O(1) 时间内找到指定元素࿰…...
Windows环境下安装部署dzzoffice+onlyoffice的私有网盘和在线协同系统
安装前需要准备好Docker Desktop环境,可查看我的另一份亲测安装文章 https://blog.csdn.net/qq_43003203/article/details/146283915?spm1001.2014.3001.5501 1、安装配置onlyoffice 1、Docker 拉取onlyoffice容器镜像 管理员身份运行Windows PowerShell&#x…...
解决 Docker 镜像拉取超时问题:配置国内镜像源
在使用 Docker 的过程中,经常会遇到镜像拉取超时的问题,尤其是在国内网络环境下。这不仅会浪费大量的时间,还可能导致一些项目无法顺利进行。今天,我将分享一个简单而有效的解决方法:配置国内镜像源。 环境 操作系统 c…...
如何解决 Three.js 物体渲染的锯齿问题
在 Three.js 中,如果模型看起来不够平滑,或者在旋转视角时出现锯齿(aliasing),可以通过以下方法来优化渲染效果。 1. 启用抗锯齿(MSAA) 默认情况下,Three.js 渲染器不会开启抗锯齿&…...
嵌入式八股,为什么单片机中不使用malloc函数
1. 资源限制 单片机的内存资源通常非常有限,尤其是RAM的大小可能只有几KB到几十KB。在这种情况下,使用 malloc 进行动态内存分配可能会导致内存碎片化,使得程序在运行过程中逐渐耗尽可用内存。 2. 内存碎片问题 malloc 函数在分配和释放内…...
【计量地理学】实验一 地理数据的基本统计分析
阅前提示: 计量地理学实验课的实验报告为当堂提交,相较以往实验报告缺少打磨与整理的时间,因此内容中不可避免出现相关错误!!! 出于个人完美主义的原则本不愿发布(其实就是黑历史)…...
ChatPromptTemplate的使用
ChatPromptTemplate 是 LangChain 中专门用于管理多角色对话结构的提示词模板工具。它的核心价值在于,开发者可以预先定义不同类型的对话角色消息(如系统指令、用户提问、AI历史回复),并通过数据绑定动态生成完整对话上下文。 1.…...
SQL Server查询优化
最常用,最有效的数据库优化方式 查询语句层面 避免全表扫描 使用索引:确保查询条件中的字段有索引。例如,查询语句 SELECT * FROM users WHERE age > 20,若 age 字段有索引,数据库会利用索引快速定位符合条件的记…...
Blender插件NodeWrangler导入贴图报错解决方法
Blender用NodeWrangler插件 CtrlShiftT 导入贴图 直接报错 解决方法: 用CtrlshiftT打开需要导入的材质文件夹时,右边有一个默认勾选的相对路径,取消勾选就可以了。 开启node wrangler插件,然后在导入贴图是取消勾选"相对路径"&am…...
QT中的宏
Q_UNUSED(event); 是 Qt 提供的一个宏,用于标记某个变量或参数在当前作用域中未被使用。它的主要作用是避免编译器发出“未使用变量”的警告。 背景 在 C 中,如果一个函数参数或变量在代码中没有被使用,编译器会发出警告,例如&a…...
java项目之基于ssm的药店药品信息管理系统(源码+文档)
项目简介 药店药品信息管理系统实现了以下功能: 个人信息管理 负责管理个人用户的信息。 员工管理 负责管理药店或药品管理机构的员工信息。 药品管理 负责管理药品的详细信息,可能包括药品名称、成分、剂量、价格、库存等。 进货管理 负责管理药品…...
论文分享 | HE-Nav: 一种适用于复杂环境中空地机器人的高性能高效导航系统
阿木实验室始终致力于通过开源项目和智能无人机产品,为全球无人机开发者提供强有力的技术支持,并推出了开源项目校园赞助活动,助力高校学子在学术研究与技术创新中取得更大突破。近日,香港大学王俊铭同学,基于阿木实验…...
【大语言模型】【个人知识库正式内容】提示工程:如何设计模型的提示语
知识库条目:提示工程,如何构建提示词。 🏖️ 当人人都能使用AI时,你如何才能变得更出彩?……让 AI 带有自己的Tag —— 一、简介 什么是提示语 (Prompt): 提示语是用户输入给AI系统的指令或信息, 简单来说…...
ubuntu 24 安装 python3.x 教程
目录 注意事项 一、安装不同 Python 版本 1. 安装依赖 2. 下载 Python 源码 3. 解压并编译安装 二、管理多个 Python 版本 1. 查看已安装的 Python 版本 2. 配置环境变量 3. 使用 update-alternatives 管理 Python 版本 三、使用虚拟环境为项目指定特定 Python 版本…...
(十一) 人工智能 - Python 教程 - Python元组
更多系列教程,每天更新 更多教程关注:xxxueba.com 星星学霸 1 元组(Tuple) 元组是有序且不可更改的集合。在 Python 中,元组是用圆括号编写的。 实例 创建元组: thistuple ("apple", "b…...
【sql靶场】第13、14、17关-post提交报错注入保姆级教程
目录 【sql靶场】第13、14、17关-post提交报错注入保姆级教程 1.知识回顾 1.报错注入深解 2.报错注入格式 3.使用的函数 4.URL 5.核心组成部分 6.数据编码规范 7.请求方法 2.第十三关 1.测试闭合 2.列数测试 3.测试回显 4.爆出数据库名 5.爆出表名 6.爆出字段 …...
93.HarmonyOS NEXT窗口管理基础教程:深入理解WindowSizeManager
温馨提示:本篇博客的详细代码已发布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下载运行哦! HarmonyOS NEXT窗口管理基础教程:深入理解WindowSizeManager 文章目录 HarmonyOS NEXT窗口管理基础教程:深入理解WindowSiz…...
Python----数据分析(Pandas一:pandas库介绍,pandas操作文件读取和保存)
一、Pandas库 1.1、概念 Pandas是一个开源的、用于数据处理和分析的Python库,特别适合处理表格类数 据。它建立在NumPy数组之上,提供了高效的数据结构和数据分析工具,使得数据操作变得更加简单、便捷和高效。 Pandas 的目标是成为 Python 数据…...
基于WebRTC技术的EasyRTC嵌入式音视频SDK:多平台兼容与性能优化
在当今数字化、智能化的时代背景下,实时音视频通信技术已成为众多领域不可或缺的关键技术。基于WebRTC技术的EasyRTC嵌入式音视频SDK,凭借其在ARM、Linux、Windows、安卓、iOS等多平台上的兼容性,为开发者提供了强大的工具,推动了…...
【快速入门】MyBatis
一.基础操作 1.准备工作 1)引入依赖 一个是mysql驱动包,一个是mybatis的依赖包: <dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><vers…...
