安装Macvim

article/2025/8/22 13:12:06

前言

本文记录了一次安装Macvim遇到的问题和解决办法,并提到了如何从终端启动Macvim。

brew install macvim 成功,但启动报错

今天重装了Mac系统(10.11.5 El Capitan,你问Mac居然也重装系统?我只是想要一块干净的硬盘。). 折腾完系统,在装回Macvim的时候遇到了问题。

我是使用Hombrew来安装的,在安装过程中brew下载了一些依赖的包。最后安装完成,在执行完brew linkapps macvim生成一个链接到Applications目录之后,我立马敲了mvim来启动Macvim, 让我吃惊的是,居然报错了!

Fatal Python error: PyThreadState_Get: no current thread

这是我在iterm2窗口中看到的错误信息,虽然Macvim跑起来了,但是很明显python报错了,这意味着vim中使用Python的插件可能都会不能工作, 确实如此YouCompleteMe首当其冲,事实证明,后来我在逐个注释掉.vimrc中用到了Python的插件以排查问题的时候,把YCM注释掉了Python就不报错了。

于是google了一下报错信息,果然在YCM的issue里有关于这个问题的讨论,YCM作者一直在甩锅:

Just tried using the latest MacVim on my OS X Mountain Lion and everything works. So this is somehow caused by your machine configuration in some way, sorry.

大意就是:”别特么来烦我,这明显是你Mac系统配置问题,去换一个官方最新的Macvim版本吧。”

看了好几个关于这个问题的issue最后看到了YCM作者最关键的一个回答:

The version of Python that YCM is linked to when being built and the version of Python linked into your Vim binary have to match, yes. If they don’t, a problem like the one you’re experiencing might ensue.

意思是:”构建YCM使用的Python版本必须和构建Vim使用的Python版本必须匹配,否则就可能出来这个问题。”

重新构建YCM

根据上面那个回答,我要使用和构建Macvim一样版本的Python来构建YCM。因为在安装Macvim的时候,brew下载了新版的Python(2.7.11), 我在iterm2里也确实能看到当前版本的Python正是brew下载下来这个2.7.11。系统自带的Python版本是2.7.10(/usr/bin/python), 如果brew在构建Macvim过程中使用的是其下载的新版Python,那么我也使用这个新版的Python来重新构建YCM就行了。

构建YCM的过程略去不谈,比较顺利,因为之前构建过。重点是结果!!MD,还是会报:

Fatal Python error: PyThreadState_Get: no current thread


这TM是因为我在转入Emacs+Evil的报应吗,Macvim开始耍脾气罢工了是吗, 我装完系统先装的你呀。

我靠,我可不会放弃,毕竟好几年的感情了,不能出了毛病就不管它了。

继续google解决方案, 因为是通过brew来安装的vim,因此brew也加入了搜索关键字。于是找到了下面这个很有用的线索:

MacVim doesn’t link to brewed python correctly

我只大概扫了一眼,仅需知道,brew安装Macvim时是有可能出现Python版本链接错乱的情况的。

没必要再去看brew的东西了,听YCM作者的,去Macvim官方网站搞个新包算了。

卸载Macvim 下载官网新版

从brew中卸载掉macvim: brew uninstall macvim

到官网下载了最新的dmg:

macvim_dmg.png

直接拖到Applications文件夹,双击打开,安静的没有任何报错。

启动Macvim的几种方式

看来brew也不是一直靠谱的,原来到官网下个新包就解决了问题。接下来虽然可以不报错的打开Macvim了,但是仅能通过双击文件Macvim.app的图标才能启动Macvim,那么如何从命令行里启动它呢?

下面介绍三种从命令行打开Macvim的方式:

假设,你把Macvim.app放置在了默认的位置,即:/Applications

那么你会发现下面两个文件:

/Applications/MacVim.app/Contents/MacOS/MacVim

/Applications/MacVim.app/Contents/MacOS/Vim

这就分别对应两种在命令行中启动Macvim的方式:

  • /Applications/MacVim.app/Contents/MacOS/Vim -g file …

  • open -a MacVim file …

如果觉得每次输入那么长的路径太麻烦,那么可以在你的~/.profile中添加一个别名,比如我用zsh,那么我在我的~/.zshrc中添加了这样一条:

alias gvim='/Applications/MacVim.app/Contents/MacOS/Vim -g'

第三种方式是最灵活的方式:使用mvim脚本

在上面的图中可以看到,下载来的Macvim包里有一个mvim文件,它是一个脚本文件,执行mvim文件,它会去几个常见的地方去搜索MacVim.cpp:

~/Applications

~/Applications/vim

/Applications

/Applications/vim

/Applications/Utilities

/Applications/Utilities/vim

如果你没有把MacVim.app拖入Applications文件夹,而是放在了其它地方,那么只要设置这个环境变量:VIM_APP_DIR 指向你的MacVim.app的存放目录即可。

为了能在任意命令行中打开Macvim,你需要把mvim这个脚本拷贝到PATH里包含的路径里面。比如,我是把mvim拷贝到了/usr/local/bin/目录下了。因为brew安装的应用也是在这个目录下,这个路径已经配置在PATH中了。

更多的启动说明可以在Macvim中输入::h macvim-start来查看。


作者水平有限,对相关知识的理解和总结难免有错误,还望给予指正,非常感谢!

在这里也能看到这篇文章:github博客, CSDN博客, 欢迎访问


http://chatgpt.dhexx.cn/article/8c38T6f3.shtml

相关文章

命令行使用MacVim

命令行使用MacVim 配置环境变量 vim ~/.zshrc 增加以面一行 alias gvim/Applications/MacVim.app/Contents/MacOS/Vim -g2021年8月30日补充 评论区有小伙伴有疑问,截图说明一下。 动画演示 总结 我个人还是喜欢直接使用命令行中的vim,这样更纯粹…

mac vim没有颜色 vim着色

mac选手使用vim的时候发现,代码全是白色的!我的天,我用的是vi吗? 但是编辑/usr/share/vim/vimrc中会发现系统不让用户改因为没有权限,这样可以直接在当前用户下实现同样的功能。步骤如下: 新建vimrc文件 …

MacOS - MacVim安装

1.应用场景 主要用于学习使用MacVim进行编程,尤其是在服务端编程发挥作用~ 2.学习/操作 1.文档阅读 01|各平台下的 Vim 安装方法:上路前准备好你的宝马-极客时间 Releases macvim-dev/macvim GitHub https://github.com/macv…

2022 最新 Mac Vim 开发环境的部署与配置

2022 最新 Mac Vim 开发环境的部署与配置 效果图 Vim 插件简介 插件名描述pope/vim-fugitiveVim 编辑器中的 Git 包装器插件,它可以让我们在 Vim 编辑器中完成 Git 操作scrooloose/nerdtree用来提供一个导航目录的侧边栏ryanoasis/vim-devicons在 NERDTree 中显示…

《设计模式之禅》中23种设计模式demo汇总

《设计模式之禅》中23种设计模式demo汇总 Git地址: https://github.com/baozi-little/designPatterns 23种设计模式如下图: 项目架构:JDK1.8 springboot 每个设计模式都有对应的单元测试,可直接运行,项目结构如下&a…

设计模式之禅--思维导图

原图ProcessOn里搜索:设计模式之禅

设计模式之禅之结构类PK【装饰模式VS适配器模式】

设计模式之禅PK之结构类 结构类设计模式 结构类模式: 适配器模式 桥梁模式 组合模式 装饰模式 门面模式 享元模式 代理模式 相同点:他们都是通过组合类或对象产生更大的结构以适应更高的层次的逻辑需求 【装饰模式】VS【适配器模式】 装饰模式和适配器模…

设计模式之禅——观察者模式

观察者模式是一种比较常见的设计模式,在安卓源码中也应用得很多,如baseAdapter、相关触发器机制。 首先从一个情景入手,战国时期,李斯(观察者)作为秦国宰相希望监视(观察)韩非子&…

《设计模式之禅》-策略模式

策略模式 定义 定义一组算法,将每个算法都封装起来,并且使它们之间可以互换 策略模式有三个角色 1.Strategy 抽象策略角色 策略,算法家族的抽象,通常为接口,定义每个策略或算法必须具有的方法和属性。 2.Concrete…

《设计模式之禅》-原型模式

原型模式属于比较简单的设计模式,所以使用次数也非常的多 定义: 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象 原型模式的通用代码: public class PrototypeClass implements Cloneable {Overridepublic Pr…

设计模式之禅——门面模式

门面模式【Facade Pattern】也叫外观模式,是一种比较常用的封装模式,其定义如下: 【要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行。门面模式提供一个高层次的接口,使得子系统更容易使用】 门面模式注重“统一…

设计模式之禅读后感

过早优化是万恶之源——Unix编程思想 让正确的程序更快,要比让快速的程序正确容易得多。 文章目录 前言六大设计原则*单一职责原则**里氏替换原则**依赖倒置原则**接口隔离原则**迪米特法则**开闭原则* 二十三种设计模式创建型模式*单例模式**工厂方法模式**抽象工厂…

设计模式之禅笔记

设计模式PK 创建类模式PK 工厂方法模式 VS 建造者模式 工厂方法模式注重的是整体对象的创建方法。建造者模式注重的是部件构建的过程。 工厂方法模式的对象粒度较粗,建造者模式的产品对象粒度较细。 抽象工厂模式 VS 建造者模式 抽象工厂模式也是注重产品的整…

《设计模式之禅》(第2版)

第一部分 大旗不挥 谁敢冲锋 —— 6大设计原则全新解读 第1章 单一职责原则 单一职责原则,Single Responsibility Principle,简称SRP,有且只有一个原因引起类/接口的变更;即一个接口/类只有一个职责,只负责一件事…

设计模式之禅《一》 大旗不挥,谁敢冲锋 ——6大设计原则

设计模式之禅《一》大旗不挥,谁敢冲锋 ——6大设计原则 《一》 六大原则 一:单一职责原则 1、单一职责原则最难划分的就是职责 2、有两个可以变化的原因放到了一个接口中,这就为以后的变化带来了风险。 3、对于单一职责原则,…

设计模式之禅(六大设计原则)

1.单一职责原则(Single Responsibility Principle) 也就是职责划分要明确,单一职责原则提出了一个编写程序的标准,用“职责”或者“变化原因”来衡量接口或者类设计的是否优良,但是“职责”或者“变化原因”都是不可度量的,因项目…

什么是ASCII码

ASCII码英文全称America Standard Code for Information Interchange,中文意思:美国信息交换标准码。它已被国际标准化组织(ISO)定为国际标准,称为ISO 646标准。适用于所有拉丁文字字母,ASCII码有7位码和8位…

最全ASCii 码表和说明

A的ASCII码是65,a的ASCII码是97。 ASCII码表中,小写字母排在大写字母的后面,一个字母的大小写数值相差32,一般知道大写字母的ASCII码数值,其对应的小写字母的ASCII码数值就算出来了,是大写字母的ASCII码数…

ASCII码

字符编码即ASCII码(American Standard Code for Information Interchange,美国信息交换标准码,国际通用的计算机内的字符数字的二进制编码),它是7位二进制编码,总共有128个符号,包括英文26个大写字母&#…

什么叫ASCII码

一个字符A,以 字符和整型都可以输出。因为字符A也是以二进制存储,这个二进制对应一个整数 那究竟什么是ASCII码? ASCII不是一个值,而是一种规定。 ASCII规定了不同字符是使用哪个整数值表示 它规定: A --65 B --…