neovim 入門1
概要
重い腰を上げてneovimの設定をすることにしたので、ログを残していきます。
現在使っているvimの設定はこちら
neovimとvimの設定を共存させることもできるみたいだが、今回はとりあえず設定ファイルは分けることにして一からneovim環境を整える
公式のリポジトリ : https://github.com/neovim/neovim
環境
- OS : maxOS Sierra
インストール
ソースからビルドとする方法とパッケージを入れる方法があるが今回はパッケージでインストール
どちらの方法も公式のREADMEに書いてある
$brew tap neovim/neovim $brew install neovim $which nvim /usr/local/bin/nvim $nvim #neovimが起動する
設定
まずはneovimを起動して :h nvimしてヘルプを確認
どうやらneovimのディレクトリ構成はXDG Base Directory Specificationをサポートしているらしい
$XDG_CONFIG_HOMEを設定していないなら ~/.config/nvim にinit.vimを置けば~/.vimrcの代わりになる
設定ファイルを置くべき場所とファイル名がわかったので、早速設定を開始
vimの設定が大体はそのまま使えるみたいなので、vimの設定をもとに設定を作ったのが下記
"init.vim let g:home = expand('~') let g:vim_home = g:home .'/.config/nvim' let g:rc_dir = g:vim_home . '/rc' "分割したファイルを読み込み function s:load_rc(file) execute 'source ' . g:rc_dir . '/' . a:file . '.vim' endfunction if filereadable(expand(g:rc_dir . '/settings.vim')) call s:load_rc('settings') endif if filereadable(expand(g:rc_dir . '/mapping.vim')) call s:load_rc('mapping') endif if filereadable(expand(g:rc_dir . '/color.vim')) call s:load_rc('color') endif if filereadable(expand(g:rc_dir . '/filetypes.vim')) call s:load_rc('filetypes') endif
"setting.vim "------------------------------------------------------------ "検索関係 "------------------------------------------------------------ "{{{ "検索時に大文字・小文字を区別しない。ただし、検索後に大文字小文字が "混在しているときは区別する set ignorecase set smartcase "検索結果をハイライト表示 set hlsearch "逐次検索をオン set incsearch "Kでカーソル下の単語のhelpを引く set keywordprg=:help "}}} "------------------------------------------------------------ "編集関係 "------------------------------------------------------------ "{{{ "タブ設定 set tabstop=4 set softtabstop=4 set shiftwidth=4 set noexpandtab " '<'や'>'でインデントする際に'shiftwidth'の倍数に丸める set shiftround "オートインデント set autoindent "オートインデント、改行、インサートモード開始直後にバックスペースキーで "削除できるようにする。 set backspace=indent,eol,start "検索時にファイルの下まで行ったら上まで戻る set wrapscan "閉じ括弧入力時に対応している括弧が画面内にある場合に、一瞬開き括弧にジャンプ set showmatch "対応括弧のハイライト表示を0.1秒に set matchtime=1 "コマンドライン補完を便利に set wildmenu "テキスト挿入の自動折り返しに日本語を対応 set formatoptions+=mM "移動コマンドを使ったとき、行頭に移動しない set nostartofline "バッファが変更されているとき、コマンドをエラーにするのでなく、 "保存するかどうか確認を求める set confirm "ビジュアルモードで文字の無いところにもカーソル移動を可能に set virtualedit=block "キーコードはすぐにタイムアウト set notimeout "マッピングは200ms待つ set ttimeout ttimeoutlen=200 "スワップファイルを作らない set noswapfile "バックアップファイルを作らない set nobackup "undoファイルを作らない set noundofile "クリップボードを他のアプリと共有 set clipboard+=unnamedplus "対応括弧を追加 set matchpairs& matchpairs+=<:> "スペルチェック時に日本語を除外 set spelllang=en,cjk "ファイルを開いた時に,カーソル位置を最後にカーソルがあった位置まで移動 autocmd BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif "}}} "------------------------------------------------------------ "表示関係 "------------------------------------------------------------ "{{{ "行番号を表示 set number "ルーラ表示 set ruler "タブや改行を非表示 set nolist "マルチバイト文字の表示をいいかんじに set ambiwidth=double "折り返し set wrap "長い行も表示 set display=lastline "ステータスラインを常に表示する set laststatus=2 "コマンドラインの高さを2行に set cmdheight=2 "タイプ途中のコマンドを画面最下行に表示 set showcmd "タイトル表示 set title "カーソル行を可視化 set cursorline "ビープの代わりにビジュアルベル(画面フラッシュ)を使う set visualbell "ビジュアルベルも無効化する set t_vb= "フォールディング設定 set foldmethod=marker " デフォルト不可視文字は美しくないのでUnicodeで綺麗に set listchars=tab:»-,trail:-,extends:»,precedes:«,nbsp:%,eol:↲ "カーソルが内行の内容を隠蔽しない set conceallevel=0 "補完メニューの幅 set pumheight=15 "カーソルの表示を変更 let $NVIM_TUI_ENABLE_CURSOR_SHAPE=2 "}}}
"mapping.vim "Yの動作をDやCと同じにする map Y y$ "<ESC>2回で検索後の強調表示を解除する nnoremap <ESC><ESC> :nohl<CR><C-L> "j k を表示行移動できるよう変更 nnoremap j gj nnoremap k gk " 検索後にジャンプした際に検索単語を画面中央に持ってくる nnoremap n nzz nnoremap N Nzz nnoremap * *zz nnoremap # #zz nnoremap g* g*zz nnoremap g# g#zz ".vimrcを開く nnoremap ,ev :tabe $HOME/.vimrc<CR> ".vimrcを再読み込み nnoremap ,rv :source $HOME/.vimrc<CR> "ヤンクした文字列でカーソル位置の単語を置換 nnoremap <silent> cy ce<C-r>0<ESC>:let@/=@1<CR>:noh<CR> vnoremap <silent> cy c<C-r>0<ESC>:let@/=@1<CR>:noh<CR> nnoremap <silent> ciy ciw<C-r>0<ESC>:let@/=@1<CR>:noh<CR> "ウィンドウ幅の変更 nnoremap + 5<C-W>+ nnoremap _ 5<C-W>- nnoremap > 5<C-W>> nnoremap < 5<C-W>< "ウィンドウ移動に使用するのでsの元の機能を削除(ci) nnoremap s <Nop> "s + hjkl でウィンドウ間を移動 nnoremap sh <C-w>h nnoremap sj <C-w>j nnoremap sk <C-w>k nnoremap sl <C-w>l nnoremap sw <C-w>w "ウィンドウそのものを移動 nnoremap sJ <C-w>J nnoremap sK <C-w>K nnoremap sL <C-w>L nnoremap sH <C-w>H "次のタブに移動 nnoremap sn :tabn<CR> "前のタブに移動 nnoremap sp :tabp<CR> "タブの作成 nnoremap st :<C-u>tabnew<CR> "ビジュアルモードでインデント変更後に再選択 vnoremap < <gv vnoremap > >gv "インサートモード中でも隣のウィンドウに移動 inoremap <C-W><C-W> <ESC><C-W><C-W><ESC>
"filetypes.vim "ファイルタイプに関係する設定 augroup filetypeds autocmd! autocmd BufNewFile,BufRead,BufReadPre *.{md,mkd,mark*} set filetype=markdown autocmd BufNewFile,BufRead,BufReadPre *.{json} set filetype=json conceallevel=0 autocmd InsertEnter *.json setlocal conceallevel=0 concealcursor= autocmd InsertLeave *.json setlocal conceallevel=0 concealcursor=inc autocmd BufRead,BufNewFile,BufReadPre *.coffee set filetype=coffee autocmd BufRead,BufNewFile *.scss set filetype=scss.css autocmd FileType scss set iskeyword+=- augroup END