前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【玩转Lighthouse】在Lighthouse配置Vim的YouCompleteMe:文本编辑更清爽和强大,并具有一定的IDE能力

【玩转Lighthouse】在Lighthouse配置Vim的YouCompleteMe:文本编辑更清爽和强大,并具有一定的IDE能力

原创
作者头像
Mintimate
发布2022-04-22 10:05:50
1.8K6
发布2022-04-22 10:05:50
举报
文章被收录于专栏:Mintimate's BlogMintimate's Blog
头图怎么能少呢
头图怎么能少呢

作者:Mintimate

博客:https://www.mintimate.cn Mintimate's Blog,只为与你分享

Vim&YCM

Vim的强大已经是毋庸置疑了。并且开源社区内大佬们十分活跃,满满的安全感^_^。本文将介绍Vim如何编译安装,并支援Python,进而安装号称最难安装的Vim插件:YouCompleteMe。以下为了方便,我简称为:YCM。配合它,可以让你的Vim文本编辑更强大和清爽,并具有一定的IDE能力。不能说完全媲美IDE,但是也算多了个不错的工具啦。

当然,如果你喜欢用emacs,同样十分OK啦。

最终效果Demo
最终效果Demo

Vim

Vim的安装和使用,我在之前的文章就已经介绍:

YCM

项目的地址,其实已经说得很详细,比如:

It has several completion engines built in and supports any protocol-compliant Language Server, so can work with practically any language.

YCM项目地址
YCM项目地址

之所以号称最难安装的Vim插件…… 我觉得主要是两个原因:

  • 需要重新编译Vim并支援Python(推荐支援Py3)。
  • 国内需要处理网络问题。

不过,本文都会帮你解决上述问题。不用担心啦~~

安装逻辑:

YCM安装逻辑
YCM安装逻辑

准备工具

嗯…… 只是配置一个Vim插件罢了…… 所以需要的工具:

  • 服务器:一台Lighthouse(Linux系统,e.g. Debian、CentOS)

Windwos虽然也有Vim,但是我个人用Windows比较少,加上我没有Windows Server的服务器。这里不做演示。

我这里主要演示Lighthouse的Debian和CentOS镜像,其他基于上述进行的应用镜像也可以按我的操作(如:SRS应用镜像、Wordpress应用镜像等)。

我使用的镜像
我使用的镜像

编译Vim

首先,我们SSH登录我们的Lighthouse服务器,如果不知道怎么SSH连接服务器,可以参考文章:

查看Vim版本:

代码语言:shell
复制
vim -v
查看Vim版本
查看Vim版本

目前(2022.04)Lighthouse自带的Vim版本为8.1.1401;但是查看YCM的官网,目前最新YCM支援的版本为8.1.2269

YCM项目官网介绍
YCM项目官网介绍

所以,我们需要安装新版本的Vim。本文使用的方法是编译新版本Vim

克隆Vim源码

首先,我们使用Git克隆Vim的最新源码,或者是分支版本。Vim的官方项目仓库地址:

这里我直接克隆最新master分支:

代码语言:shell
复制
# 创建一个目录,方便管理
mkdir ~/myApplications/Source -p
# 进入目录
cd ~/myApplications/Source
# 克隆Vim源码
git clone https://github.com/vim/vim.git
克隆完成
克隆完成

支援Python3

在编译安装Vim前,我们需要配置Python3,使其后续Vim能支援到Python3。方法很多,这里选择最简单的方法:软件包安装Python3和Python3-dev:

代码语言:shell
复制
sudo apt install python3
sudo apt install python3-dev
安装Python3和Python3-dev
安装Python3和Python3-dev

支援Ruby(可选)

为了让我们的Vim也支援Ruby,我有时候会那Vim去编辑Reby。我们也事先用软件包安装一下:

代码语言:shell
复制
sudo apt install ruby-dev -y
安装ruby-dev
安装ruby-dev

configure配置

根据源码内configure的配置选项:

./configure -h
./configure -h

我们支援Python3和Ruby,并安装到/usr/local/vim(系统自带的vim保留着没动):

代码语言:c
复制
./configure \
--with-features=huge \
--prefix=/usr/local/vim \
--with-features=huge \
--enable-rubyinterp \
--enable-fail-if-missing \
–-enable-luainterp \
–-enable-perlinterp \
–-enable-fontset \
--enable-python3interp \
--with-python3-command=python3 
编译参数
编译参数

configure配置结束,我们就可以进行编译和安装。

需要注意:

  • 不要支援Python2,否则YCM会无法调取Python(嗯…… 主要是难操作)

编译和安装

接下来我们开始编译和安装,我的Lighthouse是两个CPU,所以设置使用多线程编译:

代码语言:shell
复制
sudo make -j2
编译
编译

Lighthouse的CPU性能强劲,配置个几十秒就好了。

之后是安装:

代码语言:shell
复制
sudo make install
安装
安装

之后,查看我们的编译安装地址,即可发现我们编译安装的vim:

编译安装的Vim
编译安装的Vim

最后,我们配置到用户环境变量:

代码语言:shell
复制
# 对用户环境变量进行追加
echo 'export PATH="/usr/local/vim/bin:$PATH"' >> ~/.bashrc
# 重载环境变量
source ~/.bashrc
环境变量生效
环境变量生效

最后,查看Vim的版本,就是最新版本的Vim了:

我们编译安装的Vim
我们编译安装的Vim

并且,Python成功支援到:

代码语言:javascript
复制
vim --version | grep python
python有支援到
python有支援到

Vim安装vim-plug

我们要安装YCM插件,手动配置是很麻烦的。所以,我们借助vim-plug去激活并管理我们的YCM插件(以及其他插件)。安装方法很简单。

在终端内:

代码语言:shell
复制
# 创建vim插件目录
mkdir  ~/.vim/autoload -p
# 进入其中
cd  ~/.vim/autoload
# 下载vim-plug脚本
wget https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
# GitHub连接不上,可以用jsdelivr
wget https://cdn.jsdelivr.net/gh/junegunn/vim-plug@master/plug.vim

如果vim-plug脚本因为网络问题下载不下来,可以本地下载后,拷贝里面内容并手动在Lighthouse上创建。

下载vim-plug
下载vim-plug

Plug换源

因为vim-plug默认使用GitHub作为插件的抓去地址,但是因为一些原因,中国大陆连接GitHub有点困难大家可以根据自己网络环境,选择换源。

换源的方法很简单,编辑我们刚刚下载的plug.vim文件:

代码语言:shell
复制
vim  ~/.vim/autoload/plug.vim

搜索plug_url_format和git::@github,更改:

代码语言:javascript
复制
let fmt = get(g:, 'plug_url_format', 'https://git::@github.com/%s.git')
\ '^https://git::@github\.com', 'https://github.com', '')

代码语言:javascript
复制
let fmt = get(g:, 'plug_url_format', 'https://git::@hub.fastgit.xyz/%s.git')
\ '^https://git::@hub.fastgit\.xyz', 'https://hub.fastgit.xyz', '')
换源
换源

具体可以参考我以前写的教程:

为了让接下来的YCM能直接Git clone下来附加仓库,我们设置一下GitHub全局重定向:

代码语言:shell
复制
git config --global url."https://hub.fastgit.xyz/".insteadOf "https://github.com/"
git config --global protocol.https.allow always

这里使用的Fastgit对GitHub仓库进行重定向,如果Fastgit无法使用(也就是后续还是卡了),可以试试其他GitHub重定向。有机会和大家说说怎么自建GitHub加速API(*≧ω≦)。

全局重定向
全局重定向

安装YCM

现在,我们可以借助vim-plug,给Lighthouse上的Vim安装YCM。编辑.vimrc文件,添加YCM的项目地址:

代码语言:shell
复制
# 编辑.vimrc文件
vim ~/.vimrc

追加:

代码语言:txt
复制
" 使用vim-plug添加插件
call plug#begin('~/.vim/plugged')
"" 添加YCM插件
Plug 'ycm-core/YouCompleteMe'
call plug#end()
添加YCM插件
添加YCM插件

之后,保存并退出后,再次进入.vimrc后,执行:PlugInstall

YCM仓库下载
YCM仓库下载

在主仓库下载后,vim-plug会帮YCM根据.gitmodule递归下载其附加仓库,比如:

下载附加仓库
下载附加仓库

如果卡某个仓库,比如:卡在下载mrab-regex

卡在下载这里了
卡在下载这里了

手动帮它Git clone,先直接Ctrl+C终止git:

终止git
终止git

之后,退出vim交互后,手动克隆子模块:

查看仓库地址和目录
查看仓库地址和目录

这里mrab-regex是私人仓库,但是GitHub上也有仓库:https://github.com/mrabarnett/mrab-regex。我们使用GitHub上的代替,并继续YCM初始化:

代码语言:shell
复制
# 进入YCM文件夹
cd ~/.vim/plugged/YouCompleteMe
# 子仓库继续克隆
git submodule update --init --recursive
继续克隆
继续克隆

最后,子仓库克隆结束,YCM前期仓库准备结束:

YCM仓库准备结束
YCM仓库准备结束

初始化

现在,我们需要进一步的安装,也就是初始化。进入YCM插件目录:

代码语言:shell
复制
cd ~/.vim/plugged/YouCompleteMe

根据YCM项目官网介绍的编译参数:

YCM安装参数
YCM安装参数

执行:

代码语言:python
复制
python3 install.py --rust-completer --cs-completer --verbose

其中:

  • --rust-completer:支援Ruby;
  • --cs-completer:支援C++/C;
  • --verbose:启动详情日志输出;

本来我还想支援Java的…… 但是一是需要再配置JAVA_HOME,文章太长了……;二是,我平常还是用IDEA编辑Java比较多(・_・;

如果出现Cmake版本缺失或版本太低:

cmake找不到
cmake找不到

可以到cmake项目地址:https://cmake.org/download/,下载cmake并配置。比如:我配置cmake3.23.1

代码语言:shell
复制
# 下载cmake预编译版本
wget https://cdn.jsdelivr.net/gh/Kitware/CMake@releases/download/v3.23.1/cmake-3.23.1-linux-x86_64.tar.gz
# 解压归档文件
tar -xf cmake-3.23.1-linux-x86_64.tar.gz
# 将解压出的cmake移动到/usr/local,并重命名
mv cmake-3.23.1-linux-x86_64 /usr/local/cmake3.23.1
# 环境变量追加
echo 'export PATH=/usr/local/cmake3.23.1/bin:$PATH' >> ~/.bashrc
# 重载环境变量
source ~/.bashrc
配置Cmake
配置Cmake
cmake版本
cmake版本

之后,回到YCM插件目录,执行安装脚本:

代码语言:shell
复制
cd ~/.vim/plugged/YouCompleteMe
python3 install.py --rust-completer --cs-completer --verbose
继续安装YCM
继续安装YCM

但是,如果你的Lighthouse,是大陆服务器且碰巧无法连接GitHub,这里会卡住的话:

下载Omnisharp卡住
下载Omnisharp卡住

这个时候,又要祭出换源大法了◡ ヽ(`Д´)ノ ┻━┻

观察YCM源码脚本可以知道,这个脚本写在:YCM插件模块/third_party/ycmd/build.py内,我们编辑这个文件:

代码语言:shell
复制
# 当前在YCM模块内
vim third_party/ycmd/build.py
build.py
build.py

查找关键词:github,把文件下载地址改成自己Lighthouse可以直接连接到的地址即可:

需要替换的文件地址1
需要替换的文件地址1
需要替换的文件地址2
需要替换的文件地址2

我是本地上次后,上传到我网站里并作为直链了。大家可以想想办法提供直接连接(比如:对象存储桶公开直链、Coding中继等)。

之后,继续安装:

继续安装
继续安装
安装成功
安装成功

到此,我们的YCM就安装完成了。接下来是配置了。

配置YCM

给大家分享一下我的YCM配置,在.vimrc内添加YCM全局配置:

代码语言:shell
复制
let g:ycm_global_ycm_extra_conf='~/.vim/.ycm_extra_conf.py'
" 开启 YCM 基于标签引擎
let g:ycm_collect_identifiers_from_tags_files=1
" 从第2个键入字符就开始罗列匹配项
let g:ycm_min_num_of_chars_for_completion=2
" 禁止缓存匹配项,每次都重新生成匹配项
let g:ycm_cache_omnifunc=0
" 语法关键字补全
let g:ycm_seed_identifiers_with_syntax=1
YCM配置
YCM配置

之后,保存并退出。我们随便打开一个Python文件(普通文件也可以……),就可以自动代码提示和补全了:

代码补全
代码补全

额外插件

最后,再推荐插件:

安装方法很简单,同样适用vim-plug帮我们引用:

代码语言:javascript
复制
Plug 'preservim/nerdtree'
Plug 'kien/rainbow_parentheses.vim'
Plug 'pangloss/vim-javascript'
追加配置
追加配置

之后,和刚刚一样:保存并退出,之后重新进入并执行:PlugInstall

安装插件
安装插件

最后,再追加配置:

代码语言:javascript
复制
" nerdtree配置
autocmd StdinReadPre * let s:std_in=1
autocmd VimEnter * NERDTree | if argc() > 0 || exists("s:std_in") | wincmd p | endif
autocmd BufEnter * if tabpagenr('$') == 1 && winnr('$') == 1 && exists('b:NERDTree') && b:NERDTree.isTabTree() | quit | endif

" RGB彩色括号
let g:rbpt_colorpairs = [
    \ ['brown',       'RoyalBlue3'],
    \ ['Darkblue',    'SeaGreen3'],
    \ ['darkgray',    'DarkOrchid3'],
    \ ['darkgreen',   'firebrick3'],
    \ ['darkcyan',    'RoyalBlue3'],
    \ ['darkred',     'SeaGreen3'],
    \ ['darkmagenta', 'DarkOrchid3'],
    \ ['brown',       'firebrick3'],
    \ ['gray',        'RoyalBlue3'],
    \ ['black',       'SeaGreen3'],
    \ ['darkmagenta', 'DarkOrchid3'],
    \ ['Darkblue',    'firebrick3'],
    \ ['darkgreen',   'RoyalBlue3'],
    \ ['darkcyan',    'SeaGreen3'],
    \ ['darkred',     'DarkOrchid3'],
    \ ['red',         'firebrick3'],
    \ ]
let g:rbpt_max = 16
let g:rbpt_loadcmd_toggle = 0
au VimEnter * RainbowParenthesesToggle
au Syntax * RainbowParenthesesLoadRound
au Syntax * RainbowParenthesesLoadSquare
au Syntax * RainbowParenthesesLoadBraces

保存并退出,即可看到效果:

最终效果
最终效果

这样,Vim就具备一定的 IDE功能了。

END

到此,YouCompleteMe和它的“好朋友们”就安装并配置完成了。

你也可以配合ZSH,获得更好的Shell体验:

编辑ZSH配置文件
编辑ZSH配置文件
ZSH
ZSH

参考教程:


有些人可能会说,用Vscode、IDEA之类的编辑器或者集成开发工具不好么?当然好,而且很方便;但是Vim安装YCM,是让你的Vim支持更多功能;有时候,我们可能需要修改Python脚本内某些数据,直接在Lighthouse服务器上用Vim就可以直接操作,亦或者直接编辑Nginx文件,还是挺方便的。

多一个方法,多条路;可不是让你丢弃开发环境,全部使用Vim进行开发哦。

这篇文章这么长…… 会不会劝退很多人呢?那就先点赞、收藏,以后再看吧~~~

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Vim&YCM
    • Vim
      • YCM
      • 准备工具
      • 编译Vim
        • 克隆Vim源码
          • 支援Python3
            • 支援Ruby(可选)
              • configure配置
                • 编译和安装
                • Vim安装vim-plug
                  • Plug换源
                  • 安装YCM
                    • 初始化
                    • 配置YCM
                    • 额外插件
                    • END
                    相关产品与服务
                    轻量应用服务器
                    轻量应用服务器(TencentCloud Lighthouse)是新一代开箱即用、面向轻量应用场景的云服务器产品,助力中小企业和开发者便捷高效的在云端构建网站、Web应用、小程序/小游戏、游戏服、电商应用、云盘/图床和开发测试环境,相比普通云服务器更加简单易用且更贴近应用,以套餐形式整体售卖云资源并提供高带宽流量包,将热门开源软件打包实现一键构建应用,提供极简上云体验。
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档