LoginSignup
1

More than 3 years have passed since last update.

posted at

updated at

Organization

Vim のオプション設定をバッファに挿入する

はじめに

Vim で試しにオプション設定を行い、それが良かったので vimrc に書こうとした際にその設定内容が手入力するには長かったり複雑だったりして困ったことはないでしょうか。
set {option}? の結果などをバッファに挿入できれば…と思って調べて回った結果その方法が見つかったので書きます。

使用する機能

以下の機能を使います。

  • レジスタの内容を挿入(i_CTRL-R)
  • Expression レジスタ
  • execute コマンド

詳細

レジスタの内容を挿入

インサートモードでレジスタの内容を挿入するには CTRL-R を入力したあとにレジスタ名を入力します。

Expression レジスタ

レジスタには番号のレジスタ以外に特別なレジスタがあり、その一つが Expression レジスタです。
インサートモードで CTRL-R を入力したあとに = を入力するとコマンド行に式を入力できるようになります。式を入力してEnterキーを入力すると式が評価されてその結果が挿入されます。

execute コマンド

Exコマンドを実行して出力を文字列として返すコマンドです。

オプション設定をバッファに挿入する

上記の機能を組み合わせることで Vim のオプション設定をバッファに挿入することができます。

  1. インサートモードに入る
  2. CTRL-R を入力
  3. =execute("set {option}?") を入力
  4. Enter キーを入力

例えばインサートモードで CTRL-R を入力した後、以下のように入力すると

=execute("set guifont?")

以下のような結果がバッファに挿入されます。

  guifont=Osaka-Mono:h14

実行してみればわかりますが、なぜか直前に空行が挿入されます。
これについては理由がわかっていません。(知っている方がいらっしゃったら教えて欲しいです…)

最後に

ちょっとした小ネタではありますが、これで vimrc の編集が少し楽になる場合があるんじゃないかなと思っています。

追記

Twitter およびコメントにて execute 以外の方法を教えて頂きましたので追記します。
=execute("set {option}?") の代わりに =&{option} を入力することでそのオプションの設定値をバッファに挿入することができます。

例えば、インサートモードで CTRL-R を入力した後以下のように入力すると

=&guifont

以下のような結果がバッファに挿入されます。

Osaka-Mono:h14

しかもこちらの方法だと、理由不明であった直前の空行が挿入されることもありません。

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
What you can do with signing up
1