Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5608

個人設定込みNeovimのDokcerイメージを作成した

$
0
0

個人設定込みNeovimのDockerイメージを作成した。

ビルド用のスクリプトをGithubにアップロードして、Docker HubにAutomated Buildを設定した。

動作環境

以下の環境で使用している。

  • MacBook'12 2017 core-m3
  • macOS High Sierra
  • Docker for Mac

使い方

# ビルド
git clone https://github.com/succi0303/my-neovim-dockerized.git
cd my-neovim-dockerized
docker build -t nvim .# 実行
docker run -it--rm-v$(pwd):/usr/src/nvim nvim [filename]

または

docker pull succi0303/neovim
docker run -it--rm-v$(pwd):/usr/src/nvim succi0303/neovim [filename]

毎回、docker runを打ち込むのは面倒なので、シェルのrcファイルでnvimのエイリアスに上記コマンドを設定する。

内容

2018年5月時点の内容。Githubのファイルは随時アップデートしていく。

  • Dockerfile
FROM ubuntu:latestLABEL maintainer="succi0303@gmail.com"RUN apt-get update -y&&\
    apt-get install-y software-properties-common &&\
    apt-add-repository -y ppa:neovim-ppa/stable &&\
    apt-get update -y&&\
    apt-get install-y\
    curl \
    git \
    language-pack-ja-base \
    language-pack-ja \
    neovim \
    python-dev \
    python-pip \
    python3-dev \
    python3-pip

ENV LANG="ja_JP.UTF-8" LANGUAGE="ja_JP:ja" LC_ALL="ja_JP.UTF-8"RUN pip3 install--upgrade neovim

RUN curl -fLo /root/.local/share/nvim/site/autoload/plug.vim --create-dirs\
    https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim

COPY .config /root/.configRUN nvim +PlugInstall +qa

WORKDIR /usr/src/nvimENTRYPOINT ["nvim"]
  • .config/nvim/init.vim
" vim-plugcall plug#begin('~/.local/share/nvim/plugged')

Plug 'airblade/vim-gitgutter'
Plug 'cespare/vim-toml'
Plug 'cohama/vim-smartinput-endwise'
Plug 'deton/jasegment.vim'
Plug 'easymotion/vim-easymotion'
Plug 'fuenor/qfixgrep'
Plug 'fuenor/qfixhowm'
Plug 'kana/vim-smartinput'
Plug 'kana/vim-textobj-indent'
Plug 'kana/vim-textobj-user'
Plug 'kannokanno/previm'
Plug 'mattn/emmet-vim'
Plug 'nathanaelkane/vim-indent-guides'
Plug 'scrooloose/nerdtree'
Plug 'Shougo/denite.nvim',{'do':':UpdateRemotePlugins'}
Plug 'Shougo/deoplete.nvim',{'do':':UpdateRemotePlugins'}
Plug 'sjl/badwolf'
Plug 'thinca/vim-partedit'
Plug 'thinca/vim-qfreplace'
Plug 'tpope/vim-fugitive'
Plug 'tpope/vim-markdown'
Plug 'tyru/open-browser.vim'
Plug 'tpope/vim-surround'
Plug 'vim-airline/vim-airline'
Plug 'vim-airline/vim-airline-themes'
Plug 'vim-ruby/vim-ruby'
Plug 'vim-syntastic/syntastic'call plug#end()set encoding=UTF-8set fileencoding=UTF-8set termencoding=UTF-8set backspace=indent,eol,startset hidden
set showcmd
set cursorline
setnumberset laststatus=2set showmatch
set incsearch
set display+=lastline
set wildmenu
set ignorecase
set clipboard=unnamed

set tabstop=2set shiftwidth=2set softtabstop=2set expandtab
set smarttab
set autoindent
set smartindent

augroup fileTypeIndent
  autocmd!
  autocmd BufNewFile,BufRead *.pysetlocal tabstop=4 softtabstop=4 shiftwidth=4
augroup END

nnoremap s <Nop>
nnoremap ss :<C-u>sp<CR>
nnoremap sv:<C-u>vs<CR>
nnoremap sj <C-w>j
nnoremap sk <C-w>k
nnoremap sl<C-w>l
nnoremap sh<C-w>h
nnoremap sq :<C-u>q<CR>
nnoremap st:<C-u>tabnew<CR>
nnoremap sn gt
nnoremap sp gT
nnoremap sQ :<C-u>tabclose<CR>

nnoremap <silent>[b:bprevious<CR>
nnoremap <silent>]b:bnext<CR>
nnoremap <silent>[B :bfirst<CR>
nnoremap <silent>]B :blast<CR>

nnoremap <ESC><ESC>:nohlsearch<CR>set wildmode=list,full

set grepformat=%f:%l:%m,%f:%l%m,%f\ \ %l%m,%fset grepprg=grep\ -nh

colorscheme badwolf
set termguicolors
syntax on" denite.vim
nnoremap <silent>,b:Denite buffer<CR>
nnoremap <silent>,c:Denite changes<CR>
nnoremap <silent>,f:Denite file<CR>
nnoremap <silent>,g:Denite grep<CR>
nnoremap <silent>,h:Denite help<CR>
nnoremap <silent>,l:Denite line<CR>
nnoremap <silent>,t:Denite tag<CR>call denite#custom#map('insert','<esc>','<denite:enter_mode:normal>','noremap')call denite#custom#map('normal','<esc>','<denite:quit>','noremap')call denite#custom#map('insert','<C-n>','<denite:move_to_next_line>','noremap')call denite#custom#map('insert','<C-p>','<denite:move_to_previous_line>','noremap')call denite#custom#map('insert','<C-j>','<denite:do_action:split>','noremap')call denite#custom#map('insert','<C-k>','<denite:do_action:vsplit>','noremap')call denite#custom#option('default','prompt','>')call denite#custom#option('default','direction','top')" deoplete.nvimletg:deoplete#enable_at_startup =1" vim-easymothonletg:EasyMotion_startofline=0letg:EasyMotion_smartcase=1" <Leader>f{char} to move to {char}
map <Leader>f<Plug>(easymotion-bd-f)
nmap <Leader>f<Plug>(easymotion-overwin-f)" <Leader>s{char}{char} to move to {char}{char}
map <Leader>s <Plug>(easymotion-bd-f2)
nmap <Leader>s <Plug>(easymotion-overwin-f2)" Move to Line
map <Leader>L <Plug>(easymotion-bd-jk)
nmap <Leader>L <Plug>(easymotion-overwin-line)" Move to word
map <Leader>w<Plug>(easymotion-bd-w)
nmap <Leader>w<Plug>(easymotion-overwin-w)" n-character search
map / <Plug>(easymotion-sn)
omap / <Plug>(easymotion-tn)
map n<Plug>(easymotion-next)
map N <Plug>(easymotion-prev)"hjkl
map <Leader>l<Plug>(easymotion-lineforward)
map <Leader>j<Plug>(easymotion-j)
map <Leader>k<Plug>(easymotion-k)
map <Leader>n<Plug>(easymotion_linebackward)" JpFormatset formatexpr=jpfmt#formatexpr()" nerdtreeletg:NERDTreeShowHidden=1letg:NERDTreeMapActivateNode="<CR>"let file_name = expand("%:p")
nnoremap <C-e>:NERDTreeToggle<CR>" open-browserletg:netw_nogx=1
nmap gx <Plug>(openbrowser-smart-search)
vmap gx <Plug>(openbrowser-smart-search)" syntasticletg:syntastic_auto_loc_list=0" vim-airlineletg:airline#extentions#tabline#enabled =1letg:airline#extentions#tabline#show_buffers =0letg:airline#extentions#tabline#tab_nr_type =1letg:airline#extentions#tabline#fnamemod =":t"letg:airline_theme='badwolf'if!exists('g:airline_symbols')letg:airline_symbols={}endifletg:airline_symbols.branch =''letg:airline_symbols.readonly =''letg:airline_symbols.linenr =''" vim-indent-guidesletg:indent_guides_auto_colors=0
autocmd VimEnter,Colorscheme * :hi IndentGuidesOdd ctermbg=gray
autocmd VimEnter,Colorscheme * :hi IndentGuidesEven ctermbg=darkgray
letg:indent_guides_enable_on_vim_startup=1letg:indent_guides_guide_size=1" vim-partedit
vnoremap <C-l>:Partedit<CR>
noremap <C-h>:ParteditEnd<CR>" vim-smartinput-endwisecall smartinput_endwise#define_default_rules()

工夫したところ

日本語入力を有効にする

ubuntu:latestのイメージには日本語環境が入っておらず、日本語入力が文字化けする。

apt-getでlanguage-pack-ja-baselanguage-pack-jaをインストールし、環境変数にLANG="ja_JP.UTF-8"等を設定することで日本語入力が可能になる。

プラグインマネージャにvim-plugを使う

本当はdein.vimを使いたかったが、docker buildでエラーが発生して使用を諦め、代わりにvim-plugを使用した。RUN nvim +PlugInstall +qaでプラグインインストール用のPlugInstallコマンドを外から叩いている。

dein.vimでもRUN nvim +"call dein#install()" +qaでインストールコマンドの実行はできたが、コマンドがnon-zeroを返す云々でビルドが止まる。詳細な条件は特定できなかったが、どうやらプラグインの数が10件程度を越えると発生するようである。プラグインをinit.vimに直書きするパターンとdein.tomlに分けるパターンを試してみたがどちらも同じ結果だった。

python-providerpipでインストールする

ubuntuの場合、apt-getpython-providerのインストールまで実行できるが、denite.vimを動かすにはバージョンが足りなかった。RUN pip3 install --upgrade neovimpipからインストールすることで解決できた。

課題事項

open-browser

コンテナ内でブラウザを開こうとするため、正常に動作しない。open-browserが動かないため、自動的にprevimも使えない。解決策は今のところ思いつかない。

vim-fugitive

vim-fugitiveでGitの操作を行う場合、コンテナ内のGitが利用される。できれば、ホストの設定を引き継ぎたい。コンテナからホストの.gitconfig.sshフォルダを参照させれば解決できるかも。

howm

qfixhowmでメモの管理をしているが、コンテナ版Neovimからどうやってhowmを使うか。howmフォルダを参照するデータコンテナを作って、docker-composeを設定することを検討中。

参考

Docker in Action」を読みながら試行錯誤した。


Viewing all articles
Browse latest Browse all 5608

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>