このブログは、『暮らしを少しでも進歩させるネタ』をいろんな角度から探しては紹介しよう、というコンセプトで運営しています。
今回は、パソコン作業の効率化に繋がるネタです。特にプログラミングをやる人には、より一層効果が大きいんじゃないかと思います。
早速ですが、あなたはパソコンでテキスト編集するときって、何を使ってます?
Windowsだったらメモ帳かな。ワードパッドかな。Unixだったらviエディタかな。emacsかな。
私はズバリ!WindowsでもUnixでもviエディタ使ってます!
「ぐはっ、クセがスゴい」って思うかもしれませんが、ハッキリ言わせてもらいます!『慣れたら最強』のテキストエディタだと私は思います!
特にプログラミング等のあまり日本語を使わない編集なんかにはモッテコイですよ!日本語含んでても十分使えるエディタですが。
ということで、この記事では私がオススメするviエディタの使い方を紹介したいと思います。
「最強。。。ほんまかいな。」と思いながら、ここで紹介する編集方法を一度一通りやってみてもらえるとうれしいです。
viエディタというテキストエディタ
viエディタは、UNIX系OSには標準でついてるテキストエディタです。Windowsにもフリーソフトでviエディタがあります。『窓の杜』から『Vim』をゲットします。
『テキストエディタ』ということなので、その名の通りテキストファイルをゴリゴリと編集するツールになります。Windowsの『メモ帳』みたいなもんです。ただし、メモ帳よりも遥かにスゴい技ができますの。
Windowsでは、”.txt”拡張子のファイルをVimに関連付けしてもいいですし、”Send to”フォルダにviエディタの実行ファイル(gvim.exe)のショートカットを入れておき、テキストファイルを選択して右クリックメニューの「送る」からVimを選択する形でも良いかと思います。
viエディタには、編集操作がむちゃくちゃいっぱいあります。それらの中から私が便利だぁと感じてるviエディタの使い方を厳選して、これから紹介していきますね。
viエディタでファイルの内容を見よう
まずは編集に入る前に、テキストファイルの中身をviエディタで見てみましょう。
UNIXをお使いの方は『vi ファイル名』とタイプして、[Enter]を押すとファイルの中身が見れます。
日本語が文字化けしていたら
日本語が文字化けしている場合は『:e++enc=utf-8』と打ってEnterを押してみてください。Shift JISの文字コードで書かれているファイルであれば、『:e++enc=shif-jis』Enter で文字化けが治ります。
行番号の表示・非表示
まず初めに行番号を表示させてみましょう。『:set number』と打って[Enter]を押してください。行頭に行番号が表示されます。
逆に行番号が不要です、ってときは『:set nonu』[Enter]で行番号を非表示にできます。
私は行番号を表示させています。なぜかというと、viエディタでは『行番号+G』で指定した行番号にカーソルを移動させることができるからです。
カーソル位置の移動操作
テキストファイル内でカーソルが点滅している状態で、下の操作をやってみてください。『G』は大文字のGです(Shift+g)。
- 1G⇒1行目にカーソル移動
- 10G⇒10行目にカーソル移動
- G⇒最終行にカーソル移動
ついでに次の操作もやってみてください。ページ単位で表示を移動できます。
- Ctrl+f⇒1画面進む(forward)
- Ctrl+b⇒1画面戻る(back)
次に、慣れるまで大変なものの1つ。キーボードでのカーソル移動。ホームポジション付近の『h』『j』『k』『l』の4つのキーで上下左右移動が可能なんです。
ちなみに『h』『j』『k』『l』の前に数字を打つと、数字の分だけ一気に移動します。例えば、『5j』と打つと5行下にカーソルが一気に移動する、といった具合です。
ついでに『0』(ゼロ)を押すと行頭に、『$』(Shift+4)を押すと行末にカーソルが瞬間移動します。
文字列の検索
次は文字列を検索してみましょう。『/』(スラッシュ)を使います。『/検索文字列』[Enter]で、現カーソル位置から後方に向けて検索をかけて、最初にヒットした位置まで一気に移動します。
下の例は『text』という文字列を検索してます。『/text』[Enter]で、次に『text』が出てくる位置まで移動します。その後、『n』を押すごとに次の『text』の位置へ、その次の『text』の位置へと移動していきます。逆に『Shift+n』を押すごとに前の『text』の位置へと戻っていきます。
また文字列検索には、ヒストリー機能がついているので、『/』(スラッシュ)を打った後に『↑』を押すと直前に検索した文字列が表示されます。更に『↑』を押すごとに、より過去に検索した文字列を表示することができます。なので、『↑』『↓』を使って過去に検索した文字列の中から再度検索したいものを選んで検索、ということができます。
文字列検索の方法をもう一つ紹介します。検索したい単語がカーソルの近くにある場合に、めちゃくちゃ使えますよ!
まず、検索したい単語にカーソルを移動します。で、『Shift + : 』と押してください。シフトとコロンの同時押しです。すると、即、次に現れるところまでジャンプします。しかも完全一致検索です。
その次の候補までジャンプするには、『Shift+: 』を押してもいいですし、先ほど紹介した方法と同様に『n』を押してもジャンプできます。いちいち『/検索文字列』を打たなくても検索できちゃうところがナイスですねー
慣れるまで大変ですが、ここまで紹介した操作を身につけると、ホームポジションに指を置いて普通にタイピングするかのようにカーソルを移動できるんです!
すなわち、カーソルの移動にマウスが要らなくなります!viに慣れると編集効率が上がります。頑張って慣れましょう!
viエディタで編集しよう
では次にファイルを編集する方法を紹介していきますよ。
編集モードの開始・終了
文字を追加したいな、ってとき『i』『a』『o』『Esc』の4つを覚えましょう。『i』『a』『o』はいずれも文字列編集ができる編集モードになり、『Esc』は編集モードから抜けます。
『Esc』の代わりに『Ctrl+[』でも編集モードを終了できます。ホームポジションから指を動かす距離はこちらの方が少ないですかね。好みの方でどうぞ。
【編集モードの開始と終了】
- i⇒文字を編集するモードになる。編集位置は現カーソル位置の直前。
- a⇒文字を編集するモードになる。編集位置は現カーソル位置の直後。
- o⇒文字を編集するモードになる。編集位置は現カーソル行の下に新しい行を新規挿入。
- Esc⇒文字を編集するモードを終了する。『Ctrl+[』でも同様。
『i』と『a』はどっちでもええやんと思えそうですが、行頭に文字を追加したいときは『i』、行末に文字を追加したいときは『a』で編集モードに入る方がより効率が良いです(こまか、、、)。
『i』か『a』のどっちか覚えて、編集モードに入ってから矢印キーで移動しても良いんですけどね。。。
新規に行を追加したい場合は『o』ですね。現カーソル位置の1行下に新しい行を挿入できます。『Shift+o』なら現カーソル位置の1行上に新しい行を挿入可能です。
文字列のコピー&ペースト
じゃあ次はコピペいきましょか。『yy』でコピー、『p』でペーストです。
【コピー&ペースト手順】※コピー対象は1行
- yy⇒現カーソル行を1行まるごとコピーする。
- p⇒コピーしているものを現カーソルの位置に貼り付けする。yyで行コピーした後なら、現カーソルの下に挿入される。
こちらのコマンドも直前に数字を打つことで、その回数分繰り返しするような効果が得られます。
例えば、『3yy』と打てば現カーソル行を含め3行分を行コピーし、『5p』と打てば直前にコピーした3行分のデータを5回分繰り返して貼り付けできます。
ここで私のオススメのコピペ方法を紹介します。コピーする範囲を目で見て分かりやすく指定できる方法があるんです。『j』『k』のカーソルの上下操作を利用します。
【コピー&ペースト手順】※コピー対象は複数行
- shift + v⇒現カーソル行を1行まるごと選択状態にする。
- jもしくはk⇒行選択範囲を複数行に拡げる(jなら下方向に、kなら上方向に複数行選択状態になる)。
- y⇒選択された複数行分をコピーする。
- p⇒コピーした複数行を現カーソル位置の下に貼り付ける。③の手順を’y’ではなく’d’の削除にすると「コピペ」ではなく「移動」になる
どうです?いちいちマウスで範囲選択してコピーした後、またマウスで貼り付け位置を指定してペーストするといった、マウスのわずらわしい操作が不要なんですよ。
文字列の削除
削除はどうしたらいいでしょ。『x』で現カーソル位置の1文字を削除できます。『dd』では現カーソル位置の1行を丸ごと削除可能です。
【削除操作例】
- x⇒現カーソル位置の1文字を削除
- 3x⇒現カーソル位置から3文字を削除(3回’x’を実行するのと同じ)
- dd⇒現カーソル位置の1行を削除
- 3dd⇒現カーソル位置を含めて3行を削除(3回’dd’を実行するのと同じ)
- d$⇒現カーソル位置から行末までの範囲を削除
- dG⇒現カーソル位置の行からファイルの最終行までを削除
行の連結
現カーソル位置の次の行を、現カーソル行のお尻にくっつけることができます。
【行の連結】
Shift+j⇒現カーソル行の次行を行末に連結する
普通に考えると、行末にカーソルを移動してDeleteキーを押して連結しますよね。viエディタでは現カーソル位置が行末になくても”Shift+j”を押すことで次行を連結できるんです。下に続く複数行を連続して連結したい場合、viエディタなら”Shift+j”を連打するだけでできちゃいます。
直前操作内容の取り消し・再操作
『やっぱし今のなし』のアンドゥ(undo)も必要ですよね。『u』で直前やった操作をキャンセルして元に戻せます。『いや、やっぱアンドゥした操作もう一回やるわ』のリドゥ(redo)は『Ctrl+r』です。ココ、Ctrlキーが要るんです。というのも『r』は1文字の置き換え操作(replace)になっちゃうからです。
【操作取り消し/再操作】
- u⇒直前に実行した操作を取り消して戻る(Undo)
- Ctrl+r⇒直前にUndoした操作を再実行する(Redo)
文字列の上書き
いちいち編集モードにして書き換える必要がない場合に使える、直接編集の技がコレです。
【編集モードに入らずに上書き編集】
- r⇒現カーソル位置の一文字を次に打つ文字で置き換え
- R⇒現カーソルから解除コマンド(『Esc』か『Ctrl+[』)まで文字を置き換え
要はテキストエディターの上書きモードのようなことも、もちろんできるということです。『r』コマンドは1文字だけ、『R』コマンドは解除コマンドを入力するまでずっと上書きできます。解除コマンドは編集モードの解除と同じ『Esc』か『Ctrl+[』です。
viエディタはこんなこともできる
ターゲットの文字列を一括で文字変換
この技は強力すぎます!次のフローを実行することで、指定した範囲内の指定の語句を一括で文字列置換ができちゃうんです!
【指定範囲の対象文字列を一括置換する手順】
- 範囲の開始行でShift+v⇒範囲指定の開始行を決める(反転表示開始)
- kやGやCtrl+f などで範囲の終了行に移動⇒範囲指定の終了行を決める(指定範囲が反転表示された状態)
- :⇒コロンを押すと指定範囲が決定される(画面下のコマンド行に『:'<,’>』と表示される)
- ③の続きに s/置換対象文字列/置換文字列/gをタイプして[Enter]⇒一括置換される
例えば、下のコマンド例のように、『29行目から35行目まで』と行番号を直接指定しても、一括に文字列の置換ができます。
:29,35 s/s_text_/s_txt_/g [Enter]
ちなみに、最後の’g’は置換オプションで、1行の中で置換対象文字列が複数ある場合は「すべて置換」します。’g’が無い場合は、その行の中で最初にヒットする置換対象文字列のみを置換します。
また、下のコマンドを実行すると、29から35行目の行頭に一括で空白を挿入、つまりインデントをつけることができます。’^’ が行頭を意味します。
:29,35 s/^/ /[Enter]
下のコマンド例では、29から35行目の行末のコロンを削除できます。’$’は行末を意味します。
:29,35 s/;$//[Enter]
ファイルの書き出しと読み込み
前節の一括文字変換と同様に範囲を選択した後、:wコマンドを使用することで選択した範囲を別ファイルとして書き出すことができます。
【ファイルの書き出し】
- 範囲の開始行でShift+v⇒範囲指定の開始行を決める(反転表示開始)
- kやGやCtrl+f などで範囲の終了行に移動⇒範囲指定の終了行を決める(指定範囲が反転表示された状態)
- :⇒コロンを押すと指定範囲が決定される(画面下のコマンド行に『:'<,’>』と表示される)
- ③の続きに w file_name ⇒ 選択範囲をファイル名”file_name”として出力する
また、下の読み込みコマンドにより、指定したファイルの中身を丸ごと挿入することができます。
【ファイルの読み込み】
:r file_name ⇒ file_nameで指定したファイルの中身を現カーソル位置に挿入する
直前操作内容の繰り返し実行
この技も私は頻繁に使います。
【直前操作を繰り返し実行】
- 何らかの編集操作を実行
- .⇒ドットを押すことで①で行った操作と同じ内容の編集を実行
エディタでの編集って、同じ操作を繰り返して行うことは結構ありますよね。例えば、現カーソル位置に”Ouch!”を挿入したい場合、”i”で編集モードに入って”Ouch!”を入力、その後”Ctrl+[” で編集モードを終了するわけですが、次回からはドット(“.”)を押すと”Ouch!”が挿入されます。
2つのファイルを並べて表示
VIエディタは、1つのウィンドウに2つのファイルを並べて表示させることができるんです。2つウィンドウを開ければいいじゃん、って言われそうですが違うんです。そうなるとマウス操作が必要になってくるじゃないですか。
ファイル名を打ち込む必要は出てきますが、VIエディタはキータッチだけで複数ファイルを並べて比較ができちゃうんです!
【2つのファイルを並べて表示】
- :sp [file name]⇒追加ファイルを開いて上下に並べる
- :vs [file name]⇒追加ファイルを開いて左右に並べる
- Ctrl+ww⇒押す毎に編集可能なファイルを切り替える
2つのファイルを開いている状態で、ファイル間のコピペができたりします。片方のファイルの記述をコピーして、『Ctrl+ww』でアクティブファイルを切り替えた上でもう片方のファイルに貼り付ける、といった使い方です。
矩形領域のコピー&ペースト
VIエディタは、なんと長方形型の矩形領域のコピペができてしまうんです。いつ使うねん。プログラミングとかやる人は、使える技だと思いますよ。私はたまに使いますが、使ったときは「この機能があって、めちゃくちゃ効率よくできた」って思えるんです!
この矩形領域の編集ができるテキストエディタって、なかなか無いと思います。
【矩形領域のコピペ手順】
- コピー対象矩形領域の左上隅でCtrl+v⇒矩形領域の開始ポイントを決める(反転表示開始)
- kやGやCtrl+f などでコピー対象矩形領域の右下隅に移動⇒範囲指定を決める(指定範囲の矩形領域が反転表示された状態)
- y ⇒ ②で指定した領域をコピー
- 貼り付けたい位置で p ⇒ ③でコピーした内容(矩形領域)がペーストされる
まとめ
viエディタは、なんといっても『マウスを使わずにキーボードだけでゴリゴリ編集できる』点が素敵なんです。
編集してはマウスで移動、編集してはマウスで移動、って結構うざったいですよね。viエディタに慣れちゃったら、もうキーボードだけでゴリゴリとカーソル移動や編集ができちゃいます!とっても素敵です!
クセがスゴいエディタなので慣れるまでは時間がかかりますが、慣れたら編集効率がグンっと上がります。viエディタは無料ですし、あなたも一度トライしてみてはいかがでしょうか。