Vim.それはBill Joy氏が開発したViに始まり,Bram Moolenaar氏が機能を追加したテキストエディタである.現在は更に機能を追加したNeovim や,IDEとしてカスタマイズされたSpaceVim,LunarVim等も存在している.
Vimを使い慣れることでテキスト編集が高速になり,ソフトウェア・レポート等の作成も容易になることは言うまでもない.Vimを使うことで世界は一変する.いつでもVimの事を考え,どうすればより効率的な操作ができるかを調べるようになる.つまりVim-orientedな生活になるのだ.また「自分はVimを使って人よりも効率的に編集できる」という考えから他のテキストエディタ(特にVSCode)を使っている人を見下すようになる.
本ページでは,そんな素晴らしいVimの使い方を紹介する.
Vimを使い始めるには,Vimをインストールしなければならない.本章ではVimのインストール方法について説明する.
root@vim:~# apt update
Hit:1 http://security.ubuntu.com/ubuntu noble-security InRelease
Hit:2 http://jp.archive.ubuntu.com/ubuntu noble InRelease
Get:3 http://jp.archive.ubuntu.com/ubuntu noble-updates InRelease [89.7 kB]
Hit:4 http://jp.archive.ubuntu.com/ubuntu noble-backports InRelease
Fetched 89.7 kB in 2s (54.2 kB/s)
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
All packages are up to date.
root@vim:~# apt search "^vim$"
Sorting... Done
Full Text Search... Done
vim/noble 2:9.1.0016-1ubuntu7 amd64
Vi IMproved - enhanced vi editor
root@vim:~# apt install vim
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
libsodium23 vim-runtime
Suggested packages:
ctags vim-doc vim-scripts
The following NEW packages will be installed:
libsodium23 vim vim-runtime
0 upgraded, 3 newly installed, 0 to remove and 0 not upgraded.
Need to get 9,321 kB of archives.
After this operation, 42.0 MB of additional disk space will be used.
Do you want to continue? [Y/n] Y
Get:1 http://jp.archive.ubuntu.com/ubuntu noble/main amd64 libsodium23 amd64 1.0.18-1build3 [161 kB]
Get:2 http://jp.archive.ubuntu.com/ubuntu noble/main amd64 vim-runtime all 2:9.1.0016-1ubuntu7 [7,279 kB]
Get:3 http://jp.archive.ubuntu.com/ubuntu noble/main amd64 vim amd64 2:9.1.0016-1ubuntu7 [1,880 kB]
Fetched 9,321 kB in 3s (3,093 kB/s)
Selecting previously unselected package libsodium23:amd64.
(Reading database ... 150720 files and directories currently installed.)
Preparing to unpack .../libsodium23_1.0.18-1build3_amd64.deb ...
Unpacking libsodium23:amd64 (1.0.18-1build3) ...
Selecting previously unselected package vim-runtime.
Preparing to unpack .../vim-runtime_2%3a9.1.0016-1ubuntu7_all.deb ...
Adding 'diversion of /usr/share/vim/vim91/doc/help.txt to /usr/share/vim/vim91/doc/help.txt.vim-tiny by vim-runtime'
Adding 'diversion of /usr/share/vim/vim91/doc/tags to /usr/share/vim/vim91/doc/tags.vim-tiny by vim-runtime'
Unpacking vim-runtime (2:9.1.0016-1ubuntu7) ...
Selecting previously unselected package vim.
Preparing to unpack .../vim_2%3a9.1.0016-1ubuntu7_amd64.deb ...
Unpacking vim (2:9.1.0016-1ubuntu7) ...
Setting up libsodium23:amd64 (1.0.18-1build3) ...
Setting up vim-runtime (2:9.1.0016-1ubuntu7) ...
Setting up vim (2:9.1.0016-1ubuntu7) ...
update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/ex (ex) in auto mode
update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/rview (rview) in auto mode
update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/rvim (rvim) in auto mode
update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/vi (vi) in auto mode
update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/view (view) in auto mode
update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/vim (vim) in auto mode
update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/vimdiff (vimdiff) in auto mode
Processing triggers for man-db (2.12.0-4build2) ...
Processing triggers for libc-bin (2.39-0ubuntu8) ...
root@FreeBSD_Vim:~ # pkg update
The package management tool is not yet installed on your system.
Do you want to fetch and install it now? [y/N]: y
Bootstrapping pkg from pkg+http://pkg.FreeBSD.org/FreeBSD:14:amd64/quarterly, please wait...
Verifying signature with trusted certificate pkg.freebsd.org.2013102301... done
Installing pkg-1.21.2...
Extracting pkg-1.21.2: 100%
Updating FreeBSD repository catalogue...
Fetching meta.conf: 100% 178 B 0.2kB/s 00:01
Fetching data.pkg: 100% 7 MiB 7.3MB/s 00:01
Processing entries: 100%
FreeBSD repository update completed. 34044 packages processed.
All repositories are up to date.
root@FreeBSD_Vim:~ # pkg search "^vim"
vim-9.1.0158 Improved version of the vi editor (console flavor)
vim-colorschemes-legacy-g20220816_1 Legacy colorschemes for Vim
vim-gtk2-9.1.0158 Improved version of the vi editor (gtk2 flavor)
vim-gtk3-9.1.0158 Improved version of the vi editor (gtk3 flavor)
vim-lsp-0.1.4.198 Async language server protocol plugin for vim and neovim
vim-motif-9.1.0158 Improved version of the vi editor (motif flavor)
vim-tiny-9.1.0158 Improved version of the vi editor (tiny flavor)
vim-x11-9.1.0158 Improved version of the vi editor (x11 flavor)
vimb-3.7.0_1 Vim like browser
vimpager-2.06.20200712_1 Use Vim/NeoVim as a pager
vimpc-0.09.2_2 Ncurses client for musicpd with vi-like key bindings
root@FreeBSD_Vim:~ # pkg install vim-9.1.0158
Updating FreeBSD repository catalogue...
FreeBSD repository is up to date.
All repositories are up to date.
Updating database digests format: 100%
The following 8 package(s) will be affected (of 0 checked):
New packages to be INSTALLED:
gettext-runtime: 0.22.5
indexinfo: 0.3.1
libffi: 3.4.4_1
mpdecimal: 4.0.0
python39: 3.9.18_2
readline: 8.2.10
vim: 9.1.0158
xxd: 9.1.0158
Number of packages to be installed: 8
The process will require 163 MiB more space.
28 MiB to be downloaded.
Proceed with this action? [y/N]: y
[1/8] Fetching mpdecimal-4.0.0.pkg: 100% 158 KiB 161.4kB/s 00:01
[2/8] Fetching gettext-runtime-0.22.5.pkg: 100% 231 KiB 236.7kB/s 00:01
[3/8] Fetching vim-9.1.0158.pkg: 100% 9 MiB 9.1MB/s 00:01
[4/8] Fetching indexinfo-0.3.1.pkg: 100% 6 KiB 6.0kB/s 00:01
[5/8] Fetching xxd-9.1.0158.pkg: 100% 19 KiB 19.7kB/s 00:01
[6/8] Fetching python39-3.9.18_2.pkg: 100% 19 MiB 19.4MB/s 00:01
[7/8] Fetching libffi-3.4.4_1.pkg: 100% 44 KiB 45.5kB/s 00:01
[8/8] Fetching readline-8.2.10.pkg: 100% 396 KiB 405.9kB/s 00:01
Checking integrity... done (0 conflicting)
[1/8] Installing indexinfo-0.3.1...
[1/8] Extracting indexinfo-0.3.1: 100%
[2/8] Installing mpdecimal-4.0.0...
[2/8] Extracting mpdecimal-4.0.0: 100%
[3/8] Installing gettext-runtime-0.22.5...
[3/8] Extracting gettext-runtime-0.22.5: 100%
[4/8] Installing libffi-3.4.4_1...
[4/8] Extracting libffi-3.4.4_1: 100%
[5/8] Installing readline-8.2.10...
[5/8] Extracting readline-8.2.10: 100%
[6/8] Installing xxd-9.1.0158...
[6/8] Extracting xxd-9.1.0158: 100%
[7/8] Installing python39-3.9.18_2...
[7/8] Extracting python39-3.9.18_2: 100%
[8/8] Installing vim-9.1.0158...
[8/8] Extracting vim-9.1.0158: 100%
=====
Message from python39-3.9.18_2:
--
Note that some standard Python modules are provided as separate ports
as they require additional dependencies. They are available as:
py39-gdbm databases/py-gdbm@py39
py39-sqlite3 databases/py-sqlite3@py39
py39-tkinter x11-toolkits/py-tkinter@py39
Vimの操作方法に入る前にVimのモードについて説明する.Vimのヘルプによると7つのモードが存在している.そのうち4つのモードを紹介する.Vimの状態遷移を以下の図に示す.
Vimを起動すれば,基本的にこのモードから始まる.ノーマルモードでは,カーソルの移動・テキストのコピーや削除・他のモードへの切り替え等が行える.
挿入モードは,文字を入力する際に使用するモードである.基本的に,このモード以外では文字の挿入は行わない.例外として,コマンドラインモードでの実行結果を入力する際や,ノーマルモードでテキストをコピペする事がある.挿入モードのときは,Vimの下部に"-- INSERT --"が表示される.
コマンドラインモードは,Vimのコマンドを実行するモードである.このモードでは,テキストの検索・置換・シェルコマンドの実行等が行える.コマンドラインモードでは,Vimの下部に":"が表示される.
ビジュアルモードは,テキストを選択するモードである.選択したテキストに対して削除や置換を行うことができる.ビジュアルモードの際は,Vimの下部に"-- VISUAL --"が表示される.
本章では,Vimの操作について説明する.Vimの操作はモードごとに異なるので,前章と同じようにモードに分けて説明する.
インサートモードでは,補完を使用することができる.補完の際にはカーソルの位置に別のウィンドウが表示される.候補を移動するにはCtrl-nとCtrl-pを使う.Nは次(Next)の行に進み,Pは前(Previous)の行に進む.
コマンドラインモードでは,ファイルの保存やVimの終了,文字列の置換等ができる.コマンドラインモードは,ノーマルモードから:を入力することで開始する.使用できるコマンド名は省略できる.
Vimでファイルを編集しているとき,複数のファイルを同時に開きたいと思ったことはないだろうか?Vimにはマルチウィンドウと呼ばれる機能がある.画面を分割する方法はいくつかある.以下では,マルチウィンドウとウィンドウの移動方法について説明する.
vimコマンドの段階でファイルを分割することもできる.
実はノーマルモードでも画面分割ができる.
分割した画面を移動するには,Ctrl-wのあとにhjklを入力する.
ウィンドウの大きさを変えるには,Ctrl-w =+-><を入力する.
ウィンドウ自体を移動させるには,Ctrl-w HJKLrRxを入力する.
Vimにはバッファという概念があり,開いたファイルはメモリ上に展開される.以下では,バッファの操作方法について説明する.
:lsの実行結果について以下に例を示す.
:ls
1 %a "index.html" line 497
3 #a "index.css" line 1
数字/記号 | 意味 |
---|---|
1 | バッファ番号 |
3 | バッファ番号 |
% | 現在のウィンドウ |
# | バッファ番号を利用しなくても表せる識別子(:e #とすることで当該バッファを編集できる) |
a | 現在読み込まれていて表示されている |
ビジュアルモードは視覚的にテキストを選択できるモードである.選択した範囲に対してコマンド実行や,置換・削除等を行うことができる.ビジュアルモードは3種類存在するので以下の項ではそれらを説明する.それぞれのビジュアルモードを終了するにはエスケープキーやCtrl-[を入力する.
通常のビジュアルモードは,ノーマルモードからvを入力することで開始する.そのままカーソルを移動させれば,文字の選択範囲は拡大する.選択した範囲に対して置換や削除を行うことができる.
行単位のビジュアルモードは,ノーマルモードからVを入力することで開始する.このモードは通常のビジュアルモードと違い,1行ごとに選択ができる.
矩形選択に入るには,ノーマルモードからCtrl-vを入力する.矩形選択では,テキストを四角形単位で選択できる.矩形選択は,連続した行をコメントアウトをするときが多い.コメントアウトしたい部分でCtrl-vを入力し,jまたはhで数行選択する.そしてIを入力してコメントアウトとなる記号を入力する.最後にエスケープキーまたはCtrl-[を入力すれば選択した行がコメントアウトできる.