分类 默认分类 下的文章

YouCompleteMe在Windows环境下安装折腾记录

YCM以安装设置繁琐出名
但最近的版本对于这方面已经有了相当的提升
只要确保环境配置满足需求,安装步骤相对以往会顺利很多
这里记录下在Win8.1系统环境下安装的流程和遇到的问题

通过Vundle安装应该是最方便的了

在vimrc中加上

Plugin 'valloric/youcompleteme'

保存后,执行

:source ~/_vimrc
:VundleInstall

来安装YCM在Vim部分的插件

接着开始配置环境

首先是Vim

Vim 7.4.1578 with Python 2 or Python 3 support
确保使用不低于7.4的带有python支持的vim版本
确保vim为utf8编码,确保在vimrc中有相关设置:

set encoding=utf-8

下一个,Python。Python2 或 Python3均可

x86还是x86-64看清楚
注意所用版本要与系统一致

安装CMake

安装Visual Studio Community

以前用了很久的2013。后来发现开发很多东西都要求高于此版本的VS了
干脆装个2017

安装VisualStudio 2015或更高版本。免费的社区版就行
并确保已包含下列组件:(这里的选择是我几次编译失败试出来的,不确保没有冗余)
Image.png

环境变量

需要注意的是,上文中提到组件中,无论是CMake还是python还是pip还是VS,确保其相关执行文件在系统的环境变量中
可以在命令行使用

echo %PATH%

检查一下

环境就绪,进入安装步骤

在cmd下进入ycm的目录。在我电脑上的路径如下:

cd %USERPROFILE%\.vim\bundle\youcompleteme\

执行官方推荐的方法:

python install.py --clang-completer

如果安装的VS不是2019版本,则会遇到以下错误:
Image2.png

可以通过参数(--msvc)更改所用VS版本
修改安装方法如下,2017为15,2015为14,依此类推

python install.py --clang-completer --msvc 15

等待打包编译和部分组件下载

这个步骤涉及下载,耗时可能会较久
中间也可能出现异常,并报出hash不一致的错误。这是由于网络状态不好或中断导致的
重来一遍即可

ycmd安装完成

完成后,重新打开Vim
有可能Vim里会直接提示YCMD server shutdown。YCM服务直接崩了
尝试查看错误log,发现对应的崩溃log是空的

经查发现
log空是因为ycmd在进入可记录log的状态之前就停掉了

通过手动启动ycmd的方法可以排查:

cd ~/.vim/bundle/YouCompleteMe/third_party/ycmd
cp ycmd/default_settings.json .
python ycmd --options_file default_settings.json

一般来说这一步会报python的错误,提示缺某个库。例如:

AttributeError: 'module' object has no attribute 'frozendict'

配置好pip,用pip安装对应的库。同时安装了python2和3的话要留意下对应的是哪个库
装好后再次尝试手动启动,很可能还会出现类似的错误,仍然是缺库
重复上述步骤直到执行后服务顺利启动(命令行状态下没有任何报错或者提示)
手动中止服务

根据YCM官网README的用法
将ycm目录\third_party\ycmd目录下的.ycm_extra_conf.py复制到对应的工程根目录

就绪

在vim中使用YcmRestartServer重启服务
若一切正常,vim会定位到刚才复制的.ycm_extra_conf.py,根据配置文件调整ycmd的启动
并出现如下提示:
Image3.png

OK即可

dnscrypt-proxy折腾和记录

可能是因为工作环境有些特殊设置,之前只能将dns设置为路由地址192.168.1.1,否则无法解析任何url。
但这样一来极就无法应对dns污染了。后果就是非常影响平时的网络访问速度

尝试用dnscrypt-proxy搭建服务,来加密和强制使用tcp来穿透内网对dns的配置限制。效果拔群

下载

解压后能看到目录中包含这两个文件

dnscrypt-proxy.conf
dnscrypt-resolvers.csv

csv文件中包含了当前可用的resolver
在conf文件中改成要使用的resolver名称
并调整剩余选项(例如是否强制使用tcp)
这里可以多测试几个resolver的ip地址,看哪个更快点

cmd下执行

dnscrypt-proxy.exe dnscrypt-proxy.conf

可以在命令行中看到实时效果
待提示就绪后,将本地连接的dns改为127.0.0.1
并在cmd下使用nslookup尝试解析几个域名,看配置有没有成功

测试成功后,执行

dnscrypt-proxy.exe --install-with-config-file=dnscrypt-proxy.conf

让dnscrypt作为windows的系统服务安装
之后保持系统的dns为127.0.0.1就能保持使用dnscrypt处理后的dns了