はじめに
最近縁があって、Vimを使い始めました。それまでは複雑だからと敬遠していたんですが、いざ使ってみると面白くて、やばいです。(語彙)
色々と調べながらやっていたのですが、いくつかのページを渡り歩くのがめんどくさかったので、初心者なりに備忘録的にここにまとめてみようかと。
読者の方、端から端まで書いてるので、不要なら適宜飛ばしてください。また、僕はMac持ってないので、Macに関しての言及はありません。LinuxとWindowsだけです。まあ、インストールしたらMacでもほぼ同じだけどね。
なお、僕の環境は
- Windows11 21H2
- Linux Debian11 Bullseye
れっつごー。
Vimとは
UNIX系OSなどで主に使われているテキストエディタ。全身のviができた頃はマウスはあまり普及していなかったため、すべての操作がキーボードで可能。だから癖があるけど慣れるとめちゃ速くなる。
メリットとデメリット
メリット
- Linuxなどに標準で入っている
- 慣れるとオニ早い
- コンソールで動く
- 軽い。とにかく軽い。
- かっこいい。←ここ重要
デメリット
- Windowsなどにはインストールが必要(面倒ではない)
- 慣れないとオニ遅い
- 慣れてしまうとほかのエディタを使えなくなる(この記事はQiitaのブラウザエディタで書いてるんですが、マウス操作がめんどくさくなったのと、アローキーでの移動がじれったいです笑)←ちょっと大げさ
インストール
Linux
不要。
Windows
-
Vimの公式サイトのDownloadページから該当パッケージをダウンロードし、インストーラーに従ってセットアップ。
(2022.10現在、DLリンクが2つありますが、多分どっちでも大丈夫です。説明書きを読んで、選んでください。わかんなければ多分上のほうで十分。) - 環境変数にVimをインストールしたディレクトリのPATHを追加。
起動
Linux
コマンドプロンプトにvi
もしくはvim
と入力。オプションで開くファイルのパスを指定。
Windows
コマンドプロンプトにvim
と入力(コンソール版が開きます。オプションで開くファイルを指定)、またはスタートメニューからgVimを起動。(GUI版のVimが開きます。)
エクスプローラーでファイルを右クリックしたときのコンテクストメニューにも"Vimで開く"とある場合がある(インストール時の設定による)
- gVim:通常起動のgVim
- gVim Read Only:読み取り専用。プロンプトからは、
-R
オプションで可能。 - gVim Easy:普通のテキストエディタと同じような使い勝手。せっかくVim使ってるんだから、これはあんま意味ないよね、と個人的には思います。
コンソール版とgVimの違い
コンソール版は当然ですがマウスは使えません。(例外あり)あと、Windowsだと色表現が乏しい。
gVimはGUI上で動いているため色表現が豊かにできて、かつマウスで細かい操作が可能です。
僕はコンソール版のが好き。なぜならシンプルだから。
使い方(この記事の命)
Vimにはモードがあります。それぞれのモードでできることが決まっていて、それを行き来しながら編集します。
下に各モードと、そのモードの英語表示を書きます。これらは画面の左下に書かれています。
- ノーマルモード:(非表示)
- ビジュアルモード
- ビジュアル:VISUAL
- ビジュアル 行:VISUAL LINE
- ビジュアル 矩形:VISUAL BLOCK
- セレクト
- セレクト:SELECT
- 行指向選択:SELECT LINE
- 矩形選択:SELECT BLOCK
- 挿入:INSERT
- 挿入ノーマル:(insert)
- (挿入)ビジュアル:(insert)VISUAL
- (挿入)ビジュアル 行:(insert)VISUAL LINE
- (挿入)ビジュアル 矩形:(insert)VISUAL BLOCK
- 置換:REPLACE
- コマンドライン:(入力したコマンドが表示)
- 前方検索:(入力したコマンドが表示)
- 後方検索:(入力したコマンドが表示)
各モードの機能とコマンドを書いていきます。各モードの最初に書いた">>"の後ろには、このモードへの移動方法を書いてあります。
ノーマルモード
>> Esc
>> Ctrl+[
>> Ctrl+c
Vimを起動したときはこれになります。他のモードからEscを二回以上押せば確実にこのモードになります。
移動や文字の削除などをするモードです。
移動系
繰り返し可能なものは、コマンドの先頭に数字をつけることでその回数繰り返されます。
ex) 3h
...3文字左
コマンド | 動作 | コマンド | 動作 | コマンド | 動作 | コマンド | 動作 | |||
---|---|---|---|---|---|---|---|---|---|---|
h |
← | j |
↓ | k |
↑ | l |
→ | |||
0 |
行頭 | $ |
行末 | ^ |
行の文字開始位置 | |||||
e |
語頭 | b |
前語頭 | w |
次語頭 | |||||
gg |
先頭行 | G |
最終行 | % |
対応する括弧 | |||||
Ctrl+f
|
1ページ下 | Ctrl+b
|
1ページ上 | Ctrl+d
|
半ページ下 | Ctrl+u
|
半ページ上 | |||
H |
画面先頭 | M |
画面中央 | L |
画面下端 |
削除系
繰り返し可能なものは、コマンドの先頭に数字をつけることでその回数繰り返されます。
ex) 3dd...3行削除
コマンド | 動作 | コマンド | 動作 | コマンド | 動作 | コマンド | 動作 | |||
---|---|---|---|---|---|---|---|---|---|---|
x |
delete | X |
backspace | dd |
行 |
d (h ,j ,k ,l のいずれか) |
指定方向 | |||
D |
行のカーソル以降 | dw |
1語 | de |
空白まで | |||||
d^ |
行頭まで | d$ |
行末まで |
df 文字列 |
文字列まで |
その他
繰り返し可能なものは、コマンドの先頭に数字をつけることでその回数繰り返されます。
ex) 3yy...3文字ヤンク
コマンド | 動作 | コマンド | 動作 | コマンド | 動作 | コマンド | 動作 | |||
---|---|---|---|---|---|---|---|---|---|---|
~ |
大文字小文字変換 | J |
下行と結合 | |||||||
yy |
ヤンク (コピー) |
yw |
1語ヤンク | yl |
1行ヤンク | y0 |
行頭までヤンク | |||
y$ |
行末までヤンク | daw |
1語カット | p |
カーソル後にペースト | P |
カーソル上にペースト | |||
r |
文字置換 | >> |
インデントを付ける | << |
インデントを消す | * |
現在単語を検索 |
ビジュアルモード
ビジュアルモードには上述のように3種類(挿入ビジュアル含めると6種類)あります。
-
ビジュアル(一文字単位)
ノーマルから >>v
挿入から >> Ctrl+o
v
((挿入)ビジュアル になります) -
ビジュアル 行(行単位)
ノーマルから >>V
挿入から >> Ctrl+o
V
((挿入)ビジュアル 行 になります) -
ビジュアル 矩形(矩形選択)
ノーマルから >> Ctrl+v
挿入から >> Ctrl+o
Ctrl+V
((挿入)ビジュアル 矩形 になります) -
その他
- 前回と同じ範囲を選択: >>
gv
- 前回と同じ範囲を選択: >>
範囲を選択して、その範囲に対してアクションをするモードです。選択範囲の動かし方は、ノーマルモードのカーソル移動と同じ要領だから省略。
アクション
コマンド | 動作 | コマンド | 動作 | コマンド | 動作 | ||
---|---|---|---|---|---|---|---|
x |
削除 | d |
カット | y |
ヤンク | ||
gu |
小文字化 | gU |
大文字化 | ||||
> |
インデントを付ける | < |
インデントを消す | = |
オートインデント |
セレクト
上述のように、セレクトにも3つあります。
-
セレクト
>>gh
-
行指向選択
>>gH
-
矩形選択
>>g
Ctrl+h
ノーマルから >> Ctrl+g
挿入から >> (マウスドラッグ または Shift+カーソルキー)
GUIでの選択に似た選択モードです。
文字入力で置換、backspaceで削除になります。
挿入
カーソル前から >> i
行頭から >> I
カーソル後から >> a
行末から >> A
単語末から >> ea
下に空行を作ってから >> o
上に空行を作ってから >> O
現在クオートの中を消してから >> ci"
(↑"
を'
に書き換えてシングルクオートに、w
に書き換えて単語、t
でHTMLタグも使用可)
コマンド | 動作 | コマンド | 動作 | コマンド | 動作 | ||
---|---|---|---|---|---|---|---|
Ctrl+p
|
前方検索して補完 | Ctrl+n
|
後方検索して補完 | Ctrl+y
|
補完確定 |
挿入ノーマル
挿入 >> Ctrl+o
挿入で一回だけノーマルのコマンドを実行できます。
置換
>> R
文字を入力するごとに一文字ずつ置換されて進んでいきます。
コマンドライン
コマンド >> :
前方検索(正規表現) >> /
後方検索(正規表現) >> ?
メタでコアな命令ができます。ノーマルモードでいきなり入力します。
いずれも最後に!
をつけることで強制実行されます。
行番号は、$
を使うと最終行と指定が可能です。
" 閉じる
:q
" 保存
:w
" 保存して終了
:wq
" カーソル行の最初のstr1をstr2に置換
:s/str1/str2
" 行全体で置換
:s/str1/str2/g
" 指定した行範囲の最初のstr1をstr2に置換
:s開始行番号,終了行番号/str1/str2
" 指定した行範囲のすべてのstr1をstr2に置換
:s開始行番号,終了行番号/str1/str2/g
" 指定行の最初のstr1をstr2に置換
:s行番号/str1/str2
" 指定行のすべてのstr1をstr2に置換
:s行番号/str1/str2/g
" 全体の最初のstr1をstr2に置換
:%s/str1/str2
" 全体のstr1をstr2に置換
:%s/str1/str2/g
" 指定行へジャンプ
:行番号
" 行削除
:d
" strのある行を削除
:g/str/d
" 指定行を削除
:行番号d
" 指定行範囲を削除
:開始行番号,終了行番号d
" カーソル以降全削除(上の応用)
:.,$d
" リロード
:e
" 下行にファイルを挿入
:r ファイルパス
" コマンドの実行結果を挿入
:r! シェルコマンド
" 外部コマンドでフィルタ
:!コマンド
" swapファイルの読み込み
:recover 該当の編集ファイル
" 検索などによるハイライトを消す
:noh
" 画面分割
" 上下
:sp ファイル名
" 左右
:vs ファイル名
" Ctrl+W h/j/k/l で編集するウィンドウを切り替えます。閉じるときは通常通り :q です。
" 前方検索
/正規表現
"後方検索
?正規表現
" その他設定(これはホームディレクトリの.vimrcファイルに":"を抜いて書き込んでおくと常時有効になります。)
" 2つ目の値の前にnoをつけると無効になります。 ex):set nonu...行番号非表示
" 行番号の表示
:set nu
" 自動インデント(改行後のインデントの継続)
:set autoindent
" 自動インデント(改行前の文字に対応してインデント)
:set smartindent
" 端で折り返す
:set wrap
" シンタックスハイライト
:syantax on
:syntax off
.vimrcについて
ホームディレクトリに.vimrc
なるファイルを置いて、そこに設定を書き込むことでカスタマイズができます。
僕はあんま詳しくないので、下記リンクを参考にしてください。
おわりに
その他便利そうなコマンドの記事がありました。
あと、プラグインとか作るときに使う、VimScriptってのもあるんですが、僕もVim初心者なのでよくわからない。
ちなみに今急性Vim中毒になりそうです。(?)すぐ治ると信じてます。VSCode使うとストレス溜まるのは悲しいので。
(みんな記事の最後ってどうやって締めるんだろう)