2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

VimAdvent Calendar 2023

Day 18

vimのoptionをリアルタイムで変更する!〜vim初心者向け〜

Last updated at Posted at 2023-12-17

この記事は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が表示されましたか

tmpuymhpbwh-ascii.gif

長いけど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作るツールが日本語フォントにに対応してなかったのでコメント部分は省略しています

tmp_r8z6sby-ascii.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スクリプトで作ってみようというきっかけになりましたら幸です。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?