在 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.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.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 開發環境!🚀

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/73609.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/73609.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/73609.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

golang開發支持onlyoffice的token功能

一直都沒去弄token這塊&#xff0c;想著反正docker run的時候將jwt置為false即可。 看了好多文章&#xff0c;感覺可以試試&#xff0c;但是所有文件幾乎都沒說思路。 根據我的理解和成功的調試&#xff0c;思路是&#xff1a; 我們先定義2個概念&#xff0c;一個是文檔下載…

Android wifi的開關Settings值異常分析

Android wifi的開關Settings值異常分析 文章目錄 Android wifi的開關Settings值異常分析一、前言二、異常分析1、adb或者串口獲取Settings的wifi開關值2、代碼獲取wifi開關值3、根據日志分析代碼(1)logcat 對應的wifi開啟日志的代碼①WifiServiceImpl.java② WifiSettingsStore…

C#的委托Action

在 C# 中&#xff0c;Action 是一個預定義的委托類型&#xff0c;它位于 System 命名空間下。下面詳細介紹它的作用和使用方法。 作用 Action 委托的主要作用是封裝一個方法&#xff0c;這個方法沒有返回值&#xff08;即返回類型為 void&#xff09;。它提供了一種簡潔的方式…

Qt MainWindow簡單例子(文本編輯)

使用Qt控件練習文本編輯窗口的創建。 #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow> #include <QLabel> #include <QProgressBar>QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } QT_END_NAMESPACEclass MainWindow : public Q…

DeepSeek-prompt指令-當DeepSeek答非所問,應該如何準確的表達我們的訴求?

當DeepSeek答非所問&#xff0c;應該如何準確的表達我們的訴求&#xff1f;不同使用場景如何向DeepSeek發問&#xff1f;是否有指令公式&#xff1f; 目錄 1、 扮演專家型指令2、 知識蒸餾型指令3、 顆粒度調節型指令4、 時間軸推演型指令5、 極端測試型6、 逆向思維型指令7、…

Mac中nvm切換node版本失敗,關閉終端再次打開還是之前的node

Mac中使用 nvm 管理 node 版本&#xff0c;在使用指令&#xff1a;nvm use XXX 切換版本之后。 關閉終端&#xff0c;再次打開&#xff0c;輸入 node -v 還是得到之前的 node 版本。 原因&#xff1a; 在這里這個 default 中有個 node 的版本號&#xff0c;使用 nvm use 時&a…

織夢dedecmsV5.7提示信息提示框美化(帶安裝教程和效果展示)

一、效果展示 1、安裝前效果 2、安裝后效果 二、安裝說明 1、安裝測試版本&#xff1a;DedeCMS-V5.7.117-UTF8&#xff1b; 2、必須在修改代碼之前請做好文件備份&#xff0c;以免誤操無法恢復&#xff1b; 3、為了兼容其他版本&#xff0c;請在安裝時&#xff0c;最好將替…

Science Advances 視觸覺傳感機制的交互裝置,可以實時測量來自手不同部位的分布力

近日&#xff0c;由香港科技大學&#xff08;HKUST&#xff09;電子與計算機工程學系申亞京教授領導的研究團隊&#xff0c;提出了一種基于數字通道的觸覺交互系統&#xff0c;可以實時測量來自手不同部位的分布力&#xff0c;有望在醫學評估、體育訓練、機器人和虛擬現實&…

MySQL單表查詢大全【SELECT】

山再高&#xff0c;往上攀&#xff0c;總能登頂&#xff1b;路再長&#xff0c;走下去&#xff0c;定能到達。 Mysql中Select 的用法 ------前言------【SELECT】0.【準備工作】0.1 創建一個庫0.2 庫中創建表0.3 表中加入一些數據 1.【查詢全部】2.【查詢指定列】2.1查詢指定列…

Vue調用子組件init方法時報錯Cannot read properties of undefined (reading ‘init‘)解決方法

調用init方法語句寫在this.$nextTick(() > {});方法里&#xff0c;因為nextTick方法在頁面元素加載完之后調用 this.$nextTick(() > {this.$refs.chartComponent.init();});如果還報錯&#xff1a;Error in nextTick: "TypeError: Cannot read properties of undef…

怎么解決在Mac上每次打開文件夾都會彈出一個新窗口的問題

在Mac上每次打開文件夾都會彈出一個新窗口的問題&#xff0c;可以通過以下方法解決? ?調整Finder設置?&#xff1a; 打開Finder&#xff0c;點擊“Finder”菜單&#xff0c;選擇“偏好設置”。在偏好設置中&#xff0c;選擇“通用”標簽。取消勾選“在標簽頁中打開文件夾”或…

從 Prop Drilling 到 Context:React 狀態管理的演進與抉擇

Context的出現解決了什么問題&#xff1f; Vue中的provide/inject和React中的Context非常相似&#xff0c;具體區別如下&#xff1a; 可以看到實際上最大的區別在于Vue是響應式&#xff0c;React是非響應式 那么context具體解決了什么問題&#xff1f;我們先看下面這個例子&a…

考研408-數據結構完整代碼 線性表的順序存儲結構 - 順序表

線性表的順序存儲結構 - 順序表 1. 順序表的定義 ? 用一組地址連續的存儲單元依次存儲線性表的數據元素&#xff0c;從而使邏輯上相鄰的兩個元素在物理位置上也相鄰 2. 順序表的特點 隨機訪問&#xff1a; 即通過首地址和元素序號可以在O(1) 時間內找到指定元素&#xff0…

【經驗分享】SpringBoot集成WebSocket開發02 之 實現一個基本示例并Spring Bean注入的方式來組織代碼

結合Spring Boot和WebSocket實現一個基本示例&#xff0c;并且使用Spring Bean注入的方式來組織代碼。 1. 創建Spring Boot項目 首先&#xff0c;確保你有一個Spring Boot項目&#xff0c;并在pom.xml文件中引入了WebSocket相關的依賴。 <dependencies><!-- Spring…

DeepSeek-R1大模型微調技術深度解析:架構、方法與應用全解析

1. DeepSeek-R1大模型架構設計與技術特性 1.1 架構設計 DeepSeek-R1作為超大規模語言模型,其核心架構設計包含以下創新: 專家混合架構(MoE) 采用6710億參數的混合專家架構(MoE),每個推理過程僅激活370億參數,實現計算效率與資源利用率的突破性提升。 Transformer框架…

本地部署Hive集群

規劃 服務機器Hive本體部署在Node1元數據服務所需的關系型數據庫(MYSQL)部署在Node1 安裝MYSQL數據庫 # 更新密鑰 rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022# 安裝Mysql yum庫 rpm -Uvh http://repo.mysql.com//mysql57-community-release-el7-7.noarch.…

緩存之美:Guava Cache 相比于 Caffeine 差在哪里?

大家好&#xff0c;我是 方圓。本文將結合 Guava Cache 的源碼來分析它的實現原理&#xff0c;并闡述它相比于 Caffeine Cache 在性能上的劣勢。為了讓大家對 Guava Cache 理解起來更容易&#xff0c;我們還是在開篇介紹它的原理&#xff1a; Guava Cache 通過分段&#xff08;…

2025年【廣東省安全員C證第四批(專職安全生產管理人員)】考試及廣東省安全員C證第四批(專職安全生產管理人員)模擬試題

安全生產是各行各業不可忽視的重要環節&#xff0c;特別是在廣東省這樣的經濟大省&#xff0c;安全生產的重要性更是不言而喻。為了確保安全生產管理人員具備足夠的專業知識和實際操作能力&#xff0c;廣東省定期舉辦安全員C證考試。本文將詳細介紹2025年廣東省安全員C證第四批…

傳輸層自學

傳輸實體&#xff1a;完成傳輸層任務的硬件或軟件 可能位于&#xff1a; 操作系統內核獨立的用戶進程綁定在網絡應用中的鏈接庫網絡接口卡 1.功能&#xff1a; 網絡層與傳輸層作用范圍比較&#xff1f; 網絡層負責把數據從源機送達到目的機 傳輸層負責把數據送達到具體的應…

【C語言】函數和數組實踐與應用:開發簡單的掃雷游戲

【C語言】函數和數組實踐與應用&#xff1a;開發簡單的掃雷游戲 1.掃雷游戲分析和設計1.1掃雷游戲的功能說明&#xff08;游戲規則&#xff09;1.2游戲的分析與設計1.2.1游戲的分析1.2.2 文件結構設計 2. 代碼實現2.1 game.h文件2.2 game.c文件2.3 test.c文件 3. 游戲運行效果4…