かなり久しぶりで1年三ヶ月振りの投稿になってしまいました。
Hackintoshもオワコンになりつつあり、ネタ切れだったのと、ゲームにハマってしまっていました。

しかし、ゲームもいつかは飽きるものですね、というわけでボチボチ更新していきます。

今回はタイトルの通りUnix/Linux/macOSX系でのviエディタのお話です。

昨年vimの開発者が亡くなったというニュースがLinux界隈では話題になりました。


追悼 Bram Moolenaar
~Vimへの情熱と貢献を振り返る
https://gihyo.jp/article/2023/11/memorial-to-bram-moolenaar


移行したきっかけ

筆者としてはvimの開発に貢献していたわけではありませんが、LinuxやmacOSXの設定ファイルの編集やコーディングで長年使わせていただいて大変お世話になったツールでした。

しかし、先日たまたまネットで何かの記事でneovimを知りました。
どうやらvimに先進的な機能を組み込んだvim派生のエディタであり、vim機能の拡張にはスクリプトやプラグインなどもあってカスタマイズ次第ではvscodeみたいな見た目にもなるとのこと。

となると、筆者もこれは試さないわけにはいきません。
というわけでvimからneovimに移行することにしました。

macOSXの場合はhome brewでインストールが可能である。
ちなみにneovimはインストール後はnvimで起動することになるのだが、基本的な使い勝手(編集モード・コマンドモードの切り替えや基本操作)が同じであること、viというコマンドで編集することに慣れてしまっているので、viのエイリアスにnvimを設定し、viで起動することにした。

まずは、こちらのサイトを参考にさせていただき、init.vimを作成した。


Vim/Neovimの設定ファイル(.vimrc, init.vim)の書き方を0から一人前までhttps://qiita.com/KowerKoint/items/387074cf7022e2e0c8fe


参考にした設定ファイル

「”」で開始される行は「”」でコメントアウトです。
このまま起動するとターミナルが下段に表示されますが、エディタ部とターミナル部の移動はCTRL+Tキーで切り替えられます。

"行番号を表示
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

"LeaderキーをSpaceに設定(これだけでは意味をなさない)
let mapleader = "\<Space>"

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

"下部分にターミナルウィンドウを作る
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
"RubyとJSではインデントを2マスにする
autocmd FileType ruby,javascript set shiftwidth=2 softtabstop=2

まだneovimを触り始めたばかりなので、少し自分なりにカスタマイズをしたり拡張機能を追加してみたら、またレポートしたいと思います。

このあたりを参考にしてみたい。
https://zenn.dev/fukakusa_kadoma/articles/4d48fb4e67c945

おまけ:Windowsでneovimを使う方法

neovimについて調べていたらscoopというOSSのパッケージ管理ツールを使うとWindowsにも簡単にインストール可能なことがわかりました。
以下サイトに記載のコードをPowerShell上にコピーペーストして実行しますとscoopのインストールが完了します。

https://scoop.sh

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
Invoke-RestMethod -Uri https://get.scoop.sh | Invoke-Expression

scoopがインストールできたら以下コマンドをpowershell上で実行。

scoop install neovim

というわけでHappyHackingライフを!!