在 macOS 上优化 Vim 用于开发

news2025/3/17 23:53:46

简介

这篇指南将带你通过一系列步骤,如何在 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.nvimprettier),以及其他必要工具:

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.vim
  autocmd 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.vim
  autocmd 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 开发环境!🚀

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

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

相关文章

SOME/IP-SD -- 协议英文原文讲解8

前言 SOME/IP协议越来越多的用于汽车电子行业中&#xff0c;关于协议详细完全的中文资料却没有&#xff0c;所以我将结合工作经验并对照英文原版协议做一系列的文章。基本分三大块&#xff1a; 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工具封…

PyTorch 深度学习实战(11):强化学习与深度 Q 网络(DQN)

在之前的文章中&#xff0c;我们介绍了神经网络、卷积神经网络&#xff08;CNN&#xff09;、循环神经网络&#xff08;RNN&#xff09;、Transformer 等多种深度学习模型&#xff0c;并应用于图像分类、文本分类、时间序列预测等任务。本文将介绍强化学习的基本概念&#xff0…

Python学习第十九天

Django-分页 后端分页 Django提供了Paginator类来实现后端分页。Paginator类可以将一个查询集&#xff08;QuerySet&#xff09;分成多个页面&#xff0c;每个页面包含指定数量的对象。 from django.shortcuts import render, redirect, get_object_or_404 from .models impo…

Windows环境下安装部署dzzoffice+onlyoffice的私有网盘和在线协同系统

安装前需要准备好Docker Desktop环境&#xff0c;可查看我的另一份亲测安装文章 https://blog.csdn.net/qq_43003203/article/details/146283915?spm1001.2014.3001.5501 1、安装配置onlyoffice 1、Docker 拉取onlyoffice容器镜像 管理员身份运行Windows PowerShell&#x…

ChatPromptTemplate的使用

ChatPromptTemplate 是 LangChain 中专门用于管理多角色对话结构的提示词模板工具。它的核心价值在于&#xff0c;开发者可以预先定义不同类型的对话角色消息&#xff08;如系统指令、用户提问、AI历史回复&#xff09;&#xff0c;并通过数据绑定动态生成完整对话上下文。 1.…

Blender插件NodeWrangler导入贴图报错解决方法

Blender用NodeWrangler插件 CtrlShiftT 导入贴图 直接报错 解决方法: 用CtrlshiftT打开需要导入的材质文件夹时&#xff0c;右边有一个默认勾选的相对路径&#xff0c;取消勾选就可以了。 开启node wrangler插件&#xff0c;然后在导入贴图是取消勾选"相对路径"&am…

java项目之基于ssm的药店药品信息管理系统(源码+文档)

项目简介 药店药品信息管理系统实现了以下功能&#xff1a; 个人信息管理 负责管理个人用户的信息。 员工管理 负责管理药店或药品管理机构的员工信息。 药品管理 负责管理药品的详细信息&#xff0c;可能包括药品名称、成分、剂量、价格、库存等。 进货管理 负责管理药品…

论文分享 | HE-Nav: 一种适用于复杂环境中空地机器人的高性能高效导航系统

阿木实验室始终致力于通过开源项目和智能无人机产品&#xff0c;为全球无人机开发者提供强有力的技术支持&#xff0c;并推出了开源项目校园赞助活动&#xff0c;助力高校学子在学术研究与技术创新中取得更大突破。近日&#xff0c;香港大学王俊铭同学&#xff0c;基于阿木实验…

ubuntu 24 安装 python3.x 教程

目录 注意事项 一、安装不同 Python 版本 1. 安装依赖 2. 下载 Python 源码 3. 解压并编译安装 二、管理多个 Python 版本 1. 查看已安装的 Python 版本 2. 配置环境变量 3. 使用 update-alternatives​ 管理 Python 版本 三、使用虚拟环境为项目指定特定 Python 版本…

【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

温馨提示&#xff1a;本篇博客的详细代码已发布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下载运行哦&#xff01; HarmonyOS NEXT窗口管理基础教程&#xff1a;深入理解WindowSizeManager 文章目录 HarmonyOS NEXT窗口管理基础教程&#xff1a;深入理解WindowSiz…

Python----数据分析(Pandas一:pandas库介绍,pandas操作文件读取和保存)

一、Pandas库 1.1、概念 Pandas是一个开源的、用于数据处理和分析的Python库&#xff0c;特别适合处理表格类数 据。它建立在NumPy数组之上&#xff0c;提供了高效的数据结构和数据分析工具&#xff0c;使得数据操作变得更加简单、便捷和高效。 Pandas 的目标是成为 Python 数据…

基于WebRTC技术的EasyRTC嵌入式音视频SDK:多平台兼容与性能优化

在当今数字化、智能化的时代背景下&#xff0c;实时音视频通信技术已成为众多领域不可或缺的关键技术。基于WebRTC技术的EasyRTC嵌入式音视频SDK&#xff0c;凭借其在ARM、Linux、Windows、安卓、iOS等多平台上的兼容性&#xff0c;为开发者提供了强大的工具&#xff0c;推动了…

【快速入门】MyBatis

一.基础操作 1.准备工作 1&#xff09;引入依赖 一个是mysql驱动包&#xff0c;一个是mybatis的依赖包&#xff1a; <dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><vers…

交互式可视化进阶(Plotly Dash构建疫情仪表盘)

这里写目录标题 交互式可视化进阶(Plotly Dash构建疫情仪表盘)1. 引言2. 项目背景与意义3. 数据集生成与介绍4. GPU加速在数据处理中的应用5. 交互式仪表盘构建与Plotly Dash6. PyQt GUI集成与美化7. 工程整体架构8. 部分代码实现9. 代码自查与BUG排查10. 总结与展望交互式可…

如何选择适合您智能家居解决方案的通信协议?

如何选择适合您智能家居解决方案的通信协议&#xff1f; 在开发智能家居产品时&#xff0c;选择合适的通信协议对于设备的高效运行及其在智能家居系统中的互操作性至关重要。市面上协议众多&#xff0c;了解它们的特性并在做决定前考虑各种因素是非常必要的。以下是一些帮助您…

RabbitMQ可靠性进制

文章目录 1.生产者可靠性生产者重连生产者确认小结 2. MQ的可靠性数据持久化LazyQueue小结 3. 消费者的可靠性消费者确认机制消费者失败处理方案业务幂等性唯一消息ID业务判断 兜底方案业务判断 兜底方案 1.生产者可靠性 生产者重连 在某些场景下由于网络波动&#xff0c;可能…

版本控制器Git(5)

文章目录 前言一、理解标签二、创建标签三、操作标签四、多人协作场景一五、多人协作场景二总结 前言 本篇是最后一篇&#xff0c;主要介绍标签管理有关的内容 一、理解标签 标签定义&#xff1a;在Git中&#xff0c;标签&#xff08;tag&#xff09;是对某次提交&#xff08;c…

【数据分析】读取文件

3. 读取指定列 针对只需要读取数据中的某一列或多列的情况&#xff0c;pd.read_csv()函数提供了一个参数&#xff1a;usecols&#xff0c;将包含对应的columns的列表传入该参数即可。 上面&#xff0c;我们学习了读取 "payment" 和 "items_count" 这…