因为经常在一堆服务器里面周转,在编辑文件的时候就会出现每个终端的编辑器配置不统一,比如服务器A的vim是有行号、带语法高亮,而到了服务器B编辑却是连vim都没装,到了服务器C又发现缩进是八个空格而不是4个空格。总之每换一台服务器就像来到一个不同的世界。
更不用说有时候会遇到重装,原有的编辑器配置又得一一恢复,好麻烦啊。
(╯‵□′)╯︵┻━┻
所以就有了此文,统一所有服务器的编辑器。做到每一台服务器使用 vim
命令编辑文件都是一样的编辑器环境。
先上效果图:
“效果图”什么的都是骗人的啊。思路
为了让全部服务器的vim编辑器界面一样(包括插件),所以我们得打包起来存到一个地方,可以让所有服务器获取这个编辑器的最新版本。
所以最简单的就是丢进一个Docker镜像里面了。
- 把vim放进一个Alpine镜像中,使用类似下面的命令即可编辑一个本地当前目录下的文件了。
alias editor='docker run -ti --rm -v $(pwd):/workspace zuolan/vim'
- 配置修改可以通过环境变量或者挂载数据卷来实现。
- 添加插件可以重新构建镜像,也同样可以挂载数据卷添加插件。
整体不复杂,只需要把整个配置丢进去就好了。
Dockerfile
首先写 Dockerfile 吧。
FROM alpine:latest
MAINTAINER zuolan <i@zuolan.me>
ENV HOME /home/user
RUN mkdir -p /home/user/workspace
一步步解释,上面是新建一个HOME目录,作为容器内部的“接口”,以后数据卷都会挂载到这里,然后交给容器内部的vim编辑。
继续,
RUN apk add --update --no-cache vim && \
rm -rf /var/cache/* /var/log/* /var/tmp/*
ENTRYPOINT ["vim"]
这样我就有了一个vim镜像,当然,这是非常简陋的,所以接下来要为它添加一些配置和插件。
REPOSITORY TAG IMAGE ID CREATED SIZE
zuolan/vim latest 3c4a2c3e0aac 45 seconds ago 29.63 MB
修改配置文件与添加 Pathogen
因为是直接apk add安装,所以配置文件不出意外就是/etc/vim/vimrc这个文件了。
现在补充一下Dockerfile,添加语法高亮以及插件、缩进等等:
RUN ... ... ...
echo "syntax on" >> /etc/vim/vimrc && \
echo "filetype plugin indent on" >> /etc/vim/vimrc
好了,接下来安装 Pathogen,用来管理vim插件。
RUN apk add --update --virtual curl && \
mkdir -p ~/.vim/bundle ~/.vim/autoload ~/.vim_runtime/temp_dirs && \
curl -LSso ~/.vim/autoload/pathogen.vim https://tpo.pe/pathogen.vim && \
echo "execute pathogen#infect()" >> /etc/vim/vimrc && \
echo "syntax on" >> /etc/vim/vimrc && \
echo "filetype plugin indent on" >> /etc/vim/vimrc && \
apk del curl && rm -rf /var/cache/* /var/log/* /var/tmp/*
扩展
现在我们继续完善,虽然还没有插件,但是基本都有了。要实现上面说的让用户自定义配置,可以通过挂载 /etc/vim/vimrc
这个文件,以及 ~/.vim/bundle
这个文件夹。
以下纯属个人自定义了。
# 插件依赖
RUN apk --update add curl ctags git python bash ncurses-terminfo && \
# 安装 YouCompleteMe
apk add --virtual build-deps go llvm perl cmake python-dev build-base && \
git clone --depth 1 ~/.vim/bundle/YouCompleteMe/ && \
cd ~/.vim/bundle/YouCompleteMe && \
git submodule update --init --recursive && \
~/.vim/bundle/YouCompleteMe/install.py --gocode-completer && \
# 安装 procvim.vim
git clone --depth 1 ~/.vim/bundle/vimproc.vim && \
cd ~/.vim/bundle/vimproc.vim && \
make && \
# 清理
rm -rf ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp /usr/lib/go \
~/.vim/bundle/YouCompleteMe/third_party/ycmd/clang_includes && \
apk del build-deps && \
apk add libxt libx11 libstdc++
RUN cd ~/.vim/bundle/ && \
git clone --depth 1 && \
... ... ... ...
... ... ... ...
... ... ... ...
... ... ... ...
# 自定义配置
curl -s >> /etc/vim/vimrc && \
curl -s >> /etc/vim/vimrc && \
sed -i '/colorscheme peaksea/d' /etc/vim/vimrc && \
vim -E -c 'execute pathogen#helptags()' -c q ; return 0
... ... ... ...
... ... ... ...
还有一些地方没完成,明天接着吧,果然一个晚上是搞不定。
(╯‵□′)╯︵┻━┻
ENV TERM=xterm-256color
为启动容器时的 --tty 这个启动参数指定环境变量,这个问题在Docker 1.13修复了,但是这个变量还是保留一下吧。