Caution

お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。

UNIX(Linux)
入門編

  1. UNIX(Linux)とは
  2. ディストリビューションとは
  3. CentOSとMacOSとCUIについて
  4. 仮想化ソフトウェアを使ったCentOSのインストールとMacOSのCUI環境について
  5. ログインとrootユーザーとシャットダウン等について
  6. コマンドの構造と注意点について
  7. ファイルシステムとカレントディレクトリの移動と表示(cdとpwd)について
  8. 各主要ディレクトリの解説とディレクトリ等の内容表示(ls)について
  9. ちょっと高度なディレクトリの移動(cd)とパスについて
  10. 『ls』コマンドの応用(1)とドットファイルについて
  11. 『ls』コマンドの応用(2)
  12. タブキーを使った入力補完について
  13. ディレクトリの作成方法(mkdir)について
  14. ファイルの簡易作成(touch)とファイルについて
  15. 標準入出力とリダイレクション(>と>>)を使ったファイル生成とechoとcatについて
  1. ファイルとディレクトリの削除(rm)について
  2. ファイルとディレクトリのコピー(cp)について
  3. ファイルとディレクトリの移動と名前変更(mv)について
  4. viエディタとは
  5. viの基本的な使い方(1)
  6. viの基本的な使い方(2)
  7. ターミナル(sshとTera Term)を使ったリモート操作について
  8. ソフトウェアのインストール方法(yumとパッケージ管理ツール)について
  9. ユーザーの概要と確認と追加と切り替え(adduserとsu)について
  10. ユーザーのパスワードと削除と更新と管理者権限での実行(passwdとuserdelとusermodとsudo)について
  11. グループの概要と確認方法(groups)について
  12. グループの追加と削除と設定変更(groupaddとgroupdelとgroupmod)とユーザー追加方法について
  13. パーミッション(権限)について
  14. パーミッションの設定方法(chmodとchown)について
  1. トップページ
  2. UNIX(Linux)入門編 - viの基本的な使い方(2)

viの基本的な使い方(2)

みなさまどうもでございます。

今回も『vi』についてやっていきましょう。前回の記事でテキストの編集とか保存とか終了方法とかはやったので「超基本的な使い方」という部分は大体OKかと思います。

なので今回は著者おすすめの「知っとくと便利な機能」についていくつか紹介していこうかなと思います。

まず場所はどこでもOKなので『vi 新規ファイル名』と叩いて新規ファイルで『vi』を起動しましょう。

んで以下のように1行目に「This is a CentOS!」とテキストを打ち込んで下さい。このテキストはなんでもOKなので「I love Miku Hatsune!」とか「IA is so beautiful!」とか皆様の熱い想いを書いて頂いてももちろんOKでございます。

ただちょいと注意点でございますがデフォルトのCentOSでは英語モードな感じになっておりますので設定を変更しない限り日本語の入力はできません。これについては先の記事で詳しく解説しますので今のところは英語だけで入力して頂けたら幸いでございます。

さてでは話を戻しまして以下のように「This is a CentOS!」と記述された状態で

This is a CentOS!
~
~
~
~

yy』と入力して下さい。『y』キーを2回押すって感じですね。

ちょっと注意点ですが『インサートモード』ではなく『コマンドモード』(escまたはControl+[)の状態で『y』キーを押すようにして下さい。『インサートモード』で『yy』と打ったら普通に「yy」って入力されるだけになっちゃうわけでございます。

んで『yy』と入力した後に『p』キーを1回押してみましょう。するとこうなります。

This is a CentOS!
This is a CentOS!
~
~
~
~

1行分丸ごと複製出来ましたね。このように『yy』で1行分のコピー、『p』でペーストが出来ちゃいます。とっても便利です。

というわけでこれらを色々と詳しくみていきましょう。

まず『yy』ってやつですがこれは「1行分のコピー」という処理になります。これを「複数行コピーしたいぜー!(*'▽'*)」という気分になった場合は最初に『コピーしたい行数』を半角数字で入力してその後に『yy』を押せばOKです。

例えば以下のテキストで

This is a CentOS!
This is a CentOS! 1
This is a CentOS! 2
This is a CentOS! 3
This is a CentOS! 4
This is a CentOS! 5

~
~
~
~

「This is a CentOS! 1」の行にカーソルを合わせた状態で『5yy』と入力します。そのあとにテキストの一番最後の空白行にカーソルを合わせて『p』をバシッと叩くとこうなるわけです。

This is a CentOS!
This is a CentOS! 1
This is a CentOS! 2
This is a CentOS! 3
This is a CentOS! 4
This is a CentOS! 5

This is a CentOS! 1
This is a CentOS! 2
This is a CentOS! 3
This is a CentOS! 4
This is a CentOS! 5
~
~
~
~

5行分のコピペが出来ましたね。複数行をコピーしたい場合はこのようにすればOKです。

そして『yy』系は行単位でコピーする感じになりますが「一文字単位でコピーしたいぜ!」って場合は『yl』を使ってみましょう。

使い方は『yy』とかと大体同じで一文字コピーしたいなら『yl』、複数の文字をコピーしたいなら最初に『コピーしたい文字数』を半角数字で入力して『yl』を押せばOKです。

たとえば以下の「This is a CentOS! 2」の「C」にカーソルを合わせて『9yl』と入力して

This is a CentOS!
This is a CentOS! 1
This is a CentOS! 2
This is a CentOS! 3
This is a CentOS! 4
This is a CentOS! 5
~
~
~
~

そして「This is a CentOS! 2」の行末に移動してそこで『p』を押すとこうなります。

This is a CentOS!
This is a CentOS! 1
This is a CentOS! 2CentOS! 2
This is a CentOS! 3
This is a CentOS! 4
This is a CentOS! 5
~
~
~
~

『9yl』と入力したカーソル位置から9文字分の「CentOS! 2」が追記されましたね。

ちなみに『p』を打ってペーストした後はコピーされた内容が消えるとかっていう事は全く無いのでこの状態でもう一度『p』と打てば

This is a CentOS!
This is a CentOS! 1
This is a CentOS! 2CentOS! 2CentOS! 2
This is a CentOS! 3
This is a CentOS! 4
This is a CentOS! 5
~
~
~
~

「CentOS! 2」がもういっちょ追記されます。この辺はWindowsOSとかMacOSとかのいつものコピペと変わらない感じですね。

そしてペーストに使っている『p』なのですがこれは小文字の『p』と大文字の『P』で動作が違いますのでそれも紹介しておきます。

以下の状態で「This is a CentOS! 5」の行にカーソルを合わせて『yy』と押してみます。

This is a CentOS!
This is a CentOS! 1
This is a CentOS! 2CentOS! 2CentOS! 2
This is a CentOS! 3
This is a CentOS! 4
This is a CentOS! 5
~
~
~
~

これで「This is a CentOS! 5」が丸ごと1行分コピーされてる状態ですね。この状態で「This is a CentOS! 3」の行にカーソルを合わせて「p」を押すとこうなります。

This is a CentOS!
This is a CentOS! 1
This is a CentOS! 2CentOS! 2CentOS! 2
This is a CentOS! 3
This is a CentOS! 5
This is a CentOS! 4
This is a CentOS! 5
~
~
~
~

「This is a CentOS! 3」の次の行に挿入されましたね。

んで「This is a CentOS! 3」の行にまたカーソルを合わせて『P』を押すと

This is a CentOS!
This is a CentOS! 1
This is a CentOS! 2CentOS! 2CentOS! 2
This is a CentOS! 5
This is a CentOS! 3
This is a CentOS! 5
This is a CentOS! 4
This is a CentOS! 5
~
~
~
~

「This is a CentOS! 3」の前の行に挿入されましたね。

このように『p』ならば次、『P』ならば前の位置にペーストが入ります

ちなみにこれは『yl』系でも同じ動作になります。先ほどと同じ

This is a CentOS!
This is a CentOS! 1
This is a CentOS! 2CentOS! 2CentOS! 2
This is a CentOS! 5
This is a CentOS! 3
This is a CentOS! 5
This is a CentOS! 4
This is a CentOS! 5
~
~
~
~

以下の文章に何箇所かある「CentOS!」って記述の「C」にカーソルを合わせて『7yl』って打ち込んで「CentOS!」って部分をコピーします。

This is a CentOS!
This is a CentOS! 1
This is a CentOS! 2CentOS! 2CentOS! 2
This is a CentOS! 5
This is a CentOS! 3
This is a CentOS! 5
This is a CentOS! 4
This is a CentOS! 5
~
~
~
~

そして「1」って部分にカーソルを合わせて『p』と打つと

This is a CentOS!
This is a CentOS! 1CentOS!
This is a CentOS! 2CentOS! 2CentOS! 2
This is a CentOS! 5
This is a CentOS! 3
This is a CentOS! 5
This is a CentOS! 4
This is a CentOS! 5
~
~
~
~

「1」にカーソルを合わせているのでその次の文字として「CentOS!」が挿入されて「1CentOS!」になりましたね。

これを『P』にすると

This is a CentOS!
This is a CentOS! CentOS!1
This is a CentOS! 2CentOS! 2CentOS! 2
This is a CentOS! 5
This is a CentOS! 3
This is a CentOS! 5
This is a CentOS! 4
This is a CentOS! 5
~
~
~
~

になります。「CentOS!1」になっている部分に注目ですね。

こんな感じで『p』と『P』で挿入する位置を変更することができるので色々と使い分けて下さい。

さてここで「コピーとペーストがあったんだからカット(切り取り)もある予感がするー!(*'▽'*)」って思った方もちょいちょいいらっしゃるかと思いますがそれは大正解でございます。

行を切り取りしたい場合は『dd』、単語を切り取りしたい場合は『dl』が用意されていますのでこちらを使ってしまって下さい。使い方は『yy』と『yl』とほぼ同じです。複数の行と文字をカットしたいなら『dd』または『dl』の前に切り取りしたい行と文字の個数を半角数字でタイピングしてあげればOKって感じですね。

例えば以下の「CentOS!1」の「C」にカーソルを合わせて

This is a CentOS!
This is a CentOS! CentOS!1
This is a CentOS! 2CentOS! 2CentOS! 2
This is a CentOS! 5
This is a CentOS! 3
This is a CentOS! 5
This is a CentOS! 4
This is a CentOS! 5
~
~
~
~

『7dl』と打ち込むとこうなります。

This is a CentOS!
This is a CentOS! 1
This is a CentOS! 2CentOS! 2CentOS! 2
This is a CentOS! 5
This is a CentOS! 3
This is a CentOS! 5
This is a CentOS! 4
This is a CentOS! 5
~
~
~
~

「CentOS!1」の「C」から7文字分カットされて「1」だけが残りました。もちろん文字の削除ではなくカットなわけですので『p』を押して貼り付ければまた元通りでございます。

This is a CentOS!
This is a CentOS! CentOS!1
This is a CentOS! 2CentOS! 2CentOS! 2
This is a CentOS! 5
This is a CentOS! 3
This is a CentOS! 5
This is a CentOS! 4
This is a CentOS! 5
~
~
~
~

そして上記の「This is a CentOS! 3」の上の「This is a CentOS! 5」で『dd』と押すとこうなります。

This is a CentOS!
This is a CentOS! CentOS!1
This is a CentOS! 2CentOS! 2CentOS! 2
This is a CentOS! 3
This is a CentOS! 5
This is a CentOS! 4
This is a CentOS! 5
~
~
~
~

「This is a CentOS! 5」がごそっと削除されましたね。『dd』と『dl』の基本的な使い方はこんな感じになります。

んでここでちょいと小テク(?)のようなものなのですが「別にカットしたからといってそのカットした文字を貼り付けないといけないわけじゃないんだからね!(///)」ってツンデレ的な思想を持つことで『dd』や『dl』を使って文字の削除を行うことができます。

例えば上記の「This is a CentOS!」以降の行を全て削除したいってなったら「This is a CentOS! CentOS!1」の行にカーソルを合わせてあとはひたすら『dd』を連打してしまえばOKです。

This is a CentOS!
~
~
~
~

『i』とかを打って『インサートモード』に入ってから文字を消していくって作業を行うよりも凄く楽ちんですよね。こんな感じで『dd』と『dl』を上手く使って削除を行うと編集がとっても爆速になるのでおすすめです。ぜひ使ってみて下さい。

文字単位でカットを行うには『dl』以外にも『x』を使って行う事も可能です。さくっと一文字削除したい場合は『x』キーをポチッと押すだけでOKなのでとっても楽ちんですね。

複数文字カットしたい場合は削除したい文字数を数値で入力したあとに『x』を押せばOKです。例えば『5x』と入力すれば5文字分カット、『7x』と入力すれば7文字カットって感じになります。

さてここでちょいと用語の注意点なのですが『vi』や『Vim』ではコピー、ペースト、カットという言葉は正式名称ではありません。コピーは『ヤンク』、ペーストは『プット』(put)、カットは『デリート』(delete)って名前が正式名称になり、公式サイトや参考書などではこちらの言葉の方がよく使われるので覚えておいて下さい。ただ最近だと分かりやすいようにコピーとかペーストとかって言葉で解説している本も増えてきたのでもう覚えなくてもOKかもしれないですね。

あとカットが『デリート』っていう解説をしていますがこれはちょっと語弊があり、『vi』や『Vim』ではカットと『デリート』(削除)が同じものとして扱われているような感じになります。なのでどちらかというと『削除』が無くて『カット』だけがあるようなイメージになるかと思います。

『vi』および『Vim』の『ヤンク』はクリップボードにデータが保存されているわけではないので「『ヤンク』した内容を他のエディタで貼り付けよー!(*'▽''*)」っていうのは無理なので少し気を付けて下さい。

WindowsOSやMacOS等に搭載されているコピペ機能はクリップボードという「全てのソフトウェアで操作可能なメモリの領域」みたいなのにデータを保存することで実現しているのですが『vi』や『Vim』の『ヤンク』はそのクリップボードにデータを保存しているわけではないので『ヤンク』された内容は現在使用している『vi』または『Vim』の中でしか使うことはできません。

「でも『ヤンク』した内容をどうしても他のソフトウェアで使いたいの...(:_;)」って思った方もいらっしゃると思います。そんなあなたは「vi ヤンク クリップボード」みたいなワードでgoogle先生に質問してみましょう。きっと幸せになれると思います。

『3yy』は『y3y』、『3dd』は『d3d』といったように削除したい行数や文字数を指定する数値を指定する場所を少し変えることもできます。

これどちらが多数派かと言われると結構謎なのでお好きな方を使ってしまってOKかなって感じです。

そしてこれは著者流のやり方になるのですが、『y』とか『d』とかを打ち込んだ後って『カーソルを移動させるコマンド』がそのまま使えちゃったりしますので『3yy』とか『y3y』とかを使わずにそちらを使ってしまったほうが楽ちんかもしれません。

例えばなんですが以下のテキストがあったとして

This is a CentOS!
This is a CentOS! 1
This is a CentOS! 2
This is a CentOS! 3
This is a CentOS! 4
This is a CentOS! 5
~
~
~

1行目の「This is a CentOS!」の行頭にカーソルをおいて『3j』と打つと「This is a CentOS! 3」の冒頭にカーソルが移動しますよね。

これをふまえて「This is a CentOS!」の行頭にカーソルをあわせて『d3j』って打つとこうなります。

This is a CentOS! 4
This is a CentOS! 5
~
~
~

『3j』で移動した分と同じ行が削除されてますね。

んで『gg』または『1G』って打つとファイルの先頭にカーソルを移動させることができるのですがそれも合わせ技として使えます。先程のテキストの状態から

This is a CentOS!
This is a CentOS! 1
This is a CentOS! 2
This is a CentOS! 3
This is a CentOS! 4
This is a CentOS! 5
~
~
~

「This is a CentOS! 4」の行に適当にカーソルを合わせて『dgg』って打つとこうなります。

This is a CentOS! 5
~
~
~

カーソル行を含めてその手前の記述が全部消えましたね。

こんな感じで『カーソルの移動方法』はそのまま『文字編集』にも使える事ができるのでこちらを使ったほうがとっても楽ちんなのですね。特に初心者の方は『カーソルの移動方法』を覚えてしまえばそれをそのまま『文字編集』にも使う事が出来るってことになるので簡単に覚えられて一石二鳥なのでございます。すべてのコマンドを確認したわけではないのですが、カーソルを移動させる際に使っているコマンドはほぼ全て使えるはずです。

これ結構知らない人多くってよく現場とかで「そんな方法あったんすか!?(*'ω'*)」なんてびっくりされちゃったりすること多いのでこの記事をお読みの方でもちょいちょいそんな方がいらっしゃる予感です。もし知らなければ今後はちょいと使ってみると良いかもです、色々と捗ることうけあいでございます。

そして最後に『u』と『Cntrol + r』を紹介しておきます。『u』は「直前の操作を戻す」、『Cntrol + r』は「戻した操作を進める」ってコマンドになります。WindowsOSとかの『Cntrol + z』、『Cntrol + + Shift + z』と同じですね。

例えば以下のテキストで

This is a CentOS!
This is a CentOS! 1
This is a CentOS! 2
This is a CentOS! 3
This is a CentOS! 4
This is a CentOS! 5
~
~
~

「This is a CentOS!」って行に適当にカーソルをあわせて『dd』と打って1行消して

This is a CentOS! 1
This is a CentOS! 2
This is a CentOS! 3
This is a CentOS! 4
This is a CentOS! 5
~
~
~

ここで『u』を打つと元に戻り

This is a CentOS!
This is a CentOS! 1
This is a CentOS! 2
This is a CentOS! 3
This is a CentOS! 4
This is a CentOS! 5
~
~
~

さらに『Cntrol + r』を打つと以下のように

This is a CentOS! 1
This is a CentOS! 2
This is a CentOS! 3
This is a CentOS! 4
This is a CentOS! 5
~
~
~

「This is a CentOS!」って行が消えた状態になりましたね。これはいつもどおりの『Cntrol + z』、『Cntrol + + Shift + z』とかの挙動になるので大体OKかなって思います。

というわけで『vi』の超基本的なとこは以上となります。多分このくらい把握しておけばとりあえずの編集は出来るかと思います。

続いての記事ではリモート操作についてやっていきましょう。ではこの辺で失礼致します。

この記事は桜舞が執筆致しました。

著者が愛する小型哺乳類

桜舞 春人 Sakurama Haruto

ISDN時代から様々なコンテンツを制作しているちょっと髪の毛が心配な東京在住のプログラマー。生粋のロングスリーパーで、10時間以上睡眠を取らないと基本的に体調が悪い。好きなだけ寝れる生活を送るのが夢。ゲームとスポーツと音楽が大好き。誰か髪の毛を分けて下さい。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。