Vim が使いづらいのは他のエディタと操作体系が大きく異なるからです。例えば3行下に移動して、そこから始まる4行を切り取って、ファイルの先頭に移動して、そこに切り取った4行をペーストしたいとしましょう。
マウスカーソルを使いますか?それともキーボードを使いますか?
一般的なテキストエディタでキーボードを使えば概ねこんな感じでしょう。
カーソルキーの↓を3回タイプ、シフトキーを押しながら↓を4回タイプ、CTRL-x をタイプして切り取り、Home キーを押してファイルの先頭に移動、CTRL-v をタイプしてペースト
これを Vim でやるとどうなるでしょうか。
3j4ddggP
これで終わってしまいました。`3j` は3行下に移動するという意味、`4dd` は4行消すという意味、`gg` はファイルの先頭に移動するという意味、`P` はカーソルよりも前の行に貼り付けるという意味です。
分からない人にとっては呪文ですよね。でもこれが呪文を覚えた人にだけ使える魔法なのです。
Vim が使いやすいか使いづらいかは、呪文を覚えた人かどうかで変わります。
何故と言われると、作成当時の時代背景と状況下ではかなり良い判断だったと思っています。確かに使いづらいと言われますし、最初は苦行そのものの状態が続きます。例えるならばお箸みたいです。最初は使い辛くて、スプーンやフォークの方が楽なのに、何故箸を使わなければいけないのかと思う状況に似ています。別に日々の食事を箸では無くフォークとナイフを使っても悪いわけでは有りません。ただ、一度箸に成れた身としては Windows だろうと Linux だろうと関係なく、Vim を使いたいと思ってしまう程とても楽です。今では他の Editor を使い辛く感じて使おうとは思いません。丁度今開いている画面を張っておきます。(Quora の別の回答用説明プログラムの編集と実行確認、そして結果をコメントとしてソースに張り込む作業中)
下部のバックが白いペインはターミナル機能で、Windows CMD 経由で Haskell の repl である ghci を実行しています。入力している命令は、上部のペインで記述した関数を個別に実行させてるものです。これらのペイン間をマウス操作無しで移動できますし、コピー・ペーストがキー操作だけでお互いに出来ます。repl で実行した結果を上部の Editor に張り込む事も出来ますし、Editor 上で記述した
何故と言われると、作成当時の時代背景と状況下ではかなり良い判断だったと思っています。確かに使いづらいと言われますし、最初は苦行そのものの状態が続きます。例えるならばお箸みたいです。最初は使い辛くて、スプーンやフォークの方が楽なのに、何故箸を使わなければいけないのかと思う状況に似ています。別に日々の食事を箸では無くフォークとナイフを使っても悪いわけでは有りません。ただ、一度箸に成れた身としては Windows だろうと Linux だろうと関係なく、Vim を使いたいと思ってしまう程とても楽です。今では他の Editor を使い辛く感じて使おうとは思いません。丁度今開いている画面を張っておきます。(Quora の別の回答用説明プログラムの編集と実行確認、そして結果をコメントとしてソースに張り込む作業中)
下部のバックが白いペインはターミナル機能で、Windows CMD 経由で Haskell の repl である ghci を実行しています。入力している命令は、上部のペインで記述した関数を個別に実行させてるものです。これらのペイン間をマウス操作無しで移動できますし、コピー・ペーストがキー操作だけでお互いに出来ます。repl で実行した結果を上部の Editor に張り込む事も出来ますし、Editor 上で記述した SQL を MySQL に投げて実行した結果を張り込む事等も日常的に行っています。箸に慣れると手放せません。
Subversionを10年近く利用してからGitに移行し、散々苦労しました。
その理由は、なまじSubversionと似ている用語があるにも関わらず、根本的な考え方が異なるからだと今は考えています。
いえ、私は分散リポジトリの話がしたいのではありません。それはMercurialやBitkeeperなども使っています。私は何度も同僚から、Gitが難しいのは分散リポジトリだからだと聞かされました。
違います。
Gitの最も大きな特徴だと私が感じるのは、その管理対象が伝統的なソースコード管理と異なる点です。
私が親しんできたSubversionは、ソースコードを変更してコミットすると、以前のバージョンからの差分をデータベースに保存します。これは合理的で自然な考えだと思います。巨大なシステムでも、バグ修正や機能変更は多くの場合ソースコードの一部を書き換えるだけで終わるからです。変更していない残りのソースコードまで保存するのは全くの無駄です。
しかしGitでは、全てのソースコードを保存します。私が数千行あるソースコードの中で2〜3行変えただけでも、Gitは全く新しい、元のファイルと2〜3行しか違いのない数千行のファイルを作成して保存します。これはデータ量の観点からは非常にナンセンスな、非合理的な動きに見えます。
これに何の意味があるのでしょうか?
それは、1つのコミット情報さえ有れば全てのソースコードが復
Subversionを10年近く利用してからGitに移行し、散々苦労しました。
その理由は、なまじSubversionと似ている用語があるにも関わらず、根本的な考え方が異なるからだと今は考えています。
いえ、私は分散リポジトリの話がしたいのではありません。それはMercurialやBitkeeperなども使っています。私は何度も同僚から、Gitが難しいのは分散リポジトリだからだと聞かされました。
違います。
Gitの最も大きな特徴だと私が感じるのは、その管理対象が伝統的なソースコード管理と異なる点です。
私が親しんできたSubversionは、ソースコードを変更してコミットすると、以前のバージョンからの差分をデータベースに保存します。これは合理的で自然な考えだと思います。巨大なシステムでも、バグ修正や機能変更は多くの場合ソースコードの一部を書き換えるだけで終わるからです。変更していない残りのソースコードまで保存するのは全くの無駄です。
しかしGitでは、全てのソースコードを保存します。私が数千行あるソースコードの中で2〜3行変えただけでも、Gitは全く新しい、元のファイルと2〜3行しか違いのない数千行のファイルを作成して保存します。これはデータ量の観点からは非常にナンセンスな、非合理的な動きに見えます。
これに何の意味があるのでしょうか?
それは、1つのコミット情報さえ有れば全てのソースコードが復元できると言う点にあると思います。個々のコミット履歴は自分だけで完全なソースコード一式を復元できるので、お互いに独立した、粗な関係を維持しています。
Subversionでは差分を管理し、あるコミット時点での完全なソースコードを得るには最初のコミットから全ての差分を適用するという考えでした。Gitはその逆で、完全なソースコードを管理し、変更差分を得るには直前のコミットと比較して得ています。発想がSubversionやMercurialとは真逆なのです。
全てのコミット履歴が自分だけで完全なソースコードを再現できる、コミット間の連結は単に変更差分を計算するだけ…となると、コミット履歴の操作は随分と自由になります。
私の作業ブランチのベースとなったmasterブランチに、同僚が不具合修正をコミットしたとします。私はrebaseにより、自分の作業開始があたかも同僚のコミットの後から始まったかのように操作することができます。
せっかく自分の修正をコミットしたのに、1ファイルだけコミットが漏れていることもあります。commit --amendで、私は先ほどのコミットに最初からそのファイルが含まれていたかのように操作できます。
関連した修正が連続するよう、コミットの順番を操作することもできます。
Subversionでは、コミット履歴は決して揺るがない不変の厳然たるまさに歴史そのものでした。しかしGitではその歴史を変えることができるようなデータ構造になっており、私も同僚も好きなタイミングで自由に各々の歴史を書き変えることができます。
それが良い場合もあるでしょうが、共通リポジトリの歴史を勝手に書き換えられるとトラブルの元になります。rebaseをすると、コミットメッセージは同じでも40桁のハッシュ値は変わりますよね。それは似てはいるけれども実は改変された新たな歴史であるからです。もしコマンドラインにrebase前のハッシュ値が残っていたら、checkoutしてみて下さい。まるで平行宇宙のように、以前のコミットが取得できるはずです。rebaseは新たな歴史を作るので、不用意に共通リポジトリで行ってしまうと、運の悪い同僚の誰かがそのまま平行宇宙から合流できなくなるかもしれません。
最後に、もう一度Gitのロゴを見てみてください。点が線で繋がれていると思います。これはGitが点=個々のコミット履歴を独立したデータとして扱っており、コミット間の関係は単にその前後関係でしかない、ということを表しているのだと思います。
コマンドを覚えないといけないのは初学者にはハードルが高いのだろうと。
またモードがあって、入力と編集が別作業というのが多分「知らない世界」観であって慣れないといけないところなんだろうと。
特に後者は、ソースコードを作成するというワークフローを考えると、最初にコードを入力するのと、それを推敲編集するのとをある程度強制的に分けているわけで、VI のワークフローを押し付けてくることになってます。
これはこれで慣れると
- ざっと全部入力
- さっと見直し推敲編集
- ざっと言語処理系を通して文法的な書き誤りをチェック
- 文法的な書き誤りを修正編集
- 言語処理系が受付るようになったら、動作チェック
- 動作の変なところがなくなるように修正編集
みたいなワークフローにマッチしていて、それぞれで頭の切り替えもできてよろしいのですが、昨今の環境だと3は1の際に環境がチェックして示唆してくるので4まで1の段階で大体OKになってしまう。
けれど1をやっているときって、大体全体構想みたいなのを思い浮かべながらまずラフに全体構造を描くみたいな感じでやるんで、そうなると3,4の作業じみたことに意識レベルが年中引き下ろされるのはいただけないなぁというのはあります。
このあたりのワークフロー寄りの人からすると、入力中の補完は便利だけど、細部の誤り指摘は入力中はいらない機能だったりするので。そういうのはある意味単純作業なんで、後でまとめてやるよと。私見で
コマンドを覚えないといけないのは初学者にはハードルが高いのだろうと。
またモードがあって、入力と編集が別作業というのが多分「知らない世界」観であって慣れないといけないところなんだろうと。
特に後者は、ソースコードを作成するというワークフローを考えると、最初にコードを入力するのと、それを推敲編集するのとをある程度強制的に分けているわけで、VI のワークフローを押し付けてくることになってます。
これはこれで慣れると
- ざっと全部入力
- さっと見直し推敲編集
- ざっと言語処理系を通して文法的な書き誤りをチェック
- 文法的な書き誤りを修正編集
- 言語処理系が受付るようになったら、動作チェック
- 動作の変なところがなくなるように修正編集
みたいなワークフローにマッチしていて、それぞれで頭の切り替えもできてよろしいのですが、昨今の環境だと3は1の際に環境がチェックして示唆してくるので4まで1の段階で大体OKになってしまう。
けれど1をやっているときって、大体全体構想みたいなのを思い浮かべながらまずラフに全体構造を描くみたいな感じでやるんで、そうなると3,4の作業じみたことに意識レベルが年中引き下ろされるのはいただけないなぁというのはあります。
このあたりのワークフロー寄りの人からすると、入力中の補完は便利だけど、細部の誤り指摘は入力中はいらない機能だったりするので。そういうのはある意味単純作業なんで、後でまとめてやるよと。私見ですが。
そういうのが全然問題ない人もいるでしょうし、人それぞれでしょうね。
VI 系エディタを使って効率よくプログラムを書こうとすると、「ラフスケッチから詳細へ」の描き方に半強制されるのが多分初学者には厳しい修行に映るんじゃなかろうかと思います。
まあ、どんなに使いにくいと思ったとしても、Dvorak 配列まんまでvi使っている私の比ではなかろう。
参考:Dvorak配列では、QWERTYに照らした時に
←:J(qwertyでのJの場所を押すと、DvorakではHがでます。)
↓:C(qwertyでのCの場所を押すと、DvorakではJがでます。)
↑:V(qwertyでのVの場所を押すと、DvorakではKがでます。)
→:P(qwertyでのPの場所を押すと、DvorakではLがでます。)
になります。(まあ、Dvorak用のキーマップを施したviのバインディング設定ファイルもあるんだけどね。)
で、はっきり言ってコンピュータ使いのプロにとって、マウスは邪道です(キッパリ)。キーボード上のホームポジションから手を動かさずにほぼ全ての事が出来る環境と言うのは、Fit's law を引き合いに出すまでもなく、最も効率の良い操作なのですから!
SCCS → RCS → CVS → subversion (+ VSS, Perforce) → git と使ってきましたが、確かにgitの手前のギャップは他の移行よりも大きかったです。その理由は、背後にあるモデルが大きく変わったからです。
subversionまでは「履歴管理」ですが、gitは「パッチの有向グラフ」なんです。ただ、最初にこれだけ聞いてもわからないんじゃないかと思います。私はわかりませんでした。2000年代初めに分散バージョン管理システムのarchを設計していたTom Lordが「分散バージョン管理システムをちゃんと動かすには履歴管理でなくパッチの依存管理にしないとだめだ」と言ってて、でも私はパッチの管理って履歴管理と同じことじゃないの、と思ってたんですね。
gitを使い始めてしばらくはそれまでのチェックアウト/チェックイン/マージをgitのワークフローに当てはめようとして、なんだかよくわからないなあ、と思ってたんですがある時「ああ、単にパッチの有向グラフがあって、ブランチやタグはグラフのノードについたラベルにすぎないんだ」と気づいたらなぜgitのコマンド体系がああなっているのかすっきりわかりました。そこでやっとTom Lordが言ってた意味もわかったんです。
今はgitがとりわけ難しいとは思わないんですが、「有向グラフの操作だよ」というのを読んだり聞いたりするだけじゃ
SCCS → RCS → CVS → subversion (+ VSS, Perforce) → git と使ってきましたが、確かにgitの手前のギャップは他の移行よりも大きかったです。その理由は、背後にあるモデルが大きく変わったからです。
subversionまでは「履歴管理」ですが、gitは「パッチの有向グラフ」なんです。ただ、最初にこれだけ聞いてもわからないんじゃないかと思います。私はわかりませんでした。2000年代初めに分散バージョン管理システムのarchを設計していたTom Lordが「分散バージョン管理システムをちゃんと動かすには履歴管理でなくパッチの依存管理にしないとだめだ」と言ってて、でも私はパッチの管理って履歴管理と同じことじゃないの、と思ってたんですね。
gitを使い始めてしばらくはそれまでのチェックアウト/チェックイン/マージをgitのワークフローに当てはめようとして、なんだかよくわからないなあ、と思ってたんですがある時「ああ、単にパッチの有向グラフがあって、ブランチやタグはグラフのノードについたラベルにすぎないんだ」と気づいたらなぜgitのコマンド体系がああなっているのかすっきりわかりました。そこでやっとTom Lordが言ってた意味もわかったんです。
今はgitがとりわけ難しいとは思わないんですが、「有向グラフの操作だよ」というのを読んだり聞いたりするだけじゃなく、自分で操作して腑に落ちないと、とても取っつき辛いだろうと思います。敢えて言えば、履歴を記録しているのではなく、履歴を作っているのだ、という発想の転換でしょうか。
Git誕生10周年を記念した開発者のリーナス・トーバルズ氏のインタビュー
(あちこちで言われている事ですが)リーナスの知識ベースが凡人と乖離している事が一因ではないかと思います。足りないものは自分で足せば良いと思っていた以上に、使う側と前提知識を共有していなかったと。
ユーザーがGitを通じてやりたい事とGitが実現している事が違うのが見えづらい上、CUIベースで概念をすぐに理解出来る人があまりいないのが要因ではないでしょうか。
また、GitHub等のホスティングサービスの機能とGitの機能の違いを理解しないまま、手順としてなぞってしまう為に、混乱してしまうのではないでしょうか。
そしてGit本体のインストール方法が、Windowsベースだと、Git for Windowsが一般的だと思うのですが、そのままだと使いづらい面が多く、SVN慣れした人ならTortoisegitと併用する事を勧めるのですが、結構あるパターンとして、GUI以外使わないようになってしまい、かえってGitの仕組みを知らなくなってしまう。Tortoisegitの吐いたコマンドを見ると、純粋にGitコマンド叩くのと違うオプションだったりして、理解するには、結局コマンドを覚えるほうが楽だと気づくのに時間がかかると。ホスティングサービスのツールだと、複雑すぎて、面食らうんじゃないでしょうか。(少なくとも私はそう思いました)
これ
Git誕生10周年を記念した開発者のリーナス・トーバルズ氏のインタビュー
(あちこちで言われている事ですが)リーナスの知識ベースが凡人と乖離している事が一因ではないかと思います。足りないものは自分で足せば良いと思っていた以上に、使う側と前提知識を共有していなかったと。
ユーザーがGitを通じてやりたい事とGitが実現している事が違うのが見えづらい上、CUIベースで概念をすぐに理解出来る人があまりいないのが要因ではないでしょうか。
また、GitHub等のホスティングサービスの機能とGitの機能の違いを理解しないまま、手順としてなぞってしまう為に、混乱してしまうのではないでしょうか。
そしてGit本体のインストール方法が、Windowsベースだと、Git for Windowsが一般的だと思うのですが、そのままだと使いづらい面が多く、SVN慣れした人ならTortoisegitと併用する事を勧めるのですが、結構あるパターンとして、GUI以外使わないようになってしまい、かえってGitの仕組みを知らなくなってしまう。Tortoisegitの吐いたコマンドを見ると、純粋にGitコマンド叩くのと違うオプションだったりして、理解するには、結局コマンドを覚えるほうが楽だと気づくのに時間がかかると。ホスティングサービスのツールだと、複雑すぎて、面食らうんじゃないでしょうか。(少なくとも私はそう思いました)
これも良く言われる事ですが通過儀礼がキツいので、SVNからの翻訳は最初だけにして、なるべく早くGitという文化を理解する事をお勧めするのですが、現世利益的に?実務を優先する為、SVN同様、「ソース」を「格納」する「手順」になってしまう為、なんでこんなにまどろっこしいの?となってしまうのかなと思います。
この辺りは語学に近いですね。SVNでいうところのブランチはGitのブランチには翻訳不能だって事になかなか気づかないと言うか。
まぁ慣れればどうってこともないです。
Gitを理解するにはローカルから始めるのが一番だと私は思っています。リーナスがGitを作った時のように。日々の作業をなるべくGitコマンドを駆使してやってみる。作る、コミットする、作りかける、スタッシュする、チェックアウトする、diffとってチェリーピックする。スタッシュ戻す、続きやる、コミットする、タグ付けするなどは、リモートを使わないという感覚を覚える。
それから次に、pull(fetch +merge)と、fetch —rebaseの違いを理解する。対応するのはpushだけで良いとか。
ステージング(git add )については、実際のところIDEのgitプラグインやtortoise gitなんかでも、チェックボックスだけだったりするので、後から覚えても良い気がしています。
forkとプルリクエストはホスティングサービスの機能なので、コードレビューの文化として、またOSS活動の知識として理解することが肝心だと思います。
何事も「相対的」なものなので、ご質問者様だけの感想でvimそのものが使いづらいと断定する事は出来ません。そうとも言えますし、そうとも言えないのです。ただ、「Vimは使いづらい」というのは、一個人の感想としてはごく当たり前の感想だと思います。
「相対的」の意味は大きく2種類あります。
1)Vimが登場した、或いはVimの元となったviが登場した時代背景を考えずに、最新式の、しかもご質問者様が慣れたエディタと比較する事。
自動車のATは運転しやすいのに、なぜMTはこんなに運転しづらいのですか、という話と同様です。順序としては最初MTしかなくて、後に運転しやすくするためにATが後に出来たわけです。ATしか運転したことのない人がMTに乗って持つ感想としては自然な感想ですが、単純に事実としては順序が逆なのです。比べる対象が間違っているのに、使いづらい理由を尋ねるふりをして、当たり前のことをことさら批判しているのです。知っていてか知らずにかはわかりませんが。
2)個人の資質はさまざまであるのに、自分の感想は全人類共通の感想と思っていること。
Vimが使いやすいと言っている人の記事や感想を見られたり聞かれたことがないのかも知れませんが、本当にどうしようもなく使いづらいものならば、何でも自然に淘汰されるものです。今どきのLinuxであれば
何事も「相対的」なものなので、ご質問者様だけの感想でvimそのものが使いづらいと断定する事は出来ません。そうとも言えますし、そうとも言えないのです。ただ、「Vimは使いづらい」というのは、一個人の感想としてはごく当たり前の感想だと思います。
「相対的」の意味は大きく2種類あります。
1)Vimが登場した、或いはVimの元となったviが登場した時代背景を考えずに、最新式の、しかもご質問者様が慣れたエディタと比較する事。
自動車のATは運転しやすいのに、なぜMTはこんなに運転しづらいのですか、という話と同様です。順序としては最初MTしかなくて、後に運転しやすくするためにATが後に出来たわけです。ATしか運転したことのない人がMTに乗って持つ感想としては自然な感想ですが、単純に事実としては順序が逆なのです。比べる対象が間違っているのに、使いづらい理由を尋ねるふりをして、当たり前のことをことさら批判しているのです。知っていてか知らずにかはわかりませんが。
2)個人の資質はさまざまであるのに、自分の感想は全人類共通の感想と思っていること。
Vimが使いやすいと言っている人の記事や感想を見られたり聞かれたことがないのかも知れませんが、本当にどうしようもなく使いづらいものならば、何でも自然に淘汰されるものです。今どきのLinuxであればGUIのエディタもいくつもあり、選択肢は増えているのに、未だにVimが残っていて改良が続いているのは、それなりに理由があるからでは?という事を想像してみてはいかがでしょうか。
回答:単に慣れていない状態であるだけか、比べる対象が間違っているか、自分の感想が絶対だと思っているから、使いづらいと思われるだけです。何かの個々の部分の使いづらさは個々人の相対的な感想でしかなく、使いづらい理由も様々で、Vimの存在そのものが絶対的に使いづらいものである、という理由が取り立てて存在する訳ではありません。
私は物理キーボードならタッチタイピングがある程度の速度で出来る一方、フリック入力はとても入力しづらいですが、フリック入力を使いこなしている人から見たら、キーボードより全然早くていいじゃん、何言ってるの?という話にしかなりませんよね。私がいくらフリック入力の欠点を挙げても、それを打ち消す利点はいくらでもありますから、「何かが使いづらい」というのは、結局は個人の感想でしかないのです。
例えば、Vimは文字を修正するのに何でいちいちiを押して終わったらESCを押すんですか、使いづらいです、という話も、そもそもそうなった背景と理由があるからで、わざと使いづらい理由をつけた上でそのような操作にしたわけではありません。例えば他のエディタのように起動した瞬間に編集モードに入っていた場合、閲覧だけしたいファイルを開いたのに、間違ったキーを気づかず触っただけで編集されてしまうのを防いでいる素晴らしい機能なのです。そんなの編集マークがつくし、Undoできれば不要でしょとか、理由は何とでもつけられるのです。私は閲覧モードと編集モードという概念があるのは素晴らしいと思っていますが、そう思わない人もいる、というだけの事です。使いづらくするための理由があってそのようなモードをつけたわけではないのです。
そもそもUIなんてそんなもので、誰もわざわざ使いづらいようにしてやろうと思って、或いは使いづらい理由をつけた上でわざとそのように作ったわけではなく、大抵の場合はある人にとっては使いづらいと感じるだけか、よく考えずに作った結果としてそうなってしまったか、或いは設計上、実装上やむを得ない事情でそうせざるを得なかった、という程度の話です。それはVim一つを取ってみても、個々の機能の使いづらさはどれかに当てはまると思います。
質問の形を借りてはいるけれども、実は単にVimを批判したいだけなら、理由を答えても本当は仕方がない事でしょう。「そうそう、Vimって本当に使いづらいよね、わかります」という回答を期待されているんですよね。別の質問で見かけたのですが、愚痴にマジレスするなよ、という程度の話ですよね(笑)。
或いはここで得られた回答を見て、Vimの成り立ちに興味を持たれて、理由がわかれば納得して使えるようになるのであれば、Vimのファンが一人増えますし、理由を聞いてもやっぱり納得できなければ、別にいくらでもあるほかのエディタを使えばいいと思います。
モーダルだからというのを、UIの授業で聞いたことがあります。
つまり、書き込みモード、上書きモード、コマンドモードなど、状態を常に意識し、それぞれある意味違うプログラムとして覚えなければならないということです。
ただ、他の回答者も仰る通り、「覚えやすいもの」と「便利なもの」は必ずしも同じではないので、毎日使うような道具は覚えやすさより便利さが重視されるのも間違いではないと思います。
僕自身はvimやvimプラグインをそこらじゅうで使っています。殆どの機能が英文字キーだけでこなせるので、疲れない気がします。気分の問題だとも思いますが。
IDEの進化は目覚しいものがあり、VSCodeも愛用してます。
一般的にデバッグ等でファイルを移動する場合、マウス操作やカーソルキーの押しっぱなしで画面をスクロールします。そしてその行為に普通は疑問を感じません。
しかしながらVimを使うと「如何にして編集作業の効率を上げるか」を常に意識する様になります。
例えばVimはノーマルモードと挿入モードが分かれており、ビギナーでは文字入力やファイル保存もネットで調べないと出来ない様な代物です。「webでの入力すら簡単な時代になぜこんな不便な作りなんだろう?」ほとんどの初学者はそう感じると思います。
しかしViを作ったBill Joy氏やVimの開発を今も手掛けているBram Moolenaar氏は、エディターを用いた(プログラム)作業の大半は文字入力ではなく移動と検索であり、そこを徹底的に使い易いツールを作るべきと見極め、移動にフォーカスしたノーマルモードを動作の中心に据えました。
ーーー今まで考えもしなかった作業効率、特に移動のコストを常に意識するーーー
結果として両手をホームポジションから外さず、マウスはもちろんカーソルキーすらほぼ使わずに編集作業を行える様になります。削除や置換などのアクション(オペレータコマンド)と移動(モーション)を組み合わせた、わずかなキー入力でファイルの中をビュンビュン移動して作業が行える様になると爽快です。
一般的なGU
IDEの進化は目覚しいものがあり、VSCodeも愛用してます。
一般的にデバッグ等でファイルを移動する場合、マウス操作やカーソルキーの押しっぱなしで画面をスクロールします。そしてその行為に普通は疑問を感じません。
しかしながらVimを使うと「如何にして編集作業の効率を上げるか」を常に意識する様になります。
例えばVimはノーマルモードと挿入モードが分かれており、ビギナーでは文字入力やファイル保存もネットで調べないと出来ない様な代物です。「webでの入力すら簡単な時代になぜこんな不便な作りなんだろう?」ほとんどの初学者はそう感じると思います。
しかしViを作ったBill Joy氏やVimの開発を今も手掛けているBram Moolenaar氏は、エディターを用いた(プログラム)作業の大半は文字入力ではなく移動と検索であり、そこを徹底的に使い易いツールを作るべきと見極め、移動にフォーカスしたノーマルモードを動作の中心に据えました。
ーーー今まで考えもしなかった作業効率、特に移動のコストを常に意識するーーー
結果として両手をホームポジションから外さず、マウスはもちろんカーソルキーすらほぼ使わずに編集作業を行える様になります。削除や置換などのアクション(オペレータコマンド)と移動(モーション)を組み合わせた、わずかなキー入力でファイルの中をビュンビュン移動して作業が行える様になると爽快です。
一般的なGUIエディターの移動方法を否定する物ではありませんが、とことん作業効率を高めるとドキュメントの品質も高められるのではないかと思います。
Unixがまだテレタイプ端末を通して使われていた頃は、「わざわざモニターを買ってまでviなんか使うこと無いだろ」と考えていた人は多かったと思います。
「EdはLinuxの標準エディタです」と、冗談半分で言う人は今でもいます。
Unixがまだテレタイプ端末を通して使われていた頃は、「わざわざモニターを買ってまでviなんか使うこと無いだろ」と考えていた人は多かったと思います。
「EdはLinuxの標準エディタです」と、冗談半分で言う人は今でもいます。
今はWindowsもMacもLinux同様にウインドウでマルチタスクでプログラムを動かすのが常識ですが、Linuxが出た当初はPC98や IBMなどの様にシングルタスクでプログラムを実行するのが当たり前でした。
そんな中、Linuxと言うかUNIX全般もですがコンソールでプログラム名の後に&記号を付けるだけで簡単にマルチタスクでプログラムを実行してくれました。これは衝撃的でしたね。しかもパイプで繋ぐだけで複数の処理を連携して実行出来るので、新規にプログラムを作成しなくてもかなりの処理を行えるのも魅力でした。
またLinuxと言うかUNIXはc言語が元々搭載されてるので、無料で開発できたのも大きなアドバンテージですね。
今はWindowsもMacもマルチタスクが当たり前でフリーソフトも山程あるので昔ほどのアドバンテージは無いかもしれませんが、少ないリソースでもかなりの事が出来ますし、何よりシステムを自由に改変できるのは自由を愛するマニアと言うかギーグにはたまらないと思いますよ。
git の中でやってる事は良いとして、 git cli コマンドのセンスの無さには怒りすら覚えます。
素晴らしいプロジェクトがあるのでご紹介します。
素晴らしい。ていうか右、めちゃくちゃすぎん?
git の中でやってる事は良いとして、 git cli コマンドのセンスの無さには怒りすら覚えます。
素晴らしいプロジェクトがあるのでご紹介します。
素晴らしい。ていうか右、めちゃくちゃすぎん?
最初に出会ったのがviなので特に不都合が感じませんが、「編集モード変更」「かな漢字変換モードの変更」の競合は未だに解決していません _:(´ཀ`」∠):_
カーソル操作については右手ホームポジションのhjklは譲れませんが、モード変更はCtrlの方が良いかも?とは思っています。今更emacsにしても指の習熟度がアレなんですが。
Windowsですが、Ctrl・BS・ESCだけ次のようにバインドしています。
- Capslock…Ctrl ※加えてCtrl+Spaceがかな/漢字キーです。
- 無変換…ESC
- 変換…BS
vimの道に進むかどうかはさておき、肝は「マウスやカーソルの利用頻度を如何に減らすか」です。右腕の移動が少ないと楽です。
//2022-02-03
免責条項:
免責事項:丸っと私見。当たるも八卦当たらぬも八卦。
紙テープや紙カードに手作業でパンチ穴開けるよりは遥かに使いやすいと思います。;ー)
emacs を設定ファイルでカスタマイズして、使いやすくする方法もあります。
Lisp を勉強する必要があります。
ご自分のお好きなエディタを探されてはいかがでしょうか?
ただし、昔のスクリプトは行エディタを多用しているスクリプトも多数あるので行エディタも勉強しておいた方が良いでしょうね。
「使いやすさ」の解釈の違いでしょう。
vim(vi)は使い始めの取っつきやすさに劣り、習熟した後の作業効率では勝ります。使いやすいと思えるまでの習熟期間が長くてもかまわない、という判断の結果でしょうね。そもそもviが作られたUNIXが、習熟した技術者にとって使いやすい(効率よく作業できる)ことを重視したOSですし。
もうひとつvimの初期設定が合わない人はカスタマイズを覚えるまで使いにくい(勝手に色がつくが、その色では見にくい(私だ!)、とか)というのもあるかも。これはvimが悪いと言うよりディストリビューションが配ってる初期設定ファイルのせいかもしれません。
nanoいいじゃないですか。便利と感じるものを使うのが一番です。
とはいえLinux等でnanoはWindowsのメモ帳と同じ位置付けなので、本格的なプログラミングに使うには少し機能不足です。そう感じたら他のアプリを考えれば良いと思います。
(nanoはこういう感じのシンプルなソフトです。常に表示されている下のメニュー通りの機能しかありません)
ちなみにnanoの操作性を使いやすく感じるならEmacsをお勧めします。
例えば以下のような操作性で、nanoとほぼ同じです。ターミナルのシェルも同じですね。
- Ctrl + F : カーソルを右に
- Ctrl + B : カーソルを左に
- Ctrl + N : カーソルを下に
- Ctrl + P : カーソルを上に
- Ctrl + E : カーソルを行末に
- Ctrl + A : カーソルを行頭に
- Ctrl + H : BackSpace
- Ctrl + D : Delete
- Ctrl + U : カーソル位置から行頭まで削除
- Ctrl + W : カーソル位置から単語の先頭まで削除
元々これらは昔のキーボードに矢印キーやHome/Endキーが無かったために必要だったのですが、「ホームポジションから手を大きく動かさずに色々できる」ことはブラインドタッチのユーザーにとって大きなメリットなので、今もかなり使われています。矢印キーを触った後に手を戻す時、毎回手の位置を確認するのが面倒だか
nanoいいじゃないですか。便利と感じるものを使うのが一番です。
とはいえLinux等でnanoはWindowsのメモ帳と同じ位置付けなので、本格的なプログラミングに使うには少し機能不足です。そう感じたら他のアプリを考えれば良いと思います。
(nanoはこういう感じのシンプルなソフトです。常に表示されている下のメニュー通りの機能しかありません)
ちなみにnanoの操作性を使いやすく感じるならEmacsをお勧めします。
例えば以下のような操作性で、nanoとほぼ同じです。ターミナルのシェルも同じですね。
- Ctrl + F : カーソルを右に
- Ctrl + B : カーソルを左に
- Ctrl + N : カーソルを下に
- Ctrl + P : カーソルを上に
- Ctrl + E : カーソルを行末に
- Ctrl + A : カーソルを行頭に
- Ctrl + H : BackSpace
- Ctrl + D : Delete
- Ctrl + U : カーソル位置から行頭まで削除
- Ctrl + W : カーソル位置から単語の先頭まで削除
元々これらは昔のキーボードに矢印キーやHome/Endキーが無かったために必要だったのですが、「ホームポジションから手を大きく動かさずに色々できる」ことはブラインドタッチのユーザーにとって大きなメリットなので、今もかなり使われています。矢印キーを触った後に手を戻す時、毎回手の位置を確認するのが面倒だからです。かといって確認せずにズレたままタイピングを始めるともっと悲惨です。
対してVimの操作性はnanoやEmacsよりもさらに独特ですが、使いこなしている人のVim操作は、魔法でソースコードが勝手に変化していくように見えるほど効率的です。私は達人には程遠いですが、それでも他のソフトを使うたびに「Vimならここでこうできるのに!」ってなります。慣れるまでは大変ですが、個人的にはおすすめです。
ちなみにMacでは大体どこでも上記のEmacs式カーソル移動が使えます。便利だから需要があるのでしょう。私もVimの挿入モード(Insert mode)内でEmacs式のカーソル移動ができるように設定しています。シェルがEmacs式のカーソル操作なので無意識に打ち込んでしまうことがあるのと、実際ちょっと移動したい時とかに便利だからです。
なんにせよ、どんなエディタを選ぶかは単なる好みでしかありません。もし色々使っているうちにVimを極めたくなったら歓迎しますよ。
UNIXでのスクリーンエディタの始祖みたいなエディタな訳ですが、これ、コマンド体系がその前のラインエディタexを引きずっているんですよ。ラインエディタ知ってますか?
古くからパソコンを触っている人なら、MS-DOSについてきていたEDLINを覚えてると思います。あんな感じです。
その当時は、
- 対話型コンソールはあまりなかった
- 対話型コンソールの通信速度は300-2400ボー程度
- カーソルキーが無いマシンで開発された
- exとの互換性が重視された
などがviの基本設計です。今時のスクリーンエディタと同じように使うことは想定されていないのです。一方で、
- どのUNIXにも入っている
- 軽量
という特徴があります。UNIXをインストールして、最初に設定ファイルを書き換えるときの第一選択はvi系しかないのです。ですから、「とりあえずの編集ができるのはUNIX使いとしての最低教養」です。「使いづらい」とか口から**吐く前に習熟しましょう。
viを使いこなせる頃には、sedも使いこなせるようになっているでしょう。
登場人物が把握しやすいのです。
Linuxの普通のディストリなら、自分でソフトウェアを入れたり設定したりビルドしているうちに、このソフトウェアがこう動いているからこの機能が提供されているのだな、という土地鑑のようなものが育ちます。
Windowsのみを使っていた頃は後ろのサービスだとかレジストリのどれが何をしているのか、よく分からないままでした。妙にCPUとメモリを食っているsvchostって切ってええの…?と切ってみて大変なことになったり、msconfigをいじっただけで起動すらせんとは何事や!と憤慨していました。自業自得ではあります。
じゃあ勉強したるわ!とMicrosoftのページに行くと、これがまたわかりにくい。一種独特のMicrosoft固有の語彙が理解を妨げます(私はMicrosoft Vocabularyとでも名付けて辞書を売ってくれとすら思っています)。
これ、一般名詞なの?定義は別サイト見ないと分からない?それとも私の頭が悪いだけ?みたいな自己嫌悪がやってきて非常に嫌な思い出しか残りません。分かった!というアハ体験をしたことがない。
他にも、Cortanaを切りたいけど切れない!とかいう不満が一時期ネットでありましたね。あれはCortanaがエクスプローラか何かにとって必須となっていることが問題、ではなく、誰がどれだけリソースを使っているのかが分からない、ということが根本原
登場人物が把握しやすいのです。
Linuxの普通のディストリなら、自分でソフトウェアを入れたり設定したりビルドしているうちに、このソフトウェアがこう動いているからこの機能が提供されているのだな、という土地鑑のようなものが育ちます。
Windowsのみを使っていた頃は後ろのサービスだとかレジストリのどれが何をしているのか、よく分からないままでした。妙にCPUとメモリを食っているsvchostって切ってええの…?と切ってみて大変なことになったり、msconfigをいじっただけで起動すらせんとは何事や!と憤慨していました。自業自得ではあります。
じゃあ勉強したるわ!とMicrosoftのページに行くと、これがまたわかりにくい。一種独特のMicrosoft固有の語彙が理解を妨げます(私はMicrosoft Vocabularyとでも名付けて辞書を売ってくれとすら思っています)。
これ、一般名詞なの?定義は別サイト見ないと分からない?それとも私の頭が悪いだけ?みたいな自己嫌悪がやってきて非常に嫌な思い出しか残りません。分かった!というアハ体験をしたことがない。
他にも、Cortanaを切りたいけど切れない!とかいう不満が一時期ネットでありましたね。あれはCortanaがエクスプローラか何かにとって必須となっていることが問題、ではなく、誰がどれだけリソースを使っているのかが分からない、ということが根本原因としてあります。
その点Linuxは色々な開発者のプログラムの集合体ですので、リソースの利用者はそれなりに分かります。不適切な依存関係が無いわけではないのですが…
Windowsで感じていたストレスが無い、というだけでかなりのメリットになります。登場人物(ソフトウェア)の把握がしやすいという特徴がその点を出しています。
ラインエディタ(カーソルが自由に動かせなかった)の名残りが随所にあるからだと思います。
一つはカーソル移動と入力でモードの変更があるくせに、それが明示されないこと。
もう一つはカーソルの表示位置が、現代的なエディタとずれていること。(タブを使うと特に奇妙に感じます)
他の方も書いているように、vimに自分を合わせる必要はないと思います。
ご質問者様がどのようにLinuxをインストールしたPCを使われているかによるのですが、「今のところ良さがわからない」というご感想がすべてを物語っていて、ご質問者様の用途では特段メリットがない、という事です。例えば、WindowsやMacのようなGUIのデスクトップ環境をLinux上で使って、FirefoxなどのWebブラウザでインターネットに接続してコンテンツを利用する分には、今世間に出回っているGUIを使う限り、ほとんど違いはないでしょう。細かい話でOK/Cancelボタンの右左が違うとか、枝葉末節な話位しかないでしょう。
という前提を踏まえて、Linuxは何が良いんですか、というご質問ですが、すでにいくつか出ている回答にあるような使い方をすればメリットが出てくるわけです。例えばサーバー用途では、もはやWindows Serverもシェアが下がっていると聞いており、Linux系のOSが多く利用されているでしょう。なぜLinuxがサーバー用途に向いているのかは、話せば長くなるので興味があれば調べてみてください。
またOSのソースコードが公開されていますから、バグを見つけたり何か改善したくなったら何なら自分でソースコードを修正して対応することができます。これはWindows、Macではまず不可能です。まず、と書いたのは、もしかしたら私はMicrosoftの中の人です、という方なら出来るか
ご質問者様がどのようにLinuxをインストールしたPCを使われているかによるのですが、「今のところ良さがわからない」というご感想がすべてを物語っていて、ご質問者様の用途では特段メリットがない、という事です。例えば、WindowsやMacのようなGUIのデスクトップ環境をLinux上で使って、FirefoxなどのWebブラウザでインターネットに接続してコンテンツを利用する分には、今世間に出回っているGUIを使う限り、ほとんど違いはないでしょう。細かい話でOK/Cancelボタンの右左が違うとか、枝葉末節な話位しかないでしょう。
という前提を踏まえて、Linuxは何が良いんですか、というご質問ですが、すでにいくつか出ている回答にあるような使い方をすればメリットが出てくるわけです。例えばサーバー用途では、もはやWindows Serverもシェアが下がっていると聞いており、Linux系のOSが多く利用されているでしょう。なぜLinuxがサーバー用途に向いているのかは、話せば長くなるので興味があれば調べてみてください。
またOSのソースコードが公開されていますから、バグを見つけたり何か改善したくなったら何なら自分でソースコードを修正して対応することができます。これはWindows、Macではまず不可能です。まず、と書いたのは、もしかしたら私はMicrosoftの中の人です、という方なら出来るかも、くらいの話で通常は出来ません。
恐らく、OSを受け身的に利用するだけ、という場合において、Linuxだから何かが良い、というような事はほとんどないと思います。それはWindowsやMacにも言えると思います。MacはUnixベースではありますが、OSのレベルで自由に改変は出来ませんが、Linuxでは先のようにできます。
PCやOSを選ぶ際には、まず自分が何をやりたいのか、という事を決める事かと思います。そうするともしかしたら、どれかのOSでしかできないことが出てくるかもしれません。その場合はそのOSを選ぶしかありません。iPadを持っていて、時々iPadをサブモニターとして使いたい、というのであれば、Macを選んだ方が無難です。ほかのOSでも不可能ではない、特にLinuxでは自分でソフトを開発すれば出来るかもしれませんが、そんな事が出来る人ならこのような質問はしないでしょう。
ですが、先のようにWebブラウジングくらいしかしないのであれば、今時どんなOSを使っても変わりません。
ですから、「使い始めていますが」というのが、今後OSの内部も理解して自分でLinuxを改良していくぞ!くらいの意気込みのまだスタート地点です、という事であれば、もう少ししたらその良さ、あるいは欠点も見えてくるかと思いますが、単に誰かが作ってくれたアプリケーションを動かしてみる以外にやることはない、くらいの話なのであれば、WindowsやMacの方が良いな、と思う事の方が多いかも知れません。Linuxで動く既成のアプリケーションを使っている限り、Wordのファイル開いたらレイアウトが変、とかむしろ欠点の方が目立つかもしれません。
うーん、いくつかの分岐点を通って使われる様になったけど、日本の90年代からのインターネットインフラ系エンジニア視点としては、Linuxがシェアを拡大し始めた分岐点にはOracleが関与したと感じています。
DBMSであるOracle Serverですね。 これは長いことSQL DBMSのトップに位置していて、今日でも変動はあれどトップクラスに位置しています。
前世紀末から今世紀にかけてのインターネット普及は、昔ながらのシンプルな静的サイトから、データベースを活用するシステムの拡大によるIT革命などと言われるムーブメントで爆発的に加速したと思います。 eコマース等はその主力で、蒸気機関の代わりにJavaやASPなどを動かすためのアプリケーションサーバとデータベースサーバが一気に増加しました。 当時もオープンなSQL DBMSであるMySQLやPostgresなどあれど、中規模以上で業務レベルを求めるとOracleかSQL Serverが選択されましたが、コレを動かすOSは有償OSだけだったんですよね。 ここで前世紀末にOracle社がOracle 8i Linux版をリリースしました。 対抗馬であるSQL ServerはWindows NT Serverとの組み合わせで完全有償スタイルに対して、Oracleは無料OSを利用可能であったのでトータルコストを引き下げてくれました。 当初は
うーん、いくつかの分岐点を通って使われる様になったけど、日本の90年代からのインターネットインフラ系エンジニア視点としては、Linuxがシェアを拡大し始めた分岐点にはOracleが関与したと感じています。
DBMSであるOracle Serverですね。 これは長いことSQL DBMSのトップに位置していて、今日でも変動はあれどトップクラスに位置しています。
前世紀末から今世紀にかけてのインターネット普及は、昔ながらのシンプルな静的サイトから、データベースを活用するシステムの拡大によるIT革命などと言われるムーブメントで爆発的に加速したと思います。 eコマース等はその主力で、蒸気機関の代わりにJavaやASPなどを動かすためのアプリケーションサーバとデータベースサーバが一気に増加しました。 当時もオープンなSQL DBMSであるMySQLやPostgresなどあれど、中規模以上で業務レベルを求めるとOracleかSQL Serverが選択されましたが、コレを動かすOSは有償OSだけだったんですよね。 ここで前世紀末にOracle社がOracle 8i Linux版をリリースしました。 対抗馬であるSQL ServerはWindows NT Serverとの組み合わせで完全有償スタイルに対して、Oracleは無料OSを利用可能であったのでトータルコストを引き下げてくれました。 当初はある程度の規模だとIntelアーキテクチャはメモリ等が弱くSunOS(Solaris)+Oracle等の構成を取っていましたが、小規模や開発用のサーバ等では同じSQL方言のまま無料OSで動く事はかなり喜ばれ、他のOSをベースに組んでいるシステムでもDBだけLinux+Oracleが混じっていることが見られ始めました。
ここで使われ始めると、同じ頃に登場したrpmで簡単に(ソースを拾ってきてパッチを当ててコンパイルして・・・と言う手間無く)ソフトウェアを追加して機能を入れられることで、簡単なサーバや学習用などにも使われるようになったと思います。 このあとは良いスパイラルで、Linuxが使われる様になってきたからソフトウェア・ハードウェア側がLinuxで動く様に対応し、それによってユーザが増加しを繰り返し。 更に、実績・知見を積み重ねて行くタイミングでちょうどx86 64登場等もありソコソコの大きいシステムにも使える様になり、とりあえずOSはLinuxで良いんじゃ無い?・・・と一気に広がったかなと。
私もOracleがリリースされる以前はメインがFreeBSDで、少しSlackwareを使ったりする程度でしたが、Oracleに伴って仕事でRedHatを使う様になり、最終的にRedHatへすっかり移動してしまいました。
これ書いていくと、結構いろいろ考えさせられるところがあるなぁと思いました。それで長くなってしまいました。
メリット
- マルウェアに感染しにくい(Windows と比べて少ない)
- 手軽にサーバー環境を構築できる
- 手軽に開発環境を利用できる
デメリット
- 仕事でのオフィス系作業には向いていない(例:Microsoft Officeが使えない)
- OSのアップデート(Linuxではカーネルと呼ぶ)が複雑
- マルウェア対策するのが面倒
- セキュリティ対策をするのに知識が必要
- ディストリビューションが沢山あって迷う
- サポート受けられない可能性が高い
メリット、デメリットを書きましたが、OS(カーネル)のアップデート以外は面倒なことはあっても、デメリットは吸収できると思います。とはいえ、この「面倒」をどこまで許容できるのかですね。基本的にオープンソース・ソフトウェアである Linux OSを使うということは、何かトラブルがあったとき、したいことがある場合には「自分」でなんとかする必要があります。もちろん Redhat Linux等有償のソフトウェアにすればサポートがつきますが、それするなら Windowsのほうが安価です。つまり何かするときに Windowsや macOS のみサポートと書かれたサービスを使うときには自己責任になってしまうということです。最近はWebサービスになってきたので大抵は動作すると思います。でも動かなく
これ書いていくと、結構いろいろ考えさせられるところがあるなぁと思いました。それで長くなってしまいました。
メリット
- マルウェアに感染しにくい(Windows と比べて少ない)
- 手軽にサーバー環境を構築できる
- 手軽に開発環境を利用できる
デメリット
- 仕事でのオフィス系作業には向いていない(例:Microsoft Officeが使えない)
- OSのアップデート(Linuxではカーネルと呼ぶ)が複雑
- マルウェア対策するのが面倒
- セキュリティ対策をするのに知識が必要
- ディストリビューションが沢山あって迷う
- サポート受けられない可能性が高い
メリット、デメリットを書きましたが、OS(カーネル)のアップデート以外は面倒なことはあっても、デメリットは吸収できると思います。とはいえ、この「面倒」をどこまで許容できるのかですね。基本的にオープンソース・ソフトウェアである Linux OSを使うということは、何かトラブルがあったとき、したいことがある場合には「自分」でなんとかする必要があります。もちろん Redhat Linux等有償のソフトウェアにすればサポートがつきますが、それするなら Windowsのほうが安価です。つまり何かするときに Windowsや macOS のみサポートと書かれたサービスを使うときには自己責任になってしまうということです。最近はWebサービスになってきたので大抵は動作すると思います。でも動かなくてもサポートを受けられないというのが最大のデメリットかもしれません。
OS(カーネル)以外の部分については、プリンタ設定も簡単ですし、LibreOffice など仕事以外ならオフィス系ソフトもあるので、それほどは困らないと思います。仕事ではまだ Microsoft Office を必須とする場合もあり、そこが一番の難点だろうなと思います。そこも、Oracle Virtualbox など仮想化ソフトを使って、Windowsを別途インストール(要購入)し、対応することもできます。まぁ Windowsが必要になってくるのは難点ではありますが。
さて、OS(カーネル)のアップデートですが、WindowsやmacOS のようにほぼ全自動で出来ない場合があります。またOSをアップデートしないと動かないソフトがあったり、逆にアップデートすることでおかしな動作をする場合もあります。しなければいいという判断は、セキュリティ対策をしなくてよいという意味になるので、良くないということになります。OSのアップデートを考える上には、まずディストリビューションの話が必要です。
ディストリビューションは、Linux OS(カーネル) に対して、必要なソフトやライブラリ、デスクトップ画面、開発環境、サーバー環境、ソフト管理システム等がパッケージ化されて配布されている形態のことです。
をみると様々な種類があります。たとえば Ubuntsu であるなら
にあるようにOS(カーネル)のアップデートを簡単にするツールがあるようです。他のディストリビューションもあるかもしれません。
マルウェアに感染しにくいのは単純に Windows のほうがシェアが多くて狙うメリットが高いからに過ぎないと思います。
のように Linux にもマルウェアはあります。のでサーバーのための Linux など不要なソフトは一切入れない、ログインも限定で厳しい制約があるなどの場合はともあれ、一般ユーザーとして利用するならあったほうがよいです。そのときにどの製品がよいのかというのも難しいですね。
2019年のLinux用ベスト7(本当に無料の)アンチウィルス
などもありますが、Linux 等 UNIX系OSが初めてならインストールするのに苦労することでしょう。それを嫌ってしまうのなら、Linux系OSの利用には向かないかなと思います。ChromeOS などWindowsや macOS 以外の選択肢もあるのでそうしたものも検討したほうがよいと思います。
またLinuxはサーバー系OSとしてのシェアが非常に大きいため、意図しないサーバー機能が動作しているかもしれません。遠隔ログイン、メールサーバー、ウェブサーバー、ファイルサーバー等です。それらが動いていないか確認する必要があります。もし標準でファイヤウォール(外部からのアクセスを制御するソフトウェア)が動作していないか、設定に不備があった場合、同一ネットワーク(フリースポット等誰でも使えるネットワークに接続した場合等)の誰もがそれらのサービスを通じて、マルウェアを仕込んだり、不正ログインするかもしれません。
https://japan.norton.com/linux-security-1509
Linux 入門者なら知っておきたい、知って安心セキュリティ対策
などを参考に対策を講じておく必要があります。それほど難しいわけではありません。
Linux もバージョンがどんどん上がっていきます。Windows7 が もうすぐサポート期限切れ(2010年1月)になりますが、サポートがきれる前に Windows10へのアップグレードの必要があるよという啓発活動もされています。Linuxも同じように古いOSはサポートが打ち切られていきます。アップグレードはどうするのでしょうか。これが結構面倒なことになります。
のようにアップグレード自体は簡単なものもあります。ただしその前に使っているソフトが新しいバージョンに対応しているか調べておかないと 動かなくなる可能性があることはすでに説明しました。そのあたりを調べるのが結構面倒ということになりますね。
まとめ
自分で調べるなりして解決するモチベーションがある!仕事でも趣味でも Microsoft Office は使わない!のであれば、Linux を利用するのも一つの選択だと思います。そうではなくLinux自体が無料だから、安価だという気持ちだけで選択するのは、快適に利用し続けるための維持管理コストを忘れているので、やめておいたほうがよいかなと思います。
とりあえず Windows端末に Linuxをデュアルブート環境でインストールできるので、もし現在 Windows端末をお持ちなら、両方使える状況にして試すのがよいかなと思います。現在PCを全くもっていない場合に、Linuxをつかうのは周りに誰か聞ける人がいないと辛い可能性があります。そのためあまり推奨できません。ただ状況次第でLinuxのほうがいい(開発したり、サーバー構築したり等)場合もあります。
どちらでも良いです。基本的に「好き嫌い」「向き不向き」だけの問題です。
ちなみに私は最初はEmacsを使っていましたが、viの方が使いやすいと感じたのでずっとvi/vim派です。もう25年ほどvi/vimを使っています。
最近はVS Codeも多少使いますけどね(私はvimマスターと言えそうなレベルではありますが、別にvim教徒ではないので便利なものは何でも使います)。そもそもvimは単なるエディタであってIDEではありませんから、IDEを併用することはよくあります。
vimの最大の特徴はショートカット的なコマンドを駆使して少ないタイピング量で高速に編集できるところです。テキストの編集速度だけで見れば恐らく全エディタで最高レベルだと思われます。ただし、高速で使いこなすには膨大なキーバインドやコマンドを暗記しておく必要があるので、学習が非常に大変です。vimには膨大な機能がビルトインされていますが、恐らくベテランでも全ての機能を把握している人はほとんどいないでしょう(画面分割、タブ機能、折りたたみ、マルチバッファ、ブックマーク、入力補完、差分比較編集、ネットワーク越しの編集、等々)。新機能もどんどん増えていきますから、今でもヘルプを読み漁ることはよくあります。
使いこなせれば他人の数倍の速度でコーディングすることが可能になりますが、使いこなせている人はほとんどいない、というのがvimです
どちらでも良いです。基本的に「好き嫌い」「向き不向き」だけの問題です。
ちなみに私は最初はEmacsを使っていましたが、viの方が使いやすいと感じたのでずっとvi/vim派です。もう25年ほどvi/vimを使っています。
最近はVS Codeも多少使いますけどね(私はvimマスターと言えそうなレベルではありますが、別にvim教徒ではないので便利なものは何でも使います)。そもそもvimは単なるエディタであってIDEではありませんから、IDEを併用することはよくあります。
vimの最大の特徴はショートカット的なコマンドを駆使して少ないタイピング量で高速に編集できるところです。テキストの編集速度だけで見れば恐らく全エディタで最高レベルだと思われます。ただし、高速で使いこなすには膨大なキーバインドやコマンドを暗記しておく必要があるので、学習が非常に大変です。vimには膨大な機能がビルトインされていますが、恐らくベテランでも全ての機能を把握している人はほとんどいないでしょう(画面分割、タブ機能、折りたたみ、マルチバッファ、ブックマーク、入力補完、差分比較編集、ネットワーク越しの編集、等々)。新機能もどんどん増えていきますから、今でもヘルプを読み漁ることはよくあります。
使いこなせれば他人の数倍の速度でコーディングすることが可能になりますが、使いこなせている人はほとんどいない、というのがvimです。私がvimを使っている様子を見た人から「魔法でも使っているみたい」と言われることはよくあります。
vimの最大の欠点は「とっつきにくさ」です。vimを何も知らずに使い始めると恐らく1文字も入力することができないでしょう。
一方、Emacsは初心者には比較的使いやすいと思われます。EmacsはWindowsのメモ帳を使ったことがある人であれば使い始めた瞬間から何か編集してみることが可能です。
Emacsの最大の特徴は何と言ってもEmacs Lispでしょう。Emacsを使いこなすということはLispでマクロを組みまくるということです。また豊富なプラグインがあり、デバッガーやメーラーやWebブラウザーなど、vimに比べると圧倒的にリッチな機能を使うことができます。Emacsはエディターの枠をはるかに超えており、プラットフォームの一種と言う方が近いです。頑張って構成すればEmacs上でほぼ全ての作業を完結させることができるので、小さなOSのようなものと言えます。
なので、「Emacs = エディターとして"も"使えるミニOS」という解釈が正しいかも知れません(笑)
逆にvimはその設計ポリシーとしてvimのプロセス内で別のプロセスを起動することを原理的に嫌っており、あくまでもテキストエディタであることに強くこだわっています。そのため、Emacsのようにエディタとは異なるプロセスとして動く単体のアプリケーションを動作させることはできません。編集機能に関してはvimでもEmacsのように複雑なマクロを組むこともできますが、マクロ用言語はEmacs Lispに比べて極めて貧弱な代物です。vimは自分でカスタマイズして使うにはあまり向いていません(ただし、autocmdのようにマクロあるいはマクロ的な使い方が前提の機能もありますし、また、RubyやPython,Perl,Luaなどの言語と連携できるので、使い込めば相当に複雑な処理も可能ではあります。あまり使いませんけど)。
見方を変えれば、vimはそもそもマクロを何も組まずともかなり高度な操作が可能ですので、自分で外部マクロを組んだり何かを追加でインストールする必要のあるケースはまずありません。大抵はワンライナーのキーボードマクロと外部コマンド呼び出しで事足ります。そのため、どのマシン上でも素のvimさえ入っていれば常に同じような操作が可能である、という汎用性が大きなメリットの一つと言えます。
一方、Emacsの場合は自分のメインマシン上の環境をどんどんカスタマイズして自分好みの環境に仕上げていく、というスタイルです。高度なマクロ(プラグライン)をたくさん組んで作業を自動化したり高度で複雑な処理をしたい場合は、vimよりもEmacsの方が圧倒的に向いているでしょう(vimの場合は自作の外部コマンドを呼び出してフィルタをかけるスタイルが適しています)。自分の環境をカスタマイズしすぎてしまい、違う環境のEmacsは使えない、という人もいます。その代わり、自分用にカスタマイズしたEmacs上での作業効率は相当に高いと思われます。有能なベテランプログラマーでEmacs使いの方を個人的に大勢知っています。
以上のことからわかるように、vimとEmacsはかなり正反対の性質を持つエディタと言えます。そもそも目指している世界が全く違います。機能の膨大さや拡張性の高さ「だけ」が共通している要素と言えます。
まずは両方試してみて、自分の好き嫌いや向き不向きをチェックしてみるのが良いと思います。
単なる検索結果でしかありませんが、vim のトレンドとしては状況に変わりはありません。
どころか vscode が凄い勢いで抜いて行きました。それでも日本で vim の人気が一定の割合を占めているのはコミュニティの盛り上げと neovim の登場が影響しています。
ユーザグループ兼、開発者コミュニティである vim-jp が主導となって vim を盛り上げている側面があります。また vim-jp では幾人かのメンバがオフィシャルの開発グループにパッチを送り続けています。日本語でバグ報告が出来るというのも参入障壁を下げています。
最近では vim の fork である neovim が登場した事で vim ユーザ層に幅が出来た事も話題生み出す1つの要因になっています。
単なる検索結果でしかありませんが、vim のトレンドとしては状況に変わりはありません。
どころか vscode が凄い勢いで抜いて行きました。それでも日本で vim の人気が一定の割合を占めているのはコミュニティの盛り上げと neovim の登場が影響しています。
ユーザグループ兼、開発者コミュニティである vim-jp が主導となって vim を盛り上げている側面があります。また vim-jp では幾人かのメンバがオフィシャルの開発グループにパッチを送り続けています。日本語でバグ報告が出来るというのも参入障壁を下げています。
最近では vim の fork である neovim が登場した事で vim ユーザ層に幅が出来た事も話題生み出す1つの要因になっています。
僕の見てきた範囲の話で考えると、近年の普及やandroidや組み込みを無視して、1990年の中後半、2000年近くから様々な技術者や科学者や学術用途で広く浸透してきた経緯には、「UNIX高いのよ」の理由が挙げられます。
商用UNIXと言われて普及していた、HPUX、AIX、SUN-OS(からのSolaris)他にもDECとか様々なOSがUNIXとして世界中や日本中を埋め尽くしていました、企画や基準というわけでもないですがOSFだけでも大きなシェアをもち、日立やオムロンやNECのように淘汰されて消えていくUNIXを横目に主要のUNIXは強かったです。
大学に行けばUNIX、会社に行けばUNIX、serverみたらUNIXという時代です、女子学生がmuleやemacsでメールや資料を書いていた時代ですね。
ここで共通していたことがあって、UNIXの多くはマシンも限定されたOSとHWの抱き合わせ販売です、当時に何台か仕事で買いましたが500万から1000万のお手軽で安価なWSやserverが売られていましたが、それでも個人が買うには高かったです。
appleやAT互換機でMACやWindowsが世の中に出てきましたが、市場の中では組織のつかうUNIXにログインして使わなくてもいいUNIX、コーディングもコンパイルも自在な自分がSUの自分のUNIXには大きなメリットや需要がありました。
そこでディス
僕の見てきた範囲の話で考えると、近年の普及やandroidや組み込みを無視して、1990年の中後半、2000年近くから様々な技術者や科学者や学術用途で広く浸透してきた経緯には、「UNIX高いのよ」の理由が挙げられます。
商用UNIXと言われて普及していた、HPUX、AIX、SUN-OS(からのSolaris)他にもDECとか様々なOSがUNIXとして世界中や日本中を埋め尽くしていました、企画や基準というわけでもないですがOSFだけでも大きなシェアをもち、日立やオムロンやNECのように淘汰されて消えていくUNIXを横目に主要のUNIXは強かったです。
大学に行けばUNIX、会社に行けばUNIX、serverみたらUNIXという時代です、女子学生がmuleやemacsでメールや資料を書いていた時代ですね。
ここで共通していたことがあって、UNIXの多くはマシンも限定されたOSとHWの抱き合わせ販売です、当時に何台か仕事で買いましたが500万から1000万のお手軽で安価なWSやserverが売られていましたが、それでも個人が買うには高かったです。
appleやAT互換機でMACやWindowsが世の中に出てきましたが、市場の中では組織のつかうUNIXにログインして使わなくてもいいUNIX、コーディングもコンパイルも自在な自分がSUの自分のUNIXには大きなメリットや需要がありました。
そこでディストリビューションの支えもあり(ディストリビューションのサポートやケアやパッケージシステムが恐ろしい勢いを作った)で垣根の高かったUNIX風味のLinuxを広く世界に普及させたのかと思います。
それが相乗効果で莫大なハッカーの手を動かして、Linuxのコードが飛躍的に進化し、飛躍的に使いやすく信頼をましたことで、多くのサーバー需要から商用UNIXさえも駆逐していったということでしょうね。
残念ながら商用ソフトであるCAD/CAM/CAEは商用UNIXからLinuxには移行しないで商用UNIXにとどまるかWindowsに鞍替えしましたが、そこは少しLinuxの敗因で、商用アプリケーションを丸呑み、丸抱えできなかったライセンスの問題とかがWindowsの成長や普及をさせてしまったのでしょうね。
Officeソフトも商用UNIXには多く積まれていたのですが、それを奪えずWindowsに流されたので家庭も企業もLinuxには素直に移りませんでした。
その後は充実が充実をよんでサーバーやandroidで世界中を埋め尽くしていますが、なかなか家庭用や会社の個人端末として普及をしていないのは、使う人の最優先はアプリであって金を沢山払っても良いからOfficeでも一太郎(過去の時代によって)でも年賀状アプリでも周辺機器のドライバでも充実してくれよという希望にLinuxが追いつけなかっのが今の状況でしょうか。
Linuxが今もなお大きく使い続けられてる種は商用UNIXの影響が大きく、その代替としてでしょうね、今も多く愛唱されてるサーバー用途やX-Windowの用途はWindowsやMACの代替と言うより商用UNIXの代替ようそが大きいです。
vimは素のviよりは使いやすいと思いますけどね。挿入モードで範囲選択もできるしカーソル移動もできる。
viの使いにくさは他のスクリーンエディタと違ってモーダルなところから来ていると思いますが、なんでそんな一般的でない設計になっているのかが気になるところかとおもいます。
でも、viのほうが使いやすい場合があるんです。例えばネットワークが非常に遅かったり、サーバの負荷が非常に高かったりして自分が入力したキーが画面に反映されるまで10秒かかる環境を想像してみてください。右矢印を押してから、実際にカーソルが動くまで10秒。画面を見ながらはとても操作していられません。なので、普通のエディタなら動かしたい場所までの文字数を画面で数え、数えながら矢印キーを押すことになるでしょう。
viなら、繰り返し回数+コマンドを入力(例えば10l)とすれば一気に移動できます。まあ、自分なら文字数を数える代わりに検索 (/)を使うと思いますが。
このように、システムからのフィードバックを待たずに操作する必要がある場合にはviは『使いやすい』エディタです。
(ディストリビューションにもよりますが)linuxを普通にインストールするとメジャーどころのプログラミング言語やエディタ等が最初から使える状態になっています。それ以前に、windowsのcmdよりは遥かに高性能なシェル(普通はbash)がはじめから使えます。ソフト開発に使うには手間が省けます。
windowsは数日とか数ヶ月とか連続でデータ解析を続けるような用途には明らかに不向きです。
windowsを「使いやすく」感じさせているであろう直接的な要素は、マウスやタッチパネル操作を前提にしたグラフィカルユーザインタフェース(GUI)でしょうが、サーバーとして使うならGUIは基本的に必要ありません。「黒い画面」が使えれば十分です。
windowsはライセンスをお金を出して買わねばなりませんが、linuxはフリーです。
コマンドラインで動くツールは多かれ少なかれマニュアルを読んでそのツール独自のルールや操作体系を理解し、そのツールの流儀に沿って操作することを求めてきます。だからコマンドラインオプションなどは全然統一されていません。説明書を読まなくてもなるべく直感で操作できるようになっている一般人向けアプリとは文化が違うのです。
Vim が独自の操作体系のままでいることが許されてきたのも、訓練してツールの使い方を覚えることが当たり前の文化の中にあり続けたからでしょう。Vim だけでなく Emacs も、そして多くの Linux で標準エディタとして設定されている nano ですら珍妙な操作体系です(一般的なエディタの操作体系に寄せた micro などのエディタが出てきたのはここ最近です)。
もし vim の操作に慣れていらっしゃらないようなら、vimtutor コマンドで表示されるチュートリアルを、是非試してみてください。
慣れたら使いやすく感じていただけるかもしれません。
私はUNIXを30年程度Linuxを20年以上使い続けていますが、メリットとかデメリットを考える人は例外なくWindowsを使うことを薦めます。
自分自身もWindowsは30年近く愛用していますが。
Linuxの何がメリットなんだろうと考える人は馴染まないOSです。
Linuxをつかわざるを得ないLinuxしか選択肢がない、Linuxであることは必須というユーザに対してだけ薦められる物です。
なぜかというと、そういうユーザはどんなデメリットも使いにくさもアプリや環境の不利益も「麻痺して感じない」からです。
デバイスドライバがない→だからなに?
商用ソフトがない→何か問題なのか?
自分で書けばよくない?
という麻痺が重要です。
Windowsはそういう全てが解消されてます、それと法的や自由やマシンHWてきな禁止はないのですしLinuxの多くは無償がおおいので、まず使ってみること。
そこに「自分で感じ取れるメリット」が見いだせない人には生涯メリットは音取れません、メリットはデメリットは1000人1000種類、人の個性に依存した相性なので他人様が知ったかぶって提示した「メリット」にダマされないように願いたいです。
嘘だとおもうなな使ってみな、FAですね。
ちなみに、事業用途、トキハカネナリで考えると商法アプリの貧弱なLinuxはオフィス、CAD_CAM_CAEでは太刀打ちできず「自分で書けば
私はUNIXを30年程度Linuxを20年以上使い続けていますが、メリットとかデメリットを考える人は例外なくWindowsを使うことを薦めます。
自分自身もWindowsは30年近く愛用していますが。
Linuxの何がメリットなんだろうと考える人は馴染まないOSです。
Linuxをつかわざるを得ないLinuxしか選択肢がない、Linuxであることは必須というユーザに対してだけ薦められる物です。
なぜかというと、そういうユーザはどんなデメリットも使いにくさもアプリや環境の不利益も「麻痺して感じない」からです。
デバイスドライバがない→だからなに?
商用ソフトがない→何か問題なのか?
自分で書けばよくない?
という麻痺が重要です。
Windowsはそういう全てが解消されてます、それと法的や自由やマシンHWてきな禁止はないのですしLinuxの多くは無償がおおいので、まず使ってみること。
そこに「自分で感じ取れるメリット」が見いだせない人には生涯メリットは音取れません、メリットはデメリットは1000人1000種類、人の個性に依存した相性なので他人様が知ったかぶって提示した「メリット」にダマされないように願いたいです。
嘘だとおもうなな使ってみな、FAですね。
ちなみに、事業用途、トキハカネナリで考えると商法アプリの貧弱なLinuxはオフィス、CAD_CAM_CAEでは太刀打ちできず「自分で書けばいいじゃない」のレベルでは対向できません、一方でサービスアプリ(いわゆるサーバ群)は徹底してオープンソースの団体が協力にそろえてるので開発環境とあわせて最強です。
つまりCADする人にはLinuxはゴミパソコン(Linixでも可能だというひとは商売になるかどうか使って下さい)、サーバを構築する人には神パソコンになりますね。
いやいや~edと比べたら…って、対象がおかしいだろってツッコミが来そうですが。
毎日 Vim を使っているのでどんな感じで使っているかを示します。尚 OS は Windows ?? です。CMD 上で動作する CUI の Vim (not GVim)を起動します。
ex コマンドで :bo term と入力し上下分割した下部ペインで CMD を実行します。
ctl-W + k で上のペインにカーソルを移動し ex コマンドで :e. と入力しカレント・ディレクトリのファイル一覧を表示します。
一覧からカーソルでソースを選択し Enter します。その後もう一度 ex コマンドで :new を入力し、新しい分割画面を開きも一度 ex コマンドから :e. と入力し、新しいペインにディレクトリの一覧を表示します。
画面分割は :new とすると上下に :vnew とすると左右に分かれて別ペインを開く事が出来ます。同一ファイルを分割表示する場合はカーソルを分割対象位置にあわせておいて :split か :vsplit を入力すれば良いです。因みに :tabnew とすると新しいタブを開いてくれます。画面の切り替えは gt, gT で行います。
GUI 版の GVim でも同様の操作ができます。会社のシステム開発もこれで全てやってます。特に実行画面で Repl を動かしたりすると実行結果の画面をエディターにコピー出来たりしてすごく便利です。Vim 標準機能の他にプラグインが必要
毎日 Vim を使っているのでどんな感じで使っているかを示します。尚 OS は Windows ?? です。CMD 上で動作する CUI の Vim (not GVim)を起動します。
ex コマンドで :bo term と入力し上下分割した下部ペインで CMD を実行します。
ctl-W + k で上のペインにカーソルを移動し ex コマンドで :e. と入力しカレント・ディレクトリのファイル一覧を表示します。
一覧からカーソルでソースを選択し Enter します。その後もう一度 ex コマンドで :new を入力し、新しい分割画面を開きも一度 ex コマンドから :e. と入力し、新しいペインにディレクトリの一覧を表示します。
画面分割は :new とすると上下に :vnew とすると左右に分かれて別ペインを開く事が出来ます。同一ファイルを分割表示する場合はカーソルを分割対象位置にあわせておいて :split か :vsplit を入力すれば良いです。因みに :tabnew とすると新しいタブを開いてくれます。画面の切り替えは gt, gT で行います。
GUI 版の GVim でも同様の操作ができます。会社のシステム開発もこれで全てやってます。特に実行画面で Repl を動かしたりすると実行結果の画面をエディターにコピー出来たりしてすごく便利です。Vim 標準機能の他にプラグインが必要に成りますが、便利に成ると思ってセッティングすると楽が出来ます。
※ 因みにこのディレクトリとコードは「なっとく!関数型プログラミング」に記載されている Scala のコードを Haskell に書き換えて遊んでいるものを使用しています。
複数のファイルを扱う場合
:e
コマンドを使用して他のファイルを開くことができます。例えば、:e file2.txt
と入力すると、file2.txt
を開くことができます。:ls
コマンドを使用して、現在開いているファイルの一覧を表示できます。:b
コマンドを使用して、開いているファイルの中から別のファイルに切り替えることができます。例えば、:b 2
と入力すると、2番目のファイルに切り替わります。:n
コマンドを使用して、次のファイルに移動できます。また、:N
コマンドを使用して、前のファイルに移動することもできます。
これらのコマンドを使うことで、複数のファイルを効率的に扱うことができます。バックグラウンドにすることはしませんね。
自分の周りの人などの状況を元にしたかなり感覚的な話になりますが、Vimは最近それほど人気ではないと思います。もちろん使っている人はそれなりにいますが、人口はどちらかと言うと減少傾向だと思います。
画面上でできることが限られていたり、キー操作の習得が難しかったり、設定が難しかったりが要因でしょうか… そもそもすぐに使い始められて、最初から色々な機能が付いた便利なIDEやエディタがたくさんありますので。
一方、Vimのキー操作は覚えて慣れるのに少し時間はかかるものの、一度慣れるととても使いやすいという人も多いです。そのため、Vim自体は使わなくても、IDEや他のテキストエディタをカスタマイズしてVimと同じようなキーで操作できるようにしている人もそれなりにいる印象があります。
自分も以前はVimをよく使っていたのですが、少し前にVisual Studio CodeにVimキーバインドを設定して使ってみたところとても使いやすかったので現在は主にそれを使っています。GUIは良いものです。
長いことunix使いなので、基本CUIでやってます。
もう終わったけど、最近サーバーにssh接続してemacsでコードを書いてました。サーバー上だと任意のポイントにマウスでカーソルを移動出来ない。だから近辺のワードにサーチかけてカーソル移動してました。マウスは基本使えない。辛い。
辛くてソースをDLしてローカルで編集するんですが、ちょっと書いたら即動かしたい方なので、結局サーバーに戻っちゃう。DBのターミナルはbash的にタブでワードを自動補完できず全部タイプしなければならなかった。タイプミスすれば地獄。
という辛い環境で2ヶ月作業しました。上のような問題をなんとかする方法があるのかと思いましたが有期限のことなので調べるのも面倒でそのままやりました。
タイプするのがこれほど辛いと感じたのは初めて。特にSQLは間違うと全部やりなおし。これは一番辛かった。だからローカルのemacsでまず書いてコピペしてました。DB操作のGUIはつかったことないのでどうなんですかね。DBのシェルでタブ補完出来ないなんて。コマンドヒストリーも見れない。
まあ、仕事は選ばないとねっていう話。GUIなんか覚えるモチベはないので。デキるプログラマーだからCUIとは思わない。ただ人間は長いことやって慣れてる方法に固執しがちなんだと思う。しかし多分CUIの方が早いかな。
ご質問ありがとうございます。
どのような条件で、ご利用になっているのかが分からないため、以下の書籍を紹介したいと思います。
基本的には、Vimスクリプト及びVimのマクロ機能を組み合わせている場合が多いです。
そのためには、私のようなLinux環境で使っているユーザー場合には、BashのShell機能とVImのScript機能を組み合わせている場合がほとんどです(もちろん、MacOSのzshellというユーザーも居ますが…)
では、失礼いたします。
ご質問ありがとうございます。
どのような条件で、ご利用になっているのかが分からないため、以下の書籍を紹介したいと思います。
基本的には、Vimスクリプト及びVimのマクロ機能を組み合わせている場合が多いです。
そのためには、私のようなLinux環境で使っているユーザー場合には、BashのShell機能とVImのScript機能を組み合わせている場合がほとんどです(もちろん、MacOSのzshellというユーザーも居ますが…)
では、失礼いたします。
個人的な回想なので、細かいところは間違ってるかもしれませんが、90年代以降、いくつかのムーブメントと言うか流行りみたいなものがあったように思います。
初期
初期のLinuxは開発者のリーナス・トーバルズさんが自分のPCで動くUNIXを目的に開発がスタートしました。最初にリリースされたLinuxはメーリングリスト上で公開され、それに興味を持った世界中のプログラマが利用者になり、同時に開発者として関わることで、迅速かつ頻繁なリリースが行われていきました。
最初のブーム
GNUのCコンパイラを始めとする多くのフリーソフトがLinuxで動くようになり、カーネル以外にもShellや、テキストエディタなど、多くのアプリケーションを編纂した「Linuxディストリビューション」が出現しました。これらには便利なインストーラーが用意されていたので、一般のユーザにも拡がっていった用に思います。
ビジネスでの利用の増加
インターネットの普及期に多くの企業がホームページや独自のE-Mailアドレスを持ちたいと思っていたのでサーバーの需要が拡大しました。
それまでサーバーには商用のUNIXや、Windows NTが使われていましたが、もう一つの選択肢としてLinuxが選ばれるようになりました。その結果、Linux上でApacheや、SMTP、POP、DNS、などのサーバー利用が増えていったと思います。
ビジネスアプリケーショ
個人的な回想なので、細かいところは間違ってるかもしれませんが、90年代以降、いくつかのムーブメントと言うか流行りみたいなものがあったように思います。
初期
初期のLinuxは開発者のリーナス・トーバルズさんが自分のPCで動くUNIXを目的に開発がスタートしました。最初にリリースされたLinuxはメーリングリスト上で公開され、それに興味を持った世界中のプログラマが利用者になり、同時に開発者として関わることで、迅速かつ頻繁なリリースが行われていきました。
最初のブーム
GNUのCコンパイラを始めとする多くのフリーソフトがLinuxで動くようになり、カーネル以外にもShellや、テキストエディタなど、多くのアプリケーションを編纂した「Linuxディストリビューション」が出現しました。これらには便利なインストーラーが用意されていたので、一般のユーザにも拡がっていった用に思います。
ビジネスでの利用の増加
インターネットの普及期に多くの企業がホームページや独自のE-Mailアドレスを持ちたいと思っていたのでサーバーの需要が拡大しました。
それまでサーバーには商用のUNIXや、Windows NTが使われていましたが、もう一つの選択肢としてLinuxが選ばれるようになりました。その結果、Linux上でApacheや、SMTP、POP、DNS、などのサーバー利用が増えていったと思います。
ビジネスアプリケーションの分野では、OracleのようなアプリケーションベンダーがLinuxに対応したことで商用分野での利用がますます増えていきました。
また、Webアプリケーション方式が主流になっていき、OSが何であるかは、重要視されなくなってきました。この頃には、わざわざ高価な商用UNIXを使う理由の方が少なくなっていったような気がします。
ハードウェアへの組み込み
ルーターやストレージなどのハードウェア製品にLinuxが組み込まれる事も増えていきました。家電などの組み込みOSの分野でもLinuxが徐々に増えていきました。Androidの登場でスマートフォンやタブレットの中身としてLinuxが動いています。
仮想環境での利用増加
仮想環境の「Vmware」が流行りだします。元々はLinux上でWindowsを動かすためのソリューションという感じで人気があったのですが、のちにビジネス用途での Vmware ServerやESXが使われるようになっていきます。
仮想マシンを作ったり消したりする際には、ライセンス管理が必要なWindowsよりも、フリーのLinuxの方が便利でした。これは、のちにクラウドが流行った際にも同じ現象が起きたと思います。
Ubuntuブーム
サーバー用途では大きなシェアを持つLinuxですが、デスクトップ用途ではそれほど人気はありません。そんななか、DebianベースのUbuntuが流行った時期がありました。
Debianと人気を二分していたのがRedhatでしたが、Redhatはアメリカの営利企業だったので、アメリカ企業によるロックインを嫌ったヨーロッパの方ではDebianの人気があったらしいです。
そんなDebianベースのUbuntuがリリースされて、デスクトップ利用を意識したディストリビューションだったこともあり人気が出たような気がします。
Windows10とWSL
Windows10にはLinuxを動かすサブシステムが搭載されました。Windowsに内包する形でLinuxが使えるようになり、現状ではWindowsとLinuxの統合が果たされたと言っても過言ではないと思います。
別に・・・。
使いにくいところは特にないです。
SourcetreeのようなGUIクライアント使っちゃえば無問題。日常的な操作はほぼGUIクライアント上でできます。コマンド打つのは複雑な操作をしなければならないときだけ。
グラフィッカー・デザイナーにgitを使ってもらうには、GUIクライアント必須です。CLIにこだわってると、彼らとまともな仕事できなくなります。
プログラマも考え方や仕事の仕方を変えなきゃダメだと思いますよ。「○○はひどい!」と言うのではなく、誰でも使えるよう簡単な方法を考えて提案すべきですね。
別に・・・。
使いにくいところは特にないです。
SourcetreeのようなGUIクライアント使っちゃえば無問題。日常的な操作はほぼGUIクライアント上でできます。コマンド打つのは複雑な操作をしなければならないときだけ。
グラフィッカー・デザイナーにgitを使ってもらうには、GUIクライアント必須です。CLIにこだわってると、彼らとまともな仕事できなくなります。
プログラマも考え方や仕事の仕方を変えなきゃダメだと思いますよ。「○○はひどい!」と言うのではなく、誰でも使えるよう簡単な方法を考えて提案すべきですね。
visual studio codeで使えるから?
emacs,vi,普通のテキストエディタと渡ってきました。emacsかviの方が使いやすいが、他人の環境で仕事することが多く、そのたびにインストールするのは嫌がられるからやむなくwindowsのテキストエディタにも順応しました。
さてこの3つを比較するならvimの魅力はなんといってもカーソル操作が楽なことですね。
プログラミング中最も頻繁に行うのはカーソル移動。これが最も使いやすいキーに割り当てられている。
emacs系も使いやすいが、ctrlを押す頻度が多く、疲れます。一方vimはエスケープが多いのでescapeキーが弱いと駄目ですね。
と、実はvim入れてないのですが、そろそろ入れようかな。あら嬉し。
- サーバーでの作業が捗る。ローカルマシンにファイルをダウンロードしなくてもいつも通り作業可能
- sedやgrepやsortとか使う編集がvimだけでできるので1回限りのデータの整形や変換はプログラムやスクリプト組まずにvimだけでチャチャっと済ませられる
- さらにそれらを使った良く使う編集を1つのキーに割り当てられる(非常に長い1行XMLや1行jsonなどを改行入れてファイルタイプ指定して自動インデントしてみやすくする、みたいな操作をF9キーにマップしたりとか出来る。そういうログファイルやダンプファイルを頻繁にチェックする時に重宝する)
- 矩形選択のコピーやペーストが何気に便利。矩形選択使う時は確実にvim使っちゃいますね。自分は他のエディタでどうやるのか知らないだけかもしれないけど
- 対応する括弧への移動が楽。対応括弧をハイライトしたりボールドで表示するエディタは多いけどキータイプだけで瞬時に閉じ括弧の位置まで移動出来るエディタってなかなかないので
自分が多用してるのはこんなもんですかね。
viいらないとまではいいませんが、ssh越しにサーバの設定ファイルをちょっと修正するくらいならedで済ませてしまうことも多いですね。まあ、変態扱いされることもままありますがw
追記:20世紀末くらいまではUNIXの端末はPCじゃないこともあったのです。そんな端末でviをまともに動かすには端末固有のエスケープシーケンスを調べtermcapとかterminfoというテキストファイルに呪文を書き込む必要がありました。興味本位でとある端末では当時珍しいスムーズスクロールが可能であることをマニュアルから見つけ出しtermcapを設定したら、同僚から大層気味悪がられたものですw