はじめに 最近、Neovimの環境構築しましたが、UI設定、キーマッピング、オプション、プラグイン...と沢山の設定が必要でした。 Vimを使うなら環境構築の壁を自力で乗り越えてこそ!という見方もあり…
目次
連載
本記事は複数記事の連載記事の1つです。
自動コマンドとは
VimではInsertやNormalモードの切り替えなど、様々なイベント時に設定したコマンドを実行できます。
ハンドルできるイベントの一覧は以下のヘルプコマンドから確認できます。
:h autocmd-events
自動コマンドの定義
Vimのヘルプを確認すると、単純に何らかのイベント時に実行するだけではありません。
ファイル名がパターンマッチに一致する場合だけ実行したり、オプションを使うと細かく制御することができます。
:h autocmd-define
:au[tocmd] [group] {event} {pat} [++once] [++nested] {cmd}
{pat} |autocmd-patterns| に一致するファイルで、{event}
のときに自動的に実行するコマンドのリストに、{cmd} を加
える。
{event} には "*" は使えない。 *E1155*
Note: クォートは :autocmd への引数と見なされ、コメント
を開始しない。
{cmd} は常に既存の自動コマンドの後に追加されるので、
自動コマンドは指定された順に実行される。
[nested] については |autocmd-nested| を参照。後方互換
性のために、"nested" (++ なし)も使用できる。
*autocmd-once*
[++once] が指定されている場合、コマンドは1回実行される
と削除される("one shot")。
lua言語の設定例
2021年8月時点ではlua言語用の自動コマンドを定義するAPIは用意されていません。
なので、Vim Scriptを vim.cmd
で実行します。
vim.cmd('augroup lua')
vim.cmd('autocmd!')
vim.cmd('autocmd InsertEnter * echo "insert enter"')
vim.cmd('augroup END')
Insertモードを離れると日本語入力をオフにする
日本語のままInsertモードを抜けると、その後のNormalモードで正常に操作できません。
また、コマンドラインで日本語を使った場合なども同様です。
各モードを離れるときに自動でオフになるようにコマンドを定義します。
Linuxでインプットメソッドにfcitxを使っている場合の例です。
vim.cmd('augroup fcitx')
vim.cmd('autocmd!')
vim.cmd("autocmd InsertLeave * :call system('fcitx-remote -c')")
vim.cmd("autocmd CmdlineLeave * :call system('fcitx-remote -c')")
vim.cmd('augroup END')
Windowsの場合はこちらを参照下さい。
おまけ1 OSを判定する
実行環境によってコマンドを切り替えたい場合、以下のように判定した上でコマンドを定義するかどうかを切り替えます。
-- Linux判定
if os.execute('uname -a | grep Linux') ~= '' then
end
-- Windows判定
if os.execute('uname -a | grep microsoft') ~= '' then
end
おまけ2 Windows WSL2環境でクリップボードを共有する
WindowsのWSL2では通常の設定ではレジスタとクリップボードを共有することが出来ません。
Neovim内でヤンクした文字列をブラウザ等にペーストするには clip.exe
をキックしてセットする必要があります。
vim.cmd('augroup wsl_clip')
vim.cmd('autocmd!')
vim.cmd("autocmd TextYankPost * :call system('clip.exe', @\")")
vim.cmd('augroup END')
コメントを書く