見出し画像

ubuntuのneoVimの設定方法

始めに

著者は、一度vimの設定を挫折しましたが、ふとやる気が出てneovim設定に成功したため初心者向けに公開しようと思いました。

vimの大まかな仕組み

neovimはinit.vimというファイルを最初に読み込み、それに記述されていることを設定として反映しています。
 また、vimではほかのプログラミング言語のようにファイルパスを参照することができるのでvimの設定ファイルをそれ用のディレクトリに置くことで1ファイルでまとまりを作り整理整頓ができます。

neovimの最初にすること

sudo apt update
sudo apt upgrade

neovimのインストール

sudo apt-get install neovim

nvimがインストールされたか確認(以降のコマンドはnvimで打ちます)

nvim -v

init.vimを作成

touch -p ~/.config/nvim/init.vim

nvimディレクトリへ移動

cd ~/.config/nvim

vimの設定ファイル用にconfigフォルダを作成(好きな名前にしましょう)

mkdir configs

さて、ここでinit.vimファイルを編集しましょう

init.vimの編集

init.vimはnvimまたはnvim [後に続くコマンド]を売って起動する際に最初に読み込まれるファイルです。そこで、ここにconfigフォルダの中に置く予定のvimファイルを読み込めるようにします。以下のコードをinit.vimに記述してください

let $CACHE = expand('~/.cache')
if !isdirectory($CACHE)
  call mkdir($CACHE, 'p')
endif
if &runtimepath !~# '/dein.vim'
  let s:dein_dir = fnamemodify('dein.vim', ':p')
  if !isdirectory(s:dein_dir)
    let s:dein_dir = $CACHE .. '/dein/repos/github.com/Shougo/dein.vim'
    if !isdirectory(s:dein_dir)
      execute '!git clone https://github.com/Shougo/dein.vim' s:dein_dir
    endif
  endif
  execute 'set runtimepath^=' .. substitute(
        \ fnamemodify(s:dein_dir, ':p') , '[/\\]$', '', '')
endif

"configディレクトリより各種vimファイルロード
source ~/.config/nvim/configs/plugs.vim

let splt = split(glob("~/.config/nvim/configs/" . "*.vim"))
  
for file in splt
	" 読み込んだファイルを表示するもの消しても大丈夫
	echo "load " . file
	" ファイルの読み込み
	execute 'source' file
endfor

特に以下のコードが重要ですsplit内に記述されているファイルパスはあなたの設定したファイルパスを参照します。

"configディレクトリより各種vimファイルロード
source ~/.config/nvim/configs/plugs.vim

let splt = split(glob("~/.config/nvim/configs/" . "*.vim"))
  
for file in splt
	" 読み込んだファイルを表示するもの消しても大丈夫
	echo "load " . file
	" ファイルの読み込み
	execute 'source' file
endfor

これでconfigフォルダにおけるvimの拡張子が付いたファイルが読み込めるようになりました。

では、configフォルダに移動して設定を記述しましょう今回は私が使用しているファイルをそのまま使います。おこのみで別サイトで紹介されているものを使用してください。

cd configs
touch baseset.vim

お使いのエディタでファイルを開いてください。(vimに慣れていない人は無理せず使い慣れたエディタを使ってください)

"行番号を表示(切り替え)
set number
"タブ文字の代わりにスペースを使う(切り替え)
set expandtab
"プログラミング言語に合わせて適切にインデントを自動挿入(切り替え)
set smartindent
"各コマンドやsmartindentで挿入する空白の量(数値)
set shiftwidth=4
"Tabキーで挿入するスペースの数(数値)
set softtabstop=4
"カレントディレクトリを自動で移動
set autochdir
"バッファ内で扱う文字コード(文字列)
set encoding=utf-8
"書き込む文字コード(文字列) : この場合encodingと同じなので省略可
set fileencoding=utf-8
"読み込む文字コード(文字列のリスト) : この場合UTF-8を試し、だめならShift_JIS
set fileencodings=utf-8,cp932
"Vimの無名レジスタとシステムのクリップボードを連携(文字列のリスト) : ダメならxclipをインストールで使えるかも
set clipboard+=unnamed,unnamedplus
"eコマンド等でTabキーを押すとパスを保管する(文字列のリスト) : この場合まず最長一致文字列まで補完し、2回目以降は一つづつ試す
set wildmode=longest,full

inoremap { {}<LEFT>
inoremap [ []<LEFT>
inoremap ( ()<LEFT>
inoremap " ""<LEFT>
inoremap ' ''<LEFT>

"C++,Java等のインラインブロックを中括弧付きのブロックに展開
nnoremap <C-j> ^/(<CR>%a{<CR><Esc>o}<Esc>
"カーソル上の単語を置換
nnoremap <expr> S* ':%s/\<' . expand('<cword>') . '\>/'

"挿入モード終了時にIMEをオフ
inoremap <silent> <Esc> <Esc>:call system('fcitx-remote -c')<CR>

"jキーを二度押しでESCキー
inoremap <silent> jj <Esc>
inoremap <silent> っj <ESC>

"下部分にターミナルウィンドウを作る
function! Myterm()
    split
    wincmd j
    resize 10
    terminal
    wincmd k
endfunction
command! Myterm call Myterm()

"起動時にターミナルウィンドウを設置
if has('vim_starting')
    Myterm
endif

"上のエディタウィンドウと下のターミナルウィンドウ(ターミナル挿入モード)を行き来
tnoremap <C-t> <C-\><C-n><C-w>k
nnoremap <C-t> <C-w>ji
"ターミナル挿入モードからターミナルモードへ以降
tnoremap <Esc> <C-\><C-n>

"ファイルタイプごとにコンパイル/実行コマンドを定義
function! Setup()
    "フルパスから拡張子を除いたもの
    let l:no_ext_path = printf("%s/%s", expand("%:h"), expand("%:r"))
    "各言語の実行コマンド
    let g:compile_command_dict = {
                \'c': printf('gcc -std=gnu11 -O2 -lm -o %s.out %s && %s/%s.out', expand("%:r"), expand("%:p"), expand("%:h"), expand("%:r")),
                \'cpp': printf('g++ -std=gnu++17 -O2 -o %s.out %s && %s/%s.out', expand("%:r"), expand("%:p"), expand("%:h"), expand("%:r")),
                \'java': printf('javac %s && java %s', expand("%:p"), expand("%:r")),
                \'cs': printf('mcs -r:System.Numerics -langversion:latest %s && mono %s/%s.exe', expand("%:p"), expand("%:h"), expand("%:r")),
                \'python': printf('python3 %s', expand("%:p")),
                \'ruby': printf('ruby %s', expand("%:p")),
                \'javascript': printf('node %s', expand("%:p")),
                \'sh': printf('chmod u+x %s && %s', expand("%:p"), expand("%:p"))
                \}
    "実行コマンド辞書に入ってたら実行キーバインドを設定
    if match(keys(g:compile_command_dict), &filetype) >= 0
        "下ウィンドウがターミナルであることを前提としている
        nnoremap <expr> <F5> '<C-w>ji<C-u>' . g:compile_command_dict[&filetype] . '<CR>'
    endif
endfunction
command! Setup call Setup()

"ファイルを開き直したときに実行コマンドを再設定
autocmd BufNewFile,BufRead * Setup

これで一通りvimが使えるようになります。

プラグのインストール

vim及びneovimには自動でコードを成型してくれるプラグやコードを補完をしてくれるプラグがあります。ここでは詳細には説明しませんが基本的に以下のように記述をします。適宜、ファイルの内容を変えてください。

call plug#begin('~/.config/プラグを保存したいディレクトリ')
    "ここに公開されたプラグを記述する
call plug#end()

これでneovimの設定方法を終わります。

この記事が気に入ったらサポートをしてみませんか?