Ruby on Rails チュートリアル
-
- 第1章テキストエディタとは
- 第2章現代的なテキストエディタ
- 第3章テキスト編集の高度な技
|
||
|
||
購入する |
テキストエディタ
テキストエディタの操作を
学ぶチュートリアル
- 第1章テキストエディタとは
- 第2章現代的なテキストエディタ
- 第3章テキスト編集の高度な技
著者について
マイケル・ハートル(Michael Hartl)は、ウェブ開発の主要な入門書の一つである「Ruby on Railsチュートリアル」の作成者です。また、「Learn Enough」の共同創立者であり、主執筆者でもあります。以前は、カリフォルニア工科大学(Caltech)で物理学の講師をしており、そこで生涯功労賞(Lifetime Achievement Award for Excellence in Teaching)を受賞しています。ハーバード大学を卒業後、カリフォルニア工科大学で物理学博士号を取得。Y Combinator起業家プログラムの卒業生でもあります。
著作権とライセンス
Railsチュートリアル Copyright © 2020 by Michael Hartl(最終更新日: 2023/02/01 08:34:34 PT)
Railsチュートリアルで掲載しているすべてのソースコードは、MIT ライセンスおよびBeerware ライセンスの元で提供されています。なお、これらのライセンスはいずれか一方が有効になります。つまり、MITライセンスに基づいて使用する場合は、ビールも購入する必要はありません。
なお、「すべてのソースコード」とは、Railsチュートリアル内で題材としている「Railsアプリケーションのソースコード」を指します。「Railsチュートリアル」という教材は上記ライセンスで提供されていないのでご注意ください。営利・非営利問わず、事業で使用する場合は教材連携サービスをご利用ください。
The MIT License
Copyright (c) 2016 Michael Hartl
Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation
files (the "Software"), to deal in the Software without restriction,
including without limitation the rights to use, copy, modify,
merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE SOFTWARE.
THE BEERWARE LICENSE (Revision 42)
Michael Hartl wrote this code. As long as you retain this
notice you can do whatever you want with this stuff.
If we meet some day, and you think this stuff is worth it,
you can buy me a beer in return.
第1章テキストエディタとは
『テキストエディタ編』は、意欲満々のコンピュータマジシャンの魔法がぎっしり詰まったカバンの中でもダントツに重要なアイテムである、テキストエディタ (図 1.1)の使い方を皆さんがスムーズに学べることを目指して執筆されました。テキストエディタの使いこなし方を学ぶことは、「技術の成熟」のために不可欠な要素です。
本チュートリアルは、どんなテキストエディタでも活用できる、多くの人は存在すら知らないような応用方法をご紹介しています。さらに、特定のエディタに絞ったチュートリアルは、多くの場合長年経験を積んだプロの開発者を前提として書かれていますが、本チュートリアルは初めてテキストエディタに触れる読者を前提としているので、『コマンドライン編』で学んだUnixコマンドラインの基本的な知識があれば十分学べます1。
その上で、ソフトウェア開発の基礎知識、特に『Railsチュートリアル』でWeb開発を学ぶのに不可欠な知識を中心に据えて学べるように構成されていますので、開発者と共同作業するのに必要な知識を学びたい方、あるいは開発者になりたい方に最適なつくりになっています。既にテキストエディタの使い方をご存知の方でも、本チュートリアルに従って学び、かつ演習問題をこなすことで、新たなテクニックをいくつも学べることでしょう。
テキストエディタは、ワードプロセッサやメールクライアントといったさまざまなドキュメント作成用プログラムとは異なり、平文テキスト2の編集に特化しています。テキストエディタの使いこなし方を学ぶのが重要な理由は、プログラムのコード、マークアップ、設定ファイルなど、平文テキストというデータ形式が現代のコンピュータで広範囲に用いられているからです3。実際、本チュートリアルもテキストエディタで執筆されています。
「平文テキストとは何か」の定義は意外にも驚くほど難しいのですが、実用的な観点で言えば、平文テキスト形式のデータとは「いかなる書式も設定されていない」または「少なくとも書式は重要でない」ことを意味します。平文テキスト形式のデータでは、強調(イタリック)もボールドもフォントサイズもタイプフェース(フォントの種類)
などもまったく重要ではありません。重要なのはコンテンツ、つまり何が書かれているかだけなのです。たとえば直前の文がこのように強調表示で出力されているとしても、その実態であるソースはリスト 1.1のような平文テキストでしかありません4。
平文テキスト形式のデータでは、<em>強調(イタリック)</em>も<strong>ボールド</strong>も
<small>フォントサイズ</small>も<code>タイプフェース(フォントの種類)</code>などもまったく重要ではありません。
重要なのは<em>コンテンツ</em>、つまり何が書かれているかだけなのです。
リスト 1.1では、欲しい書式オプションを特殊なタグ(HTMLの強調タグ<em>…</em>
など)で指定しています。テキストそのもののスタイルを変更しているのではありません5。
テキストエディタを一度も触ったことのない人でも、似たツールであるワードプロセッサ(ワープロソフト)は触ったことがあるのではないでしょうか。実際、テキストエディタとワープロソフトの機能は多くの点で似通っています。たとえば、どちらもドキュメントを新規作成できますし、検索置換もテキストのコピペも編集結果の保存もできます。主な違いは、ワープロが「一般的なドキュメント作成」を念頭に設計されていて「WYSIWIG6原則」に従っている点です。つまり強調やボールドといった書式設定の効果がそのままワープロソフト上に反映されます。また、たいていのワープロソフトは編集結果を「独自形式のファイル」に保存しますが、こうした独自形式のファイルはときどき壊れることがあります7。
テキストエディタは平文テキストを変更するよう設計されていて、マークダウン書式設定では<em>強調</em>
や**ボールド**
と表示されます。平文テキストならどんなテキストエディタでも開くことができ、壊れにくく、壊れても最悪手動で直せます。また、ワープロソフトと比べてテキストエディタの方がプログラマーを主な対象としています。そうしたユーザーの使う機能には、ソースコードのシンタックスハイライト( 3.2.1)、オートインデント( 3.2.3)、正規表現のサポート( 3.4.3)、パッケージやスニペットによるカスタマイズ( 3.5)などがあります。そうしたわけで、優れたテキストエディタはあらゆる技術者の道具箱になくてはならないツールとなっています。
『コマンドライン編』『テキストエディタ編』での開発作業は、重要度の高いVimエディタの解説から始まります( 1.1)。Vimはターミナルウィンドウ内のコマンドラインで直接実行できるという特徴があります。テキストエディタの最も重要な機能例は本章でもご覧いただけますが、Vimは初心者には複雑でなじみにくいという問題があるので、本チュートリアルではまず基本的な編集作業に必要な最小限の部分についてのみ解説します。
第2章以降では主にVisual Studio Codeエディタを用いて、プログラマー向けテキストエディタに欠かせない強力な機能のいくつかを解説します。Visual Studio Codeはオープンソースかつクロスプラットフォームのエディタで、Sublime TextやCloud9(いわゆるクラウドIDE)とも非常に近いものになっています8。
本チュートリアルは『コマンドライン編』と同様に「Unixの伝統」に則っていますので、「macOS」「iOS」「Android」「Linux」といった、Microsoft Windowsを除くほぼあらゆるOSが対象になります。紹介するテキストエディタはすべてWindowsにも対応していますが、「非Unix OS」環境では手順が異なる場面も多いため、Windowsユーザーの皆さんにはブラウザで動かせるLinuxベースの「クラウドIDE9」の使用や、『Learn Enough Dev Environment to Be Dangerous』のWindowsでの手順にそってLinuxのインストールをお勧めします。
また、全体を通じて「一般的な原則」を中心に据えていますので、皆さんが最終的にどのエディタを使うことになったとしても通用する、エディタでの作業で頼りになるタスクリストが心の中にできあがるようになっています。細かな操作方法などはテキストエディタやOSによって変わるので、本チュートリアルでは皆さんの技術の成熟(コラム 1.2)を促進するための理想的な機会を提供する形を取っています。最後に、すべてを一度に学ぼうとして頑張りすぎないよう気をつけましょう。本チュートリアルで学んだことのほんの一片を使いこなせるようにだけでも、作業効率が大幅に向上します。「技術の成熟」を身につけたエンジニアも毎日欠かさずテキストエディタを使い続けています。みなさんもぜひ歩みを止めることなく、新しいテクニックを見つけて自分のものにし続けましょう。
『コマンドライン編』でも繰り返し登場した技術の成熟という言葉は、コンピュータやさまざまな技術を使いこなせる一般的な能力を指します。その能力には既存の知識(テキストエディタやUnixコマンドラインの使いこなし)も含まれますし、xkcdの『“Tech Support Cheat Sheet”』でも風刺されているような「未知の」知識の獲得も含まれます。コーディングやバージョン管理といった「ハードスキル」はともかく、技術の成熟の後者の側面である「未知の知識を獲得するスキル」は、直接教わってもそう簡単には身につきません。しかし、皆さまがプログラマーと共同作業するのであれば、あるいは本物のプログラマーになりたいのであれば、「自分の知らない技術であっても学べるスキル」を養うことがとても重要です。
テキストエディタにおける技術の成熟は、たとえば「エディタのメニューを見ればだいたい何ができるか見当がつく」「エディタのメニューをチェックしたりネット検索したりしながらキーボードショートカットを覚えられる」といった形で現れますし、少々曖昧な記述に出くわしても慌てなくなります。たとえばチュートリアルに「〜を取り消すには⌘Zキーを押せ」と書いてあるのに自分のシステムでは⌃Zとなっていたとしましょう。技術に成熟したエンジニアなら、仮に⌘の意味を知らないとしても 2.1あたりをさっと見たり検索したりして疑問を解消できます。そして技術の成熟は何よりも「態度・物腰」にはっきりと現れます。技術的裏付けのある自信、そして困ったときでも「まあやればできるでしょう」と嬉々として取り組む姿勢は、時間をかけて身に付ける価値があります。
『テキストエディタ編』ではこの後全体を通じて、初心者では解決しづらい問題を例として取り上げるたびに、この「技術の成熟」に立ち返ります。皆さんも経験を積めば、きっと「Tech Support Cheat Sheet」でいう、技術的課題を魔法のように解決できそうな「computer people」になれます。
1.1 最小限の環境で使えるVimエディタ
昔むかし、Unixができて間もない頃にviというエディタが開発されました。Vimは「Vi IMproved」の略とされていることからわかるように、viから派生・発展した高性能なテキストエディタです。多くの開発者がVimを日常的に編集作業で使っていますが、Vimを学ぶ壁は高く、能力をフルに使いこなすには根本的なカスタマイズと「技術の成熟」が求められます(コラム 1.2)。Vimには大量のコマンドが用意されていますが、紛らわしいものも多く、一般的なキーバインディング(いわゆるキーボードショートカット)と対応しているコマンドはめったにありません。そのような理由からもVimを学んで身につけるのは簡単とはいえないので、第2章以降では初心者の皆さんに「モダンな」エディタを普段遣いのエディタとしておすすめすることにしました。ですが、Vimを最小限に操作できるスキルはどうしても必要になると私は考えています。理由は簡単で、VimはほぼどんなUnix環境にもまず間違いなく入っているからです。つまり、たとえ地球の反対側にある知らないサーバーにsshでログインしたとしても、Vimならそこにインストールされているでしょう。
本章では、小さな設定ファイルやGitコミットをちょっとだけ編集するのに十分な最小限のVim操作だけを説明します10。これだけでは「技術の熟成」レベルにはほど遠いのですが、 最小限のVim操作を習得するだけでも大きなレベルアップと言えます。そのぐらいVimは難しいということです。Vimについてのちょっとした知識があなたを助けてくれることもあるでしょう。
メモ: macOSをお使いの方は、今のうちにコラム 1.3の手順を終わらせておきましょう。
macOSをお使いの場合、この時点で本チュートリアルに適したシェルプログラムを使えるようにしておく必要があります。macOS Catalinaの時点でのデフォルトシェルはZ Shell(通称Zsh)に変わってしまったのですが、本チュートリアルの操作で一貫した結果を得るにはBashに切り替えておくことをおすすめします.
最初の手順として、現在システムで実行されているシェルを以下のようにecho
コマンドで確認します。
$ echo $SHELL /bin/bash
上のコマンドを実行すると、$SHELL
という環境変数の内容を出力します。出力が上と同じであれば、既にBashが使われていますので何もする必要はありません(ごくごくまれに$SHELL
の内容が現在のシェルと一致してないこともありますが、いずれにしろ以下の手順を実行すればシェルを切り替えられます)。本チュートリアルでどうしてもZshを使いたい場合など、Zshについて詳しくは「Using Z Shell on Macs with the Learn Enough Tutorials(英語)」をご覧ください。
echo
コマンドの結果が以下のようになる可能性もあります。
$ echo $SHELL /bin/zsh
この場合は、以下のようにchsh
(change shell)コマンドを実行します。
$ chsh -s /bin/bash
コマンドを実行すると、おそらくシステムのパスワードを入力するよう求められるので、そのとおりにパスワードを入力する必要があります。続いてCommand-Qキーを押してシェルをいったん終了してからシェルを再起動します。
再度echo
コマンドを実行して、シェルが切り替わったことを確認します。
$ echo $SHELL /bin/bash
このとき以下のアラートが表示されるかもしれませんが、これは無視します。
The default interactive shell is now zsh.
To update your account to use zsh, please run `chsh -s /bin/zsh`.
For more details, please visit https://support.apple.com/kb/HT208050.
[~]$
上の切り替えはいつでも完全に元通りにできますので、システムを壊したのではないかと心配する必要はありません。詳しくは『Using Z Shell on Macs with the Learn Enough Tutorials』をご覧ください。
1.2 Vimを起動する
第2章で説明する昨今のエディタと異なり、Vimはターミナルウィンドウで直接起動でき、グラフィカルユーザーインターフェイス(GUI)も不要です11。コマンドプロンプトで以下のようにvim
と入力すればVimが起動します。
$ vim
vim
コマンドの典型的な実行結果はリスト 1.2や図 1.3のような感じになります。いずれの場合も行の冒頭にあるチルダ記号(~)は実際のファイルには含まれず、単にその行が未定義であることだけを意味しています。
~
~
~
~
~
~ VIM - Vi IMproved
~
~ version 7.3
~ by Bram Moolenaar et al.
~ Vim is open source and freely distributable
~
~ Help poor children in Uganda!
~ type :help iccf<Enter> for information
~
~ type :q<Enter> to exit
~ type :help<Enter> or <F1> for on-line help
~ type :help version7<Enter> for version info
Vimの起動は簡単ですが、少なくとも最初のうちは使いこなしが恐ろしく難しいものに感じられるかもしれません。主な理由はVimが「モーダルな(複数のモードを持つ)」エディタであることです。他のエディタでVimのようにモードを持っているものはめったにありません(コラム 1.4)。Vimには「ノーマルモード」と「挿入モード」という2つの主要なモードがあります。ノーマルモードは、あちこちのファイルを開いて回ったり、中身を削除したり、テキストの検索置換を行ったりするのに使います。挿入モードはテキストを挿入するときに使います。
私がUnixの伝統的な世界でプログラミングを学び始めたころ、子供の頃に体験したMicrosoft DOS、BASIC、Pascalとは対照的に、信じられないほど原始的なエディタに死ぬほど苦しめられたことを今もありありと覚えています。当時はハーバード大の学部1年生で、ハーバード・スミソニアン天体物理学センターの研究グループの一員でした。そこで私が使ったのはviでしたが、かなり控えめに言ってもワープロと比べてとても不便だと感じました(図 1.2)。
当時特にショックだったのは、viの「モーダル編集」という考え方でした。ワープロと違い、viでウィンドウのどこかをクリックして入力開始しようとしてもできないのです。代わりに、「挿入モード」に切り替えるだけでもi
やa
やo
といったオプションがいくつもありました。キー操作をほんのちょっぴり間違えただけでも何もできなくなって大混乱です。その後はワープロソフトでおなじみの「クリックして入力」できるモダンなテキストエディタを使うようになってしばらくviから離れていましたが、おどろくべきことにvi(Vim)の人気は一向に衰える気配すらありません。モーダル編集を学ぶことは、初めは意味のないことに思えるかもしれませんが、価値あるスキルがみにつくと言えるでしょう。
Vimで「ノーマルモード」と「挿入モード」という2つのモードを行ったり来たりしていると、今がどちらのモードなのかを見失いがちです。他のテキストエディタ・ワープロ・メールクライアントには「挿入モード」しかないので、なおさら混乱します。特に混乱しがちな部分は、Vimが起動時に「ノーマルモード」で起動する点です。つまり、Vimを普通のワープロのように起動直後にいきなり文字を入力しようとしても、まるで思ったとおりになりません(リスト 1.2)。
Vimの「モーダル編集」に触れたことがない人が混乱する可能性が高いので、本チュートリアルでは最初に「最も重要なVimコマンド™」を1つ覚えていただきます。日常的にVimを使っていない同僚でさえも「最も重要なVimコマンド™」として何としてもこれだけは最優先で覚えておくべきと主張していました。それが以下のコマンドです。
ESC:q!<return>
このコマンド操作は「Escキー」を押し、次に「コロン」と「q」と「!」を順に押し、最後に「Returnキー」を押す、という意味です。こうすると何が起きるかとその理由についてはこの後で説明しますが、とにかく今はこのコマンドだけを繰り返し入力して練習するところから始めましょう。
1.2.1 演習問題
- ターミナルでVimを起動し、例の「最も重要なVimコマンド™」を実行しましょう。
- ターミナルのVimをもう一度起動し、他の操作を行わずにいきなり「This is a Vim document.」と入力し、何が起こるか観察しましょう。何だかおかしなことになりませんか?
- 上の演習を実行した状態で例の「最も重要なVimコマンド™」を実行し、いつものコマンドラインのプロンプトに戻しましょう。
1.3 小さなファイルを編集する
1.2で「最も重要なVimコマンド™」を覚えたので、今度はVimで実際に小さなファイルを開いて編集してみましょう。 1.2ではvim
コマンドに何も渡さずに単独で実行しましたが、ファイル名を引数として渡すのが普通です。皆さんのシステムのホームディレクトリで以下のファイルを開いてみましょう。
$ cd
$ vim .bash_profile
この「.bash_profile」ファイルは皆さんのシステムに既に存在すると思いますが、もしなくてもVimが必要に応じて自動で作ってくれます。これは、コマンドライン機能を提供するシェルというプログラムの設定に使われるファイルです。ほとんどのシステムではBashというシェルがデフォルトで設定されていますが、これはBourne Again SHellの略語です12。Unixベースのシステムではよくあるように、Bashのプロファイル設定ファイルもドットで始まり、『コマンドライン編』でもご説明したとおりに隠しファイルであることを表します。つまり、ls
コマンドを単に実行しただけではこのファイルはリストに表示されませんし、GUIのファイルブラウザでも表示されません。
このファイルの変更結果の保存方法は後ほど 1.4で学ぶ予定ですが、今はダミーコンテンツを追加して練習することにしましょう。先の 1.2では、テキストの位置を変更したり削除したりといった操作が可能なノーマルモードでvimを起動する方法を覚えました。今度は挿入モードに切り替えて、何か入力してみましょう。最初の手順として、i
キーを押して文字を挿入できるようにします(iはinsertの最初の文字)。続いてリスト 1.313のように何か適当に入力してReturnキーを押すことを数回繰り返し、数行ほど入力します。画面には他にもいろいろ表示されているかもしれませんが、今は気にせず進めます。
i
と入力してから何かテキストを挿入する ~/.bash_profile
lorem ipsum
dolor sit amet
foo bar baz
I've made this longer than usual because I haven't had time to make it shorter.
リスト 1.3のテキストを入力したら、ESC
キーを押して挿入モードからノーマルモードに切り替えます。
適当なテキストを数行入力できたので、今度はこの小さなファイルの中であちこちに移動して様子を見る方法を学びましょう14。一番簡単なのは、いわゆる「矢印キー」を使う方法です。上矢印キー、下矢印キー、左矢印キー、右矢印キーを押すことによる移動は、私からのおすすめです15。Vimでファイル内を移動する方法は文字通り「無数にあります」。Vimをメインのテキストエディタにする決心がついたなら、こうしたコマンドを覚えることをおすすめしますが、そうでなければ矢印キーでもまったく問題ありません。今は、行の冒頭に移動する操作(0
キー)と行の末尾に移動する操作($
キー)を覚えれば十分です16。
1.4 ファイルを保存してVimを終了する
カーソルを少々移動したりテキストを挿入したりできるようになったので、今度はファイルの保存方法を覚えましょう。この例では新しく便利なBashコマンドを作りますが、まずBashプロファイルのファイルの現在の状態を正しく扱わなければなりません。リスト 1.3で追加したテキストは少なくともBashにとっては無意味なので、今するべきなのはファイルを「保存せずに」閉じることです。ファイルを閉じる場合の通常のキー操作は「:q<return>
」17ですが、これはファイルに何も変更を加えていない場合にしか使えません。今の状態でこのキー操作を実行すると“No write since last change (add ! to override)”というエラーメッセージが表示されます(図 1.4)。
このエラーメッセージの指示に従って、今度は「:q!<return>
」と入力しましょう。これにより、Vimは変更を保存せずに終了し(図 1.5)、コマンドラインに戻ります。
そろそろ皆さんも、 1.2で説明した「最も重要なVimコマンド™」がなぜ重要かがおわかりいただけたかと思います。ファイルでどんなめちゃくちゃな変更を行ったとしても、とにかくESC
キーで挿入モードから脱出し18、続いて「:q!<return>
」操作で強制終了を実行しさえすれば、変更がなかったことになるのです。
強制終了の操作を覚えましたが、Vimは編集結果を保存できてこそ実力を発揮するので、今度は意味のあるテキストを追加してから保存してみましょう。 1.3で行ったときと同様に.bash_profile
ファイルを編集することにしますが、今回はエイリアス(alias: 別名)をひとつ追加してみましょう。コンピュータにおけるエイリアスとは、1つ、または複数のコマンドの別名を指します。Bashエイリアスは、よく使われるコマンドの組み合わせに対してもっと短いコマンド名を定義するのに使われます19。
ここではlist reverseを略したlr
というコマンドを「ls -hartl
」のエイリアスとして定義することにします。オプションに-hartl
とあるのは、「human-readable values for the sizes (ファイルサイズを人間が読みやすい形式で表示する: 29KByteのファイルサイズを29592ではなく29Kと表示するなど)」「all(隠しファイルも含めてすべてのファイルを表示する)」「reverse(逆順表示)」「time(時刻)」「long form(ファイル名以外の情報を省略しないロング形式)」という意味の頭字語です。このコマンドで『コマンドライン編』の演習を思い出した方もいらっしゃるかもしれませんが、最近変更されたファイルをリストの上位に表示してチェックするのに便利です20。エイリアスを定義すると、以下のような長いコマンドを
$ ls -hartl
以下のようにスッキリ短くできます。
$ lr
エイリアス定義の手順は次のようになります。
- コマンドラインで「
vim .bash_profile
」と入力してVimでファイルを開き、i
キーを押して挿入モードに切り替える。 -
リスト 1.4に示されているテキストを入力する。なお一部のシステムでは
.bash_profile
に既に何か書かれていることもありますが、そのままにしておいて大丈夫です。 -
ESC
キーを押して挿入モードを終了する。 - 「
:w<return>
」と入力してファイルを書き込む。 - 「
:q<return>
」と入力してVimを終了する。
メモ: 操作ミスを取り消したい場合は、ESC
キーを押してからu
キーを押すことで、いわゆるUndo(取り消し)操作ができます。これはVim独特のキーバインディングの例でもあります21。
~/.bash_profile
alias lr='ls -hartl'
「lr
」というエイリアスを.bash_profile
に追加したら、ファイルを保存してVimを終了します。しかしこれだけでは以下のようにエイリアスが効かないので、少々おどろくかもしれません。
$ lr
-bash: lr: command not found
エイリアスが有効になってない理由は、Bashプロファイルのファイルをシェルがまだ読み込んでいないためです。これを行うには以下のように「source
」コマンドを用います(リスト 1.5)22。
$ source .bash_profile
これで「lr
」コマンドがめでたく動くようになりました。
$ lr
.
.
.
drwx------+ 15 mhartl staff 510B Sep 4 18:58 Desktop
-rw------- 1 mhartl staff 13K Sep 4 19:13 .viminfo
-rw-r--r-- 1 mhartl staff 46B Sep 4 19:14 .bash_profile
drwxr-xr-x+ 117 mhartl staff 3.9K Sep 4 19:14 .
ちなみに、.bash_profile
ファイルはターミナルのタブやウィンドウを新しく開いたときに自動的にBashに読み込まれるようになっていますので、明示的にsource
コマンドを使う必要があるのは、今開いているターミナルで設定を反映したい場合だけです。
1.4.1 演習問題
- よく使われる「
grep -i
(大文字小文字を区別しないgrep)」コマンドのエイリアスとして「g
」を定義してみましょう。Vimで設定ファイルを変更してESC
キーを押した後、先ほどは「:w
」「:q
」を順に実行しましたが、今度は代わりに2つの操作をまとめた「:wq
」を実行してみてください。何が起きるでしょうか? - 『コマンドライン編』で学んだ
curl
コマンドを思い出してください。curl
コマンドはURLにコマンドラインでアクセスするのに使えます。それでは、ファイルをローカルディスクに保存する「curl -OL
」コマンド23のエイリアスとして「get
」を定義してください。 - 上の演習で作ったエイリアスを用いて、リスト 1.6のコマンドを実行してください。そのコマンドでダウンロードした長いテキストファイルは、次の 1.6の演習で使います。
$ get cdn.learnenough.com/sonnets.txt
1.5 コンテンツの削除
Vimには膨大なテキスト操作コマンドがあり、テキストの一部や全体を削除するコマンドも豊富に揃っていますが、この節では最小限の削除方法だけを学ぶことにしましょう。最初は「1文字の削除方法」で、ノーマルモードで「x
」キーを押すことで、カーソルがある文字を1つ削除できます。
-
.bash_profile
ファイルをVimで開き、わざとスペルを間違えた「aliaes
」という語を挿入する -
ESC
キーを押してノーマルモードに戻る - 「
aliaes
」という語の「e
」という文字にカーソルを移動し(図 1.6)、「x
」キーを押す
Vimでテキストの一部を削除する方法はそれこそ無数にあるのですが、少々面倒な代わりに覚えやすい方法として、まずはx
キーを連打して1文字ずつ削除する方法を覚えておきましょう。これなら最終的に語全体や行全体も削除できます。また、ある1行全体を一発で削除する操作も非常に便利なので、これも合わせて覚えておきましょう。さっき追加した余分な「alias
」という語のある行にカーソルを置いた状態で「dd
」となるようにd
キー24を2回押してください。これでその行が一発で削除され、行と行の間も自動で詰めてくれます(図 1.7)。今削除した行をそのまま貼り付けて元に戻すには、「p
」キー25を押します。これで、削除した行がカーソル行のすぐ下に挿入され、元に戻ります。p
キーを押すたびに、いわゆる「コピペ」の貼り付けと同じ感覚でその行が1つずつ追加されます。
繰り返しますが、ここで学んでいるのはVimの膨大なキー操作のうち、最小限必要なごくごく一部のものにすぎません。もっと便利な操作法を知りたくなったら、いくらでも学ぶ方法があります26。
1.5.1 演習問題
- Vimで「
foo.txt
」という新しいファイルを開いてみましょう。 - そのファイルに「A leopard can’t change it’s spots.」という文字列を挿入してみましょう(図 1.8)27。
- 上で入力した行で、
x
キーを使って間違った文字を削除し、文字列を修正しましょう。間違いが見当たらない場合は表 1.1を参照してください。 -
dd
キーでその行全体を削除しましょう。続いて、p
キーを連打してその行を繰り返しドキュメントに貼り付けましょう。 - 1.4.1の最初の演習問題を参照して、ドキュメントの保存とVimの終了をコマンド一発で行ってみましょう。
1.6 大きなファイルを編集する
Vimを編集するための最小限の操作を学んできましたが、いよいよ最後のスキルは、大きなファイルの中を上や下に移動する方法です。先の 1.4でsonnets.txt
をまだダウンロードしていない方は、まずリスト 1.7を実行してください28。
$ curl -OL https://cdn.learnenough.com/sonnets.txt
このファイルには、シェークスピアのソネット(2620行、17670語、95635文字)がまるごと収録されています。なお、『コマンドライン編』で学んだように、「 wc
」コマンドで簡単にワードカウントを取れます。
$ wc sonnets.txt
2620 17670 95635 sonnets.txt
Vimは多くのシステムで、開いたファイルの統計情報を以下のようにある程度表示してくれます。
$ vim sonnets.txt
私のシステムの場合は図 1.9のように表示されます。ファイルがこれだけ大きいと、先ほどのようにカーソルで一文字づつ移動していては疲れてしまいますね。
他のコマンドと同様に、Vimにはファイル内を自由に行き来するコマンドも山ほどありますが、その中でも私が特に便利だと感じている操作は「1画面ずつ下または上へ進む」「ファイル冒頭への移動」「ファイル末尾への移動」「検索」なので、まずはこれらのコマンドを覚えてみましょう。これから説明するコマンドはいずれもノーマルモードで実行します。
1画面下に進むにはCtrl-Fキー29、1画面戻るにはCtrl-Bキー30。ファイルの末尾に一発で移動するには、大文字のG
を入力します。ファイルの冒頭に一発で移動するには1G
、つまり1に続けてGと入力します。最後に、最も有用なナビゲーションコマンドといえばやはり検索でしょう。検索は、「/文字列
」のように/
に続けて文字列を入力し、最後にReturnキーを押すと、最初の該当箇所にジャンプします。そのままn
キーを押すと次の該当箇所がある場合はジャンプし、ない場合はメッセージが表示されます。
これらの操作は、どうもどこかで見たような気がしますね。というのも、『コマンドライン編』で学んだ中にあるless
というファイルの内容を表示するプログラムと同じ操作だからです31。このように、多くの手法がさまざまな場面でも通用することが、基本的なUnixコマンドを学ぶことで得られる大きなメリットのひとつです。
1.6.1 演習問題
- Vimで
sonnets.txt
を開き、3画面下に移動し、続いて3画面戻って元の画面に移動しましょう。 - ファイルの末尾に移動しましょう。ソネットの最後の行には何と書いてありますか?
-
sonnets.txt
の冒頭に戻ってください。そして冒頭行にある古いスペルの「Shake-speare」を新しい「Shakespeare」というスペルに変更し、結果を保存しましょう。 - Vimの検索機能を用いて、「Cupid」(ローマの愛の神)を参照している部分がいくつあるか見つけてみましょう。
- 「
18G
」と入力すると、冒頭のソネットの最終行にジャンプすることを確認しましょう。このコマンドが何を行ったのかを推測してみましょう。ヒント: 「1G
」と入力したときは、ファイルの冒頭(つまり1行目)に移動しましたよね。
1.7 まとめ
本節で取り扱った重要なコマンドを表 1.1にまとめました。
コマンド | 説明 |
ESC:q!<return> |
「最も重要なVimコマンド™」 |
i |
ノーマルモードから挿入モードに切り替える |
ESC |
挿入モードからノーマルモードに戻る |
矢印キー | 上下左右への移動 |
0 |
行頭に移動 |
$ |
行末に移動 |
:w<return> |
ファイルを保存(書き込む) |
:q<return> |
ファイルを閉じて終了(未保存ファイルは閉じられない) |
:wq<return> |
ファイルを保存して終了 |
:q!<return> |
強制終了(変更を保存しない) |
u |
取り消し(アンドゥ) |
x |
カーソルがある場所の文字を削除 |
dd |
カーソルがある行をまるごと削除 |
p |
dで削除したテキストを貼り付ける |
it’s spots |
スペルミス: 「its spots 」が正しい |
Ctrl-F |
1画面下へ進む |
Ctrl-B |
1画面上へ進む |
G |
ファイルの末尾に移動 |
1G |
ファイルの冒頭に移動 |
/文字列 |
「文字列 」を検索する |
1.7.1 演習問題
-
sonnets.txt
をVimで開いてみましょう。 - そのファイルの末尾(最終行)に移動しましょう。
- そのファイルの冒頭(先頭行)に移動しましょう。
- 「That’s all, folks! Bard out. <drops mic>」という行を新たに追加しましょう。文末のピリオドを動かさないように注意して、そこからカーソルをスペース1個分右に移動できるかどうかやってみましょう。
- このファイルを保存してみましょう。
- 今の変更を取り消してみましょう。
- 結果を保存してVimを終了してみましょう。
- 今のファイルをもう一度Vimで開き、「
2620dd
」と入力してみましょう。 - ファイルの中身が全部消えたことを確認し、続いてファイルを壊さないために例の「最も重要なVimコマンド™」を実行してみましょう。
—
とは表示されませんが、後者は前者と同等であり、テキストをレンダリング表示するときに整形されます(ほとんどのブラウザでは、Unicodeを正しく表示するために「完全な」HTMLドキュメントと正しいヘッダーが必要ですが、こうした考慮点について詳しくは『HTML編』で扱います)。~/.bash_profile
の部分は、ホームディレクトリの直下にあるBashプロファイルのファイルを表しています。h
キーやj
キーやk
キーやl
キーで移動する方法を教えるでしょう。しかしこの操作を直感的に行えるようになるまでにはかなり時間がかかりますし、矢印キーの操作でも「技術の成熟」を身に付けられます。.bash_profile
にエイリアスを定義するのに対し、Zshでは.zshrc
にエイリアスを定義する点だけが異なります。実はBashでは.bashrc
という設定ファイルにもエイリアスを追加できるので、これで考える方がBashとZshの対応関係がよりわかりやすくなるでしょう。.
)は「source
」のショートハンドでもあるので、「. .bash_profile
」と入力しても同じ結果を得られます。このドットはカレントディレクトリを表すドットとは違いますのでご注意ください。
Railsチュートリアルは YassLab 社によって運営されています。
コンテンツを継続的に提供するため、書籍・動画・質問対応サービスなどもご検討していただけると嬉しいです。
研修支援や教材連携にも対応しています。note マガジンや YouTube チャンネルも始めたので、よければぜひ遊びに来てください!