pyenvとminicondaを使ったneovim用のpython環境
setup_nvim.sh
#!/bin/bash
set -eu
mkdir -p ~/.config/nvim
export PYENV_VERSION='miniconda3-latest'
echo "let g:python3_host_prog = '$(pyenv which python)'" > ~/.config/nvim/python.vim
pip install -U neovim flake8
export PYENV_VERSION='miniconda2-latest'
echo "let g:python_host_prog = '$(pyenv which python)'" >> ~/.config/nvim/python.vim
pip install -U neovim
nvimの設定
~/.config/nvim/init.vim
" --
" initialize (deinより前に書く)
augroup my_group
au!
augroup END
" --
" load dein
if has('nvim') && filereadable(expand(':p:h').'/dein.vim')
source :p:h/dein.vim
endif
" --
" enable auto-indenting & highlight
filetype plugin indent on
syntax enable
" --
" ubuntuでのバグ回避(https://github.com/neovim/neovim/issues/6403)
"let $NVIM_TUI_ENABLE_CURSOR_SHAPE=0
" Nvim 0.2+から無効
set guicursor=
" --
" 基本設定
set title
" titleを表示
"
set lazyredraw
" terminal上でスクロールが遅くなるのを回避
set pumheight=10
" 補完ポップアップの高さ
set ignorecase
" 大文字と小文字を区別しない
set smartcase
" 大文字で検索したときは区別
set noincsearch
" インクリメンタルサーチを無効(Enterを押すまで探し始めない)
set nowrap
" 折り返さない
set scrolloff=5
" スクロール時に最低上下5行は表示
set number
" 行数表示
set showmatch
" 対応カッコを強調表示
set matchtime=1
" 対応カッコの表示時間は1s
set list listchars=tab:>-
" 不可視文字を表示
"set clipboard+=unnamedplus
" クリップボード有効化 (外部コマンドxclip/xselが必要, Macならpbcopy/pbpaste)
" ssh越しだと使えない
let g:tex_conceal = ''
" texハイライト示表をoff (https://github.com/vim-jp/issues/issues/529)
" --
" 日本語用の設定
setlocal formatoptions+=mM
" 連結時に空白を入れない
set spelllang=en,cjk
" 日本語はスペルチェックしない
set ambiwidth=double
" ○等のマルチバイト文字の表示くずれ防止
" (うまくいかない)
" --
" indent & tab
set autoindent
" 改行時に前のインデントを継続する
set expandtab
" tabは空白に変換
set smarttab
" shiftwidthを有効化
set ts=2
" [tabstop]
set sw=2
" [shiftwidth]
set sts=2
" [softtabstop]
" --
" shortcuts
tmap
" Escでterminal mode(nvimで追加)を抜ける
nmap :noh
" esc2回でハイライトoff
nmap :set spell
" F9でスペルチェックon
"
nmap :set nospell
" F10でスペルチェックoff
" --
" autocommand
augroup my_group
au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") |
\ exe "normal! g`\"" |
\ endif
"カーソルの位置を最後にカーソルがあった位置まで移動
"au WinLeave * set nocursorline
"au WinEnter,BufRead * set cursorline
"au WinLeave * set nocursorcolumn
"au WinEnter,BufRead * set cursorcolumn
" 現在位置にカーソルを引く
au FileType python set ts=8 sw=4 sts=4
au FileType python set colorcolumn=80
" 80行目に縦線を表示
" tex
au BufRead,BufNewFile *.tex set wrap
au BufRead,BufNewFile *.tex set spell
augroup END
Deinの設定
~/.config/nvim/dein.vim
" initialize
if &compatible
set nocompatible
endif
let s:dein_dir = expand(':p:h')
let s:dein_repo_dir = s:dein_dir.'/repos/github.com/Shougo/dein.vim'
" install if not exists
if !isdirectory(s:dein_repo_dir)
call system('git clone https://github.com/Shougo/dein.vim '.s:dein_repo_dir)
endif
" add runtimepath
let &runtimepath = &runtimepath.",".s:dein_repo_dir
" load python_host
if filereadable(expand(':p:h').'/python.vim')
source :p:h/python.vim
endif
" plugin manger
if dein#load_state(s:dein_dir)
call dein#begin(s:dein_dir)
call dein#load_toml(s:dein_dir.'/dein.toml')
call dein#load_toml(s:dein_dir.'/python.toml')
call dein#end()
call dein#save_state()
endif
" install missing plugins
if dein#check_install()
call dein#install()
endif
~/.config/nvim/dein.toml
[[plugins]]
repo = 'Shougo/dein.vim'
[[plugins]]
repo = 'Shougo/vimproc.vim'
hook_post_update = '''
let g:dein#plugin.build = 'make'
'''
# 下部にステータスラインを表示
[[plugins]]
repo = 'itchyny/lightline.vim'
hook_add = '''
let g:lightline = {
\ 'colorscheme': 'wombat',
\ }
'''
# colorscheme
[[plugins]]
repo = 'w0ng/vim-hybrid'
hook_add = '''
set background=dark
let g:hybrid_custom_term_colors = 1
augroup my_group
au VimEnter * nested colorscheme hybrid
augroup END
'''
# 一括コメントアウト
[[plugins]]
repo = 'tpope/vim-commentary'
# ftを判定する
[[plugins]]
repo = 'Shougo/context_filetype.vim'
on_ft = 'toml'
# ftに合わせてcolorを切り替える
[[plugins]]
repo = 'osyo-manga/vim-precious'
depends = 'context_filetype.vim'
on_ft = 'toml'
# toml syntax
[[plugins]]
repo = 'cespare/vim-toml'
on_ft = 'toml'
# 行末のスペースをハイライト
[[plugins]]
repo = 'bronson/vim-trailing-whitespace'
# 仮想ターミナル
[[plugins]]
repo = 'kassio/neoterm'
hook_add = '''
let g:neoterm_repl_python = 0
let g:neoterm_autoinsert = 1
" opens in insert mode
let g:neoterm_default_mod = "botright"
'''
# 自動保存
[[plugins]]
repo = 'vim-scripts/vim-auto-save'
hook_add = '''
" enalbe AutoSave
let g:auto_save = 1
" do not change the 'updatetime' option
let g:auto_save_no_updatetime = 1
" do not save while in insert mode
let g:auto_save_in_insert_mode = 0
" do not display the auto-sve notification
let g:auto_save_silent = 1
'''
# スクリプトをその場で実行
[[plugins]]
repo = 'thinca/vim-quickrun'
hook_add = '''
" 一番下にウィンドウを分割させて実行結果を出力, 出力がなければ自動的に閉じる
let g:quickrun_config = {
\ '_': {
\ 'runner': 'vimproc',
\ 'runner/vimproc/updatetime': 40,
\ 'outputter': 'error',
\ 'outputter/error/success': 'quickfix',
\ 'outputter/error/error' : 'quickfix',
\ 'outputter/buffer/split' : ':botright 8sp',
\ 'outputter/buffer/close_on_empty': 1,
\ }
\ }
nmap ,r :QuickRun -mode n
vmap ,r :QuickRun -mode v
'''
~/.config/nvim/python.toml
# インデントをハイライト
[[plugins]]
repo = "nathanaelkane/vim-indent-guides"
on_ft = 'python'
hook_add = '''
" 起動時に有効
let g:indent_guides_enable_on_vim_startup = 1
" 色をつける幅(0ならshiftwidthと同じ値)
let g:indent_guides_guide_size = 1
" 0なら以下で色を指定
let g:indent_guides_auto_colors = 0
" 色指定
augroup my_group
au VimEnter,Colorscheme * hi IndentGuidesEven ctermbg=242
au VimEnter,Colorscheme * hi IndentGuidesOdd ctermbg=239
augroup END
'''
# ALE
[[plugins]]
repo = 'w0rp/ale'
on_ft = 'python'
hook_add = '''
" 有効にするlinter
let g:ale_linters = {
\ 'python': ['flake8'],
\ }
" 固定パス
let g:ale_python_flake8_executable = g:python3_host_prog
" オプション + 無視する規約
let g:ale_python_flake8_options = '-m flake8 --ignore=E226,E501'
" 左端のカラムを表示したままにしない
let g:ale_sign_column_always = 0
" ファイルを開いたときにlint実行
let g:ale_lint_on_enter = 1
" ファイルを保存したときにlint実行
let g:ale_lint_on_save = 1
" 編集中はチェックしない
let g:ale_lint_on_text_changed = 0
'''
# 自動でpep8に準じてインデント
[[plugins]]
repo = 'hynek/vim-python-pep8-indent'
on_ft = 'python'
# 自動補完
[[plugins]]
repo = 'davidhalter/jedi-vim'
on_ft = 'python'
hook_add = '''
" Ctrl + N で候補を表示
let g:jedi#completions_command = ""
" .を打つだけで候補を表示しない
let g:jedi#popup_on_dot = 0
" 関数の引数を表示
let g:jedi#show_call_signatures = 1
" 引数を表示するまでの時間(ms)
let g:jedi#show_call_signatures_delay = 100
" 補完機能を有効化
let g:jedi#smart_auto_mappings = 1
" 別windowでhelpを表示しない
augroup my_group
au FileType python setlocal completeopt-=preview
augroup END
'''
# =の前後に自動でスペースをいれる。またキーを押す回数で入力が変わる。
[[plugins]]
repo = "kana/vim-smartchr.git"
on_ft = 'python'
hook_add = '''
augroup my_group
au FileType python inoremap = smartchr#loop(' = ', ' == ', '=')
augroup END
'''