【超初心メモ】CUI何もわからないけど、GitBash(CUI)上でファイルを編集したい人はとりあえずこれを抑えておけば何とかなるはず！

#CUIとは
CUIとは、よく見る**黒い画面上で色々とパソコンに指令（コマンド）を出したり、パソコンの情報を表示したりすることができるもの**です。コマンドは、Linuxコマンドと呼ばれるコマンドを使って、パソコンに指令を出します。私のPCのWindowsでは、コマンドプロンプトというCUIがはじめからインストールされています。
また、CUIと良く比べられるGUIは、視覚的にファイルの移動や、パソコンへの指令（コマンド）、情報の参照ができるものです。

私は昔、GUIとCUIは全く別の世界だと思っていまいした。しかし、実際にはCUIで行うことをGUIで視覚的に操作を簡単にしているだけということなのです。要するに、**CUIでファイルを追加したら、GUIでもファイルが追加されている**ことが分かると思います。GUIもCUIもお互いに同じで、パソコンに指令(コマンド)を出してファイルを追加したり、更新したり、移動を行っているということが分かりました。

#GitBashとは
GitBashはCUIですが、コマンドプロンプトなどのCUIとは少し違います。何が他のやつとどう違うのかというと、**Gitの機能が搭載されたCUI**と考えると良いです。そして、逆に言うと**コマンドプロンプトでは、Gitの機能を使うことはできない**ということですので、注意が必要です。

#GitBash(CUI)でファイルを編集するには？
##①編集をしたいファイルがあるディレクトリーまで移動
CUIでファイルの編集をするためには、**まず編集をしたいファイルへ移動をする必要があります。**
それはどういうことかというと、CUIでは自分が今パソコンにある情報のどこを参照して（いじって）いるのかという情報を教えてあげる必要があります。そうしないと、ファイルを開くことができません。

例えば、Desktop（デスクトップ）にlessonというフォルダーがあるとします。そして、その中に、test1、test2というフォルダーがあり、test1には、sample1.txt、test2にはsample2.txtが入っているとします。
（※フォルダーを作るためには、```mkdir フォルダー名```で作成することができます。）

それでは、sample1.txtを編集したいとします。CUIで編集を行うためには「vim」コマンドというものを使います。
よって、一見```vim sample1.txt```のようにすればそれでいいかと思いますが、実は違います。なぜならば、**CUIでは現在参照しているものの中でファイルを開くことができる**からです。よって、今回のコマンドでは、ファイルが見つからずエラーになってしますのです。まずは、編集したいファイルがあるディレクトリーへ移動する必要があるのです。（ディレクトリーとは、フォルダーのことです。）

CUIでは、ディレクトリーを移動するにもコマンドが必要になります。フォルダーの移動には「cd」を使います。
また、今現在自分が参照しているディレクトリーを、「pwd」コマンドで知ることができます。

まず、GitBashで```pwd```と打ち、実行してみてください。

すると、以下のように今いるディレクトリーの情報を示してくれます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/673966/d47c27bc-3d59-f21b-643e-dcc7948598a4.png)

これで今現在自分がいる箇所が分かりました。
今回は、Desktopの中の、test1の中のsample1.txtを編集したいので、以下のようにディレクトリーを変更します。

```:GitBash
cd Desktop/test1
```

これで、やっと目的としているディレクトリーにたどり着くことができました！

##②vimを使ってフィルの中身を編集
この中のsample1.txtを編集したいので、ついに「vim」コマンドを使用してファイルの中身を編集していきます。

```:GitBash
vim sample1.txt
```

vimコマンドを使うと、ファイルの編集をする画面にCUIが変更されます。
そして、vimの中にもモードが3つに分かれています。
モードは以下の通りです。

| モード名    | 意味              | 主な機能      | 起動の仕方 |
|:-----------|------------------:|:------------:|:---------:|
| NormalMode | コマンド入力モード | カーソルの移動。他のモードへの移行。テキストのコピー、カット、ペースト。 | Esc |
| InsertMode | 文字入力モード     | テキストの入力、編集。 |a/i/A/I/ciw/(いづれかのどれか) |
| VisualMode | 文字選択モード    | テキストの選択。      | v |

基本的に、vimコマンドで編集画面に切り替わった時は、コマンド入力モードになっています。そして、カーソルを動かすには、hjklキーの4つを使います。h、j、k、lの順番で左、上、右、下にカーソルを移動させることができます。また、私のPCでは矢印キーでもカーソルを動かせたので、矢印キーでも動かせると思っています。（できない方もいるかもしれないです、、）

コマンドモードでのカーソル移動ができたあとは、まずは編集画面を終了させる方法を身に付けます。
```:q```とコマンドをたたくと編集を終了することができます。もし、中身を編集したあとに編集画面を出たいときは、ファイルの保存が必要になるので、保存して終了というコマンド```:wq```を使います。どちらも試してみてください。

次に、いよいよファイルの中身を編集していきます。
もう一度```vim sample1.txt```で編集画面に入ります。そして、モードを文字入力モードに変更します。好きなコマンドを使ってください。私は、「i」を使っています！
文字入力モードになっている際は、下に**「INSERT」**と出ていると思います。文字入力モードでは、通常通りファイルの中身の編集ができます。

編集ができたら、**「Esc」**を押すことで、文字入力モードからコマンドモードに戻ることができます。そして、先ほど説明した```:wq```で保存して終了を行います。

GUI上で確認をしてみても、しっかりとファイルが編集できていることが確認できると思います！
これでGitBash（CUI）上でのファイルの編集ができるようになりました！

#まとめ
GitBash（CUI）上でファイルを編集したいときは、少しのLinuxコマンドを理解することと、vimについて詳しくなることが必要です。
最初は理解しづらいですが、慣れれば意外と簡単なのでとにかく間違ってもいいからコマンドを打ちまくって実践することが大事だと感じます。

vimコマンドももっといろいろと機能があるので、さらに詳しく知りたい人は調べてみることをお勧めします！

#参考サイト
CUIとGUIの参考
https://www.pc-master.jp/words/cui-gui.html

GitBashについての参考
https://www.sejuku.net/blog/72673

vimコマンドの参考
https://qiita.com/JpnLavender/items/fabcc79b4ab0d52e1f6d

# 最後に
最後までお読みになってくださりありがとうございます。もし、参考になったり、少しでも役に立った、良い記事だなと感じていただけましたら**"LGTM"**を押してくださるととても励みになります！！！お願いします！ポチっと押してくださいー！

この記事は、駆け出しエンジニアの筆者が自分のメモと理解向上のために、自分と同じ駆け出しエンジニアでも分かるように、分かりやすく解説することを目的とした記事です。誤った記載をしてしまうかもしれませんがご了承下さい。誤ってる際はコメントにてご指摘してくださると幸いです。

少しでも駆け出しエンジニアの方の力になれると幸いです。また、同じく駆け出しエンジニアの方々、一緒に頑張っていきましょう！

Twitterもやっているのでぜひフォローしてください→https://twitter.com/EngineerShige