2022 mac Vim 简易配置笔记
心血来潮用vim,然后免不了开始搞各种配置.
适合 Mac 的教程都很零碎,或者偏老,所以自己整理一个
知乎的说法是 Vim8 无脑切 NeoVim, Vim9 随意,于是在 Vim9 和 NeoVim 之间我选择了前者 (因为我喜欢在 zsh 里面操作所以完全没有考虑 macvim 这种东西)
其实本来用的是NeoVim,但是说 NeoVim 的包管理器用 packer 比较好,但是我又不会 lua,学了估计 Packer 的教程还要孤儿,装 YouCompleteMe 的时候问题百出,遂换成了 Vim
中间还是看了一些视频和资料,没看到太好的整合,所以自己简单写点,这篇也会作为我的 vim 配置逐一完善
安装 Vim ,配置 python
Mac 原生自带的 Vim 是不支持 Python3 的,因此我们要重新装一个,并且加入到 PATH 中
1 | brew install vim |
我这里拿到的 vim 在 /opt/homebrew/opt/vim/bin
中,具体情况视 brew 信息而定
然后执行
1 | vim --version | grep python |
如果是新的 Vim 9,python3 之前应该有一个 +,说明了支持 python3
我的配置在看了 韦易笑 大佬的 回答 之后放在 github 仓库上,本地配置里面只有一句
1 | source ~/myVim/init.vim |
curl 下载 vim-plug
vim-plug 是 vim 的插件管理器
1 | curl -fLo ~/.vim/autoload/plug.vim --create-dirs \ |
传输完成后 plug.vim 就存放在了 ~/.vim/autoload/
中
然后我们 vim ~/.vimrc
或者是自己的配置文件,在设置中加入
1 | " junnegunn/vim-plug |
同时创建对应的 ~/.vim/plugged
目录来存放下载的插件,一般来说会自动创建
执行:w
:so %
保存,并且使用当前配置文件
执行 :PlugInstall
,Vim-Plug 就会帮忙下载管理对应的插件了,输入 :Plug 按 Tab 可以查看其余的命令
输入 :PlugStatus
可以查看插件状态
用 Markdown-Preview.vim 实现 Markdown 实时预览
该插件需要 vim 支持 python3
上面片段中 8,9两行就是实现实时预览所需要的插件,mathjax-support-for-mkdp
实现了对数学公式的支持,取消注释,下载插件即可
以下是我的设置片段,相关功能直接看该插件的 Readme 或许更好
1 | " Markdown预览功能 |
之后没有问题的话就可以正常启动了
YouCompleteMe 插件安装
这个破东西搞了我大半天时间,最后发现还是 Python 版本的锅,上一次因为 Python 版本被搞的这么惨好像还是在安卓测试的时候2333..
本来正常加入
1 | plug('ycm-core/YouCompleteMe') |
准备好 YouCompleteMe 所需要的依赖项:1
brew install cmake python mono go nodejs llvm
然后 :PlugInstall
等待下面出现提示说下载完成,但是要编译后才能用 balabala
然后准备 python3 编译 ycm 的一些库
1 | pip3 install flake8 |
然后到 ~/.vim/plugged/YouCompleteMe
里面去跑
1 | python3 install.py --all |
即可
然后就是个人配置时间了,这个配置文件什么的google下挺方便
还是把我的贴一下1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17" YouCompleteMe Settings
let g:ycm_collect_identifiers_from_tags_files = 1 " 开启 YCM 基于标签引擎
let g:ycm_collect_identifiers_from_comments_and_strings = 1 " 注释与字符串中的内容也用于补全
let g:syntastic_ignore_files=[".*\.py$"]
let g:ycm_seed_identifiers_with_syntax = 1 " 语法关键字补全
let g:ycm_complete_in_comments = 1
let g:ycm_confirm_extra_conf = 0 " 取消每次打开确认extra_conf文件
let g:ycm_key_list_select_completion = ['<c-n>', '<Down>'] " 映射按键, 没有这个会拦截掉tab, 导致其他插件的tab不能用.
let g:ycm_key_list_previous_completion = ['<c-p>', '<Up>']
let g:ycm_complete_in_comments = 1 " 在注释输入中也能补全
let g:ycm_complete_in_strings = 1 " 在字符串输入中也能补全
let g:ycm_collect_identifiers_from_comments_and_strings = 1 " 注释和字符串中的文字也会被收入补全
let g:ycm_show_diagnostics_ui = 0 " 禁用语法检查
let g:ycm_clangd_args=["-header-insertion=never"] " clangd的argument加在这里,以 string list 的形式
inoremap <expr> <CR> pumvisible() ? "\<C-y>" : "\<CR>" | " 回车即选中当前项
nnoremap <c-j> :YcmCompleter GoToDefinitionElseDeclaration<CR>| " 跳转到定义处
"let g:ycm_min_num_of_chars_for_completion=2 " 从第2个键入字符就开始罗列匹配项
个人翻车记录
上述是正常流程,然而我结束之后总是给我报错,ycm server shut down, exit code -11 balabala一大堆
我说,这是怎么回事呢(恼
当时想到昨天晚上帮 zjj 看 tensorflow 的依赖项,自己整了个miniforge,用 conda 整了两个版本的 python 也玩了一玩,我想估计是自己用 python3 的时候调出来的是 conda 里的,而 vim 选择的是系统自带的,因为之前 neovim 折腾的时候他非常智能的给我选择一个 python 路径,我换回 vim 之后没有意识到这事儿
我说婷婷,好了我知道了,给系统路径里的 python 也把 module 整上就行了,我全都防出去了啊,点到为止
然后又花很久,重新下,编译,中间还一直怀疑 nvim 或者 vim-plugin 的问题,因为网上这方面的教程实在太少了,清一色的 vunble,我看比较新的知乎回答里都是推荐 vim-plugin 的,我想那应该没有问题
结果这个 ycm 不讲武德,还是编译完了趁我写 cpp 搞偷袭,还是跑不起来,一直到晚上,我灵机一动,系统输出 python3 print(sys.version),然后再在 vim 里面调 python 跑一遍
结果我愣了,系统的是 3.9.14
,而 vim 里输出的是 3.10.7 (main, Sep 14 2022, 22:38:23) [Clang 14.0.0 (clang-1400.0.29.102)]
,conda 里面又是一个 3.10.6 | packaged by conda-forge | (main, Aug 22 2022, 20:38:29) [Clang 13.0.1 ]
和 3.9.0 | packaged by conda-forge | (default, Nov 26 2020, 07:55:15) [Clang 11.0.0 ]
整个人都凌乱了,,我才意识我在之前被两个 python 的版本坑过一次后,又加了两个 conda 虚拟环境继续坑了自己一把
好在问题总算是解决了(悲
一些十分方便的操作
:new file 指令创建分屏,并用ctrl+w+[option] 方向键进行窗口转换
:!wget -p [path] [url] 写的时候如果需要什么文件,图片,可以用 wget 拿到指定的目录下,这在 vim 中十分快捷