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
'''

備忘録(Japanese)

Menu

to top