この記事はVim Advent Calendar 2023の12月18日分のものです。
初めに
vim初心者向けに楽しそうなものを目指して記載します
私はvimの8.2で動作確認をしています。今のところver8,9の固有要素は使わないつもりですが想定外の動きがあれば教えて頂けると助かります。
vimの起動から
まず vimを起動しますが、初期設定ファイルとか面倒ですよね。-u NONE
で初期設定ファイルの読み込みをスキップしましょう。
vimがないぞと怒られたら、aptなりyumコマンドでvimを導入してください。
$ vim -u NONE foobar.txt
これでなんの混ざりのない純心な?vimの起動ができました。
準備
vimのoptionをリアルタイムで変更するために、表示されている行をvimコマンドとして実行出来るようにします。
まずはマクロキー的な設定を行います。以下の2つのコマンドを先ほど起動したvim上実行してください
※ [ESC]
キーを数回押して、[:]
キーを押して以下のコマンドを1行づつコピペして実行してください。[:]
はいくつ重なっても問題ありません。またこの設定は一回限りのものなのでvimを終了すると消えます。
:set cpo-=<
:nnoremap <TAB> :execute getline(".")<CR>
確認してみます。
vim上で以下の行を入力してください
:echo "aaaa"
入力が終わったら[ESC]
キーを押してノーマルモードに戻ったら、この行にカーソルを移動して[TAB]
キーを押してみてください
最下行にaaaaが表示されましたか
長いけどvimの起動時にマクロを登録する方法
コマンド登録箇所はコマンドラインでもできるのでvim起動時のコマンドを以下でも設定可能です。(すいませんlinux系かつbashでは動くと思う)
vim -u NONE -s <(echo -e ':set cpo-=<\n:nnoremap <TAB> :execute getline(".")<CR>') foobar.txt
行番号表示
行番号表示を試してみます。
今度は以下をvimにコピー&ペースとして[TAB]
キーを押してみてください
" 試しに行番号を表示してみましょう
" 下の行をカレントにしてTabキーを押してみてください
:set number
" 左に行番号の表示が追加されましたでしょうか
" 行番号を消してみましょう
:set nonumber
" 以下のコマンドはトグルします
:set number!
" 行番号の表示桁数を変えてみましょう
" 現在の値を取得するには項目名?です
:set numberwidth?
" 行番号の表示桁数を5に変更しましょう
:set numberwidth=5
" 行番号の表示桁数を+1するには
:set numberwidth+=1
" 行番号の表示桁数を-1するには
:set numberwidth-=1
" 初期値に戻すには&を付与します
:set numberwidth&
なんかgif作るツールが日本語フォントにに対応してなかったのでコメント部分は省略しています
少し高度なもの
こちらもvim上にペーストして試してみてください
" ノーマルモードのコマンドも実行出来ます
" 最終行、行頭、行末への移動コマンドです
:normal G
:normal 0
:normal $
" 画面分割
:sp
" ウィンドウ移動
:wincmd w
" ウインドウ高さ変更
:wincmd -
:wincmd +
" 他のウィンドウを閉じます
:sall
" append()を使うことで追加することができます
:call append(".", 10 * 20 )
" 指定行を変更したい場合はsetline()を使います
:call setline(line(".")+1,system("date"))
" 先頭行に移動するには、、、:1しか知らなかった
:1
:normal 1G
:normal gg
終わりに
ウインドウ上の内容を実行してリアルタイムにその結果を確認できるのは、なかなか面白いと思いますがいかがでしょうか
vimスクリプトを記述する際にヘルプを読んだだけでは、作用や副作用がどうなるか分かりにくいので実際の動きを見ると理解も深まるのではないでしょうか
この記事を読んで、何かvimスクリプトで作ってみようというきっかけになりましたら幸です。