您的当前位置:首页折腾一个自己的“云编辑器”(1)

折腾一个自己的“云编辑器”(1)

2024-12-09 来源:哗拓教育

因为经常在一堆服务器里面周转,在编辑文件的时候就会出现每个终端的编辑器配置不统一,比如服务器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修复了,但是这个变量还是保留一下吧。

显示全文