← Vim研究所

Vimでユーザー定義コマンドを作る方法(:command)

2020-02-07 公開 ・ 更新: 2026-08-05

よく使う長いコマンドや複雑な操作は、毎回タイプするより自分専用のExコマンドとして登録してしまったほうが速くなります。:commandを使えば、プラグインなしでも自作コマンドを定義できます。

目次(6項目)
書き方これだけ覚える
command {名前} {実行内容}コマンドを定義(名前は大文字始まり)
command! {名前} {実行内容}既存定義を上書きして再定義
-nargs=1 など引数を受け取れるようにする
delcommand {名前}定義したコマンドを削除

コマンドを定義する

command {コマンド名} {実行内容}
command! {コマンド名} {実行内容}   " 既存定義を上書き
command AllCopy :normal ggyG

コマンド名は必ず大文字で始める必要があります。これはVim組み込みコマンドと名前が衝突しないようにするための決まりで、小文字始まりでは定義できません。

要点:コマンド名は大文字始まりが必須です。再定義したいときはcommand!!を付けます。

引数を受け取る

デフォルトでは引数を取りません。引数を使いたい場合は-nargsで数を指定し、コマンド定義側で<args>を使って受け取ります。

command! -nargs=1 Ffind :!find / -name "<args>" -print
command! -nargs=+ Say :echo "<args>"

-nargsには次の値が指定できます。

指定意味
-nargs=0引数なし(省略時のデフォルト)
-nargs=1引数1個
-nargs=?引数なし、または1個
-nargs=*引数いくつでも
-nargs=+引数1個以上

実用的な設定例

OSコマンドの実行を短縮する使い方が特に定番です。

command! AptUpdate :!sudo apt update
command! AptUpgrade :!sudo apt upgrade -y
command! CheckScripts :put =execute('scriptnames')

Vim Script側の関数を呼び出すパターンもよく使われます。

command! AutoSaveToggle :call AutoSaveToggle()

コマンドを削除・確認する

delcommand {コマンド名}   " 指定したコマンドを削除
comclear                  " すべてのユーザー定義コマンドを削除
command {コマンド名}      " その名前で始まるコマンドの定義内容を一覧表示

キーマッピングと組み合わせる

定義したユーザーコマンドはキーにマッピングすると、さらに呼び出しが速くなります。

command! AllCopy :normal ggyG
nnoremap <leader>ya :AllCopy<CR>

ユーザー定義コマンドは省略入力もできますが、他のコマンドと区別がつかなくなる長さまで削ると曖昧エラーになります。スクリプト内で使うときは省略せずフルネームで書くのが安全です。

使ってみて

deploy用のシェルスクリプトをVimから直接呼び出したくて:command! -nargs=* Deploy :!./deploy.sh <args>のように登録しています。ターミナルに切り替えずに済むので、設定ファイルを直したらそのままデプロイまで一直線に進められ、作業が途切れません。

まとめ

頻繁に使うコマンドや長いOSコマンドは:commandで自作コマンド化しておくと入力が短縮でき、補完も効くようになります。キーマッピングと組み合わせれば、さらに呼び出しが速くなります。

← Vim研究所 トップへ戻る