コマンドライン引数の処理にoptparseを活用する

Rubyプログラムを書く際に、コマンドライン引数を簡単かつ効果的に処理する方法としてoptparseライブラリがあります。 OptparseはRubyの標準ライブラリで、コマンドライン引数のパースとヘルプの生成が簡単に行えます。今回はRubyを使用して、カレンダーを表示するプログラムを作成します。その中でも、コマンドライン引数を処理するためにoptparseを使用する方法を紹介します。まずは具体例から見ていきましょう。

require 'date'
require 'optparse'

options = {}
OptionParser.new do |opt|
  opt.on('--month MONTH', 'Specify the month (1..12)') do |month|
    options[:month] = month
  end
end.parse!

options[:month] = Date.today.month if options[:month].nil?

unless (1..12).include?(options[:month].to_i)
  puts "#{options[:month]} is neither a month number (1..12) nor a name"
  exit
end

date = Date.new(Date.today.year, options[:month].to_i, 1)

puts "      #{date.strftime('%B %Y')}"
puts "月 火 水 木 金 土 日"

first_day = date.wday
print "   " * first_day

last_day = Date.new(date.year, date.month, -1)

(date..last_day).each do |day|
  print day.day.to_s.rjust(2) + " "
  print "\n" if day.saturday?
end

puts "\n" unless last_day.saturday?

このプログラムでは、optparseを使用して--monthオプションで月を指定できるようにしています。また、指定がない場合は現在の月がデフォルトで使用されます。もし指定された月が1から12の範囲外であれば、エラーメッセージが表示されます。その後、指定された月のカレンダーを表示します。

このようにoptparseを活用することで、コマンドライン引数を簡単かつ柔軟に処理することができます。

プロを目指す人のためのRuby入門<改訂2版>を読んで

プロを目指す人のためのRuby入門<改訂2版>を読んでの感想を書きます。

プロを目指す人のためのRuby入門[改訂2版] 言語仕様からテスト駆動開発・デバッグ技法まで (Software Design plus) | 伊藤 淳一 |本 | 通販 | Amazon


良かったところ

本書は分量も多く、内容自体も私を含めてプログラミングおよびRuby超初心者の人には初読で頭にスラスラと入ってくる類の本ではないです。

著者は「本書を最後まで読み切るコツ」と題して以下のColumnを書いてくれています。

 

(前略)

これまで他の言語で豊富な開発経験があったり、すでにRailsアプリケーションの実務経験があったりする人ならまだ理解しやすいかもしれませんが、プログラミング歴そのもが浅い初学者の方はかなりしんどいと思います。

 そういう場合は「これを全部理解しなきゃいけないのか」と考えるのではなく、頭の中にインデックス(索引)だけ作って、どんどん読み進める読書スタイルにチェンジしてください。インデックスを作るというのはたとえば、ほかの人が書いたコードを読んでいるときに”yield”というキーワードを見かけたら「yield? あ、そういえばあの本に書いてあったな」と思い出して、本書を読みかえせるようにしておくことです。文章を読むだけではピンとこない内容も、実際にそれを必要とする場面が出てきたら自分の経験と本の説明がきれいにリンクし、自分の知識としてしっかり頭の中に刻み込まれるはずです。

(後略)

(本書P.20より)

 

私自身、このアドバイスに従い読みました。

 

また、本書には著者のお人柄が色濃く反映されていて難しい概念も極力わかりやすく、とことん丁寧に説明しようという姿勢が強く伺えます。

個人的にはユーモアが随所に散りばめられているのも好感が持てました。

 

 

 

学んだこと

私が特に印象に残った箇所は「正規表現」についてです。

正規表現」という言葉だけは知ってはいたものの詳細については全く無知だったため、とても学びがありました。

また、途中で著者お得意のユーモアが炸裂する箇所があるのですが、それは読んでのお楽しみ。
ちなみに、なまぐさな私はドキッとさせらたと同時に著者の読者への愛と親切心を感じました。

 

 

 

難しかったこと

正直申し上げて、超初学者の私には大量の未知の情報を前にして大半が難しく、理解度は10%に達しているかも怪しいです。

 

 

まとめ

先述したように頭の中に最低限の「インデックス」を作ることができたかとは思います。

これから実践(アウトプット)するにあたって、リファレンスとして何度も読み返すこととなるでしょう。

最後まで読んでいただき、ありがとうございました。

 

 

 

参考文献

 

プロを目指す人のためのRuby入門[改訂2版] 言語仕様からテスト駆動開発・デバッグ技法まで (Software Design plus) | 伊藤 淳一 |本 | 通販 | Amazon

 

 

 

Docker ComposeでのRailsアプリのDocker化方法

みなさま、ごきげんよう!今回はDocker ComposeでのRailsアプリのDocker化方法についてごく簡単にまとめてみました。前提として、Docker、Docker ComposeやRuby on Railsの基礎的な知識をお持ちの方が対象です。

 条件

 

 Docker化の手順

 1.必要なファイル類の準備

  • Railsアプリのためアプリケーション用とdb用のコンテナを使用。複数コンテナを使うため、Dockerfileとdocker-compose.ymlを用意。
  • WebアプリのソースがGitHub等リモートのリポジトリで公開されている場合クローンしてくる。
  • 土台となるDockerfileとdocker-compose.ymlを作成。
  • railsのdatabase.yml等に記述が不足している場合は必要な内容を追記。          




    FROM ruby:3.3.0
    RUN apt-get update && apt-get install -y \
    build-essential \
    libpq-dev \
    nodejs \
    postgresql-client \
    yarn
    WORKDIR /rails-docker
    COPY Gemfile Gemfile.lock /rails-docker/
    RUN bundle install
  Dockerfile Dockerfile


 
version: '3'

volumes:
db-data:

services:
db:
image: postgres:12
volumes:
- 'db-data:/var/lib/postgresql/data'
environment:
- 'POSTGRES_USER=postgres'
- 'POSTGRES_PASSWORD=postgres'

web:
build: .
command: >
bash -c "rm -f tmp/pids/server.pid && rails db:create
&& rails db:migrate && rails s -b 0.0.0.0"
- '3000:3000'
volumes:
- '.:/rails-docker'
environment:
- 'DATABASE_PASSWORD=postgres'
tty: true
stdin_open: true
depends_on:
- db
links:
- db

 

git_source(:github) { |repo| "https://github.com/#{repo}.git" }

ruby "3.3.0"



gem 'concurrent-ruby', '1.1.9'




# Bundle edge Rails instead: gem "rails", github: "rails/rails", branch: "main"
gem "rails", "~> 7.0.6"
gem 'bundler', '~> 2.5', '>= 2.5.3'

gem 'rubygems-update', '~> 3.5', '>= 3.5.3'
# The original asset pipeline for Rails https://github.com/rails/sprockets-rails
gem "sprockets-rails"

# Use postgresql as the database for Active Record
gem 'pg', '~> 1.1'


# Use the Puma web server https://github.com/puma/puma
gem "puma", "~> 5.0"

gem "importmap-rails"

# Hotwire's SPA-like page accelerator https://turbo.hotwired.dev
gem "turbo-rails"

# Hotwire's modest JavaScript framework https://stimulus.hotwired.dev
gem "stimulus-rails"

gem "jbuilder"

# Use Redis adapter to run Action Cable in production
# gem "redis", "~> 4.0"

# Use Kredis to get higher-level data types in Redis https://github.com/rails/kredis
# gem "kredis"

# Use Active Model has_secure_password [https://guides.rubyonrails.org
/active_model_basics.html#securepassword]
# gem "bcrypt", "~> 3.1.7"

# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
gem "tzinfo-data", platforms: %i[ mingw mswin x64_mingw jruby ]

# Reduces boot times through caching; required in config/boot.rb
gem "bootsnap", require: false

# Use Sass to process CSS
# gem "sassc-rails"

html#transforming-images]
# gem "image_processing", "~> 1.2"

group :development, :test do
html#debugging-with-the-debug-gem
gem "debug", platforms: %i[ mri mingw x64_mingw ]
end

group :development do
# Use console on exceptions pages https://github.com/rails/web-console
gem "web-console"

# gem "rack-mini-profiler"

# Speed up commands on slow machines / big apps https://github.com/rails/spring
# gem "spring"
end

group :test do
gem "capybara"
gem "selenium-webdriver"
gem "webdrivers"
end

 

 

GEM
remote: https://rubygems.org/
specs:
actioncable (7.0.8)
actionpack (= 7.0.8)
activesupport (= 7.0.8)
nio4r (~> 2.0)
websocket-driver (>= 0.6.1)
actionmailbox (7.0.8)
actionpack (= 7.0.8)
activejob (= 7.0.8)
activerecord (= 7.0.8)
activestorage (= 7.0.8)
activesupport (= 7.0.8)
mail (>= 2.7.1)
net-imap
net-pop
net-smtp
actionmailer (7.0.8)
actionpack (= 7.0.8)
actionview (= 7.0.8)
activejob (= 7.0.8)
activesupport (= 7.0.8)
mail (~> 2.5, >= 2.5.4)
net-imap
net-pop
net-smtp
rails-dom-testing (~> 2.0)
actionpack (7.0.8)
actionview (= 7.0.8)
activesupport (= 7.0.8)
rack (~> 2.0, >= 2.2.4)
rack-test (>= 0.6.3)
rails-dom-testing (~> 2.0)
rails-html-sanitizer (~> 1.0, >= 1.2.0)
actiontext (7.0.8)
actionpack (= 7.0.8)
activerecord (= 7.0.8)
activestorage (= 7.0.8)
activesupport (= 7.0.8)
globalid (>= 0.6.0)
nokogiri (>= 1.8.5)
actionview (7.0.8)
activesupport (= 7.0.8)
builder (~> 3.1)
erubi (~> 1.4)
rails-dom-testing (~> 2.0)
rails-html-sanitizer (~> 1.1, >= 1.2.0)
activejob (7.0.8)
activesupport (= 7.0.8)
globalid (>= 0.3.6)
activemodel (7.0.8)
activesupport (= 7.0.8)
activerecord (7.0.8)
activemodel (= 7.0.8)
activesupport (= 7.0.8)
activestorage (7.0.8)
actionpack (= 7.0.8)
activejob (= 7.0.8)
activerecord (= 7.0.8)
activesupport (= 7.0.8)
marcel (~> 1.0)
mini_mime (>= 1.1.0)
activesupport (7.0.8)
concurrent-ruby (~> 1.0, >= 1.0.2)
i18n (>= 1.6, < 2)
minitest (>= 5.1)
tzinfo (~> 2.0)
addressable (2.8.6)
public_suffix (>= 2.0.2, < 6.0)
bindex (0.8.1)
bootsnap (1.17.1)
msgpack (~> 1.2)
builder (3.2.4)
capybara (3.39.2)
addressable
matrix
mini_mime (>= 0.1.3)
nokogiri (~> 1.8)
rack (>= 1.6.0)
rack-test (>= 0.6.3)
regexp_parser (>= 1.5, < 3.0)
xpath (~> 3.2)
concurrent-ruby (1.2.3)
crass (1.0.6)
date (3.3.4)
debug (1.9.1)
irb (~> 1.10)
reline (>= 0.3.8)
erubi (1.12.0)
globalid (1.2.1)
activesupport (>= 6.1)
i18n (1.14.1)
concurrent-ruby (~> 1.0)
importmap-rails (2.0.1)
actionpack (>= 6.0.0)
activesupport (>= 6.0.0)
railties (>= 6.0.0)
io-console (0.7.1)
irb (1.11.1)
rdoc
reline (>= 0.4.2)
jbuilder (2.11.5)
actionview (>= 5.0.0)
activesupport (>= 5.0.0)
loofah (2.22.0)
crass (~> 1.0.2)
nokogiri (>= 1.12.0)
mail (2.8.1)
mini_mime (>= 0.1.1)
net-imap
net-pop
net-smtp
marcel (1.0.2)
matrix (0.4.2)
method_source (1.0.0)
mini_mime (1.1.5)
minitest (5.21.1)
msgpack (1.7.2)
net-imap (0.4.9.1)
date
net-protocol
net-pop (0.1.2)
net-protocol
net-protocol (0.2.2)
timeout
net-smtp (0.4.0.1)
net-protocol
nio4r (2.7.0)
nokogiri (1.16.0-aarch64-linux)
racc (~> 1.4)
nokogiri (1.16.0-arm-linux)
racc (~> 1.4)
nokogiri (1.16.0-arm64-darwin)
racc (~> 1.4)
nokogiri (1.16.0-x86-linux)
racc (~> 1.4)
nokogiri (1.16.0-x86_64-darwin)
racc (~> 1.4)
nokogiri (1.16.0-x86_64-linux)
racc (~> 1.4)
pg (1.5.4)
psych (5.1.2)
stringio
public_suffix (5.0.4)
puma (5.6.8)
nio4r (~> 2.0)
racc (1.7.3)
rack (2.2.8)
rack-test (2.1.0)
rack (>= 1.3)
rails (7.0.8)
actioncable (= 7.0.8)
actionmailbox (= 7.0.8)
actionmailer (= 7.0.8)
actionpack (= 7.0.8)
actiontext (= 7.0.8)
actionview (= 7.0.8)
activejob (= 7.0.8)
activemodel (= 7.0.8)
activerecord (= 7.0.8)
activestorage (= 7.0.8)
activesupport (= 7.0.8)
bundler (>= 1.15.0)
railties (= 7.0.8)
rails-dom-testing (2.2.0)
activesupport (>= 5.0.0)
minitest
nokogiri (>= 1.6)
rails-html-sanitizer (1.6.0)
loofah (~> 2.21)
nokogiri (~> 1.14)
railties (7.0.8)
actionpack (= 7.0.8)
activesupport (= 7.0.8)
method_source
rake (>= 12.2)
thor (~> 1.0)
zeitwerk (~> 2.5)
rake (13.1.0)
rdoc (6.6.2)
psych (>= 4.0.0)
regexp_parser (2.9.0)
reline (0.4.2)
io-console (~> 0.5)
rexml (3.2.6)
rubyzip (2.3.2)
selenium-webdriver (4.10.0)
rexml (~> 3.2, >= 3.2.5)
rubyzip (>= 1.2.2, < 3.0)
websocket (~> 1.0)
sprockets (4.2.1)
concurrent-ruby (~> 1.0)
rack (>= 2.2.4, < 4)
sprockets-rails (3.4.2)
actionpack (>= 5.2)
activesupport (>= 5.2)
sprockets (>= 3.0.0)
stimulus-rails (1.3.3)
railties (>= 6.0.0)
stringio (3.1.0)
thor (1.3.0)
timeout (0.4.1)
turbo-rails (1.5.0)
actionpack (>= 6.0.0)
activejob (>= 6.0.0)
railties (>= 6.0.0)
tzinfo (2.0.6)
concurrent-ruby (~> 1.0)
web-console (4.2.1)
actionview (>= 6.0.0)
activemodel (>= 6.0.0)
bindex (>= 0.4.0)
railties (>= 6.0.0)
webdrivers (5.3.1)
nokogiri (~> 1.6)
rubyzip (>= 1.3.0)
selenium-webdriver (~> 4.0, < 4.11)
websocket (1.2.10)
websocket-driver (0.7.6)
websocket-extensions (>= 0.1.0)
websocket-extensions (0.1.5)
xpath (3.2.0)
nokogiri (~> 1.8)
zeitwerk (2.6.12)

PLATFORMS
aarch64-linux
arm-linux
arm64-darwin

DEPENDENCIES
bootsnap
capybara
concurrent-ruby (= 1.2.3)
debug
importmap-rails
pg (~> 1.5, >= 1.5.4)
puma (~> 5.0)
rails (~> 7.0.6)
selenium-webdriver
sprockets-rails
stimulus-rails
turbo-rails
tzinfo-data
web-console
webdrivers

RUBY VERSION
ruby 3.3.0

BUNDLED WITH
2.5.3

 

 

 

# PostgreSQL. Versions 9.3 and up are supported.
#
# Install the pg driver:
# gem install pg
# On macOS with Homebrew:
# gem install pg -- --with-pg-config=/usr/local/bin/pg_config
# On macOS with MacPorts:
# gem install pg -- --with-pg-config=/opt/local/lib/postgresql84/bin/pg_config
# On Windows:
# gem install pg
# Choose the win32 build.
# Install PostgreSQL and put its /bin directory on your path.
#
# Configure Using Gemfile
# gem "pg"
#
default: &default
adapter: postgresql
encoding: unicode
host: db
username: postgres
password: postgres
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
timeout: 5000

development:
<<: *default
database: rails-docker_development

test:
<<: *default
database: rails-docker_test

production:
<<: *default
database: rails-docker_production



 

 2.docker-compose upで動作確認

最後にdocker-compose upを入力してRailsプロセスとdb起動まで完了するか確認。エラーなくコンテナが起動し、http://localhost:3000 でWebアプリへアクセスできたらDocker化完了。



最後に

Rails bundlerは相互に複雑な依存関係にあるため各々のバージョンを揃えることに個人的には苦心しました。
Docker Composeのみならず、Ruby on Railsの知見も高まりますので良かったら皆様もお試しください!
ではまた👋



 参考

GitHub Pagesでサイトを公開してみよう!

ごきげんよう

 

今回はGitHub初心者のあなたにGitHub Pagesでの自サイト公開方法をご説明いたします!

 

GitHub PagesというのはGitHub上のリポジトリをWeb領域で

世界中完全無料で公開できるサービスです。

 

 

 

 

まずはサクッと適当な名前で新しいリポジトリを作りましょう。
注意点は②です。

"Public"を選んでください!

あとはデフォルトで③の緑のボタンをクリック!

 

 

 

 

 

 

次は"Settings"をクリック!

 

 

 

超重要ポイントです。"Change visibility"で"Public"を選んでください!

 

写真では既に"Public"になっています。

 

 

 

 

 

 

全てデフォルトで大丈夫です。"Pages"をクリック!

 

 

 

 

 

 

 

 

こんな画面が出れば成功!

数分かかることもあるので、しばし、お待ちを…

 

 

試してみればわかりますが直感的に操作できて超簡単です。

僕ですら楽勝でした〜

 

正直、説明が足りない部分や若干、細部で間違っている箇所もあるかもしれませんが、

全て見て見ぬフリをしてください。

苦情やご指摘等は一切受けつけておりません。

 

 

 

ここまで、お付き合いいただいたあなたに特別に僕がGitHub Pagesで公開したサイトをお見せします!

 




最後までご覧いただき、ありがとうございました!

では、また!👋








 

 

 

 

 

 

 

 

 

 

 

Happiness Chain Euforia 1ヶ月目の振り返り

 

 11月23日にHappiness Chain(略してHC)というオンラインプログラミングスクールに入学しました。

 

happiness-chain.com

 

 

 以下はスクールの代表をされてらっしゃる、ゆうだいさんhttps://twitter.com/yudai_on_railsのツイートです。

 

Google検索で Happiness Chain と検索してみてください。悪い評判は一個も出てこないです。そしてアフィリエイト目的のブログでの紹介が一切ないです。 これは僕がアフィリエイトやっていないし、HCのことをよく知らない人にHCを宣伝してもらおうと思っていないからです。HCの長所・短所を含め、実際に通った生徒の記事にしか価値がないのです。 アフィリエイト目的のブログなんて、(ブロガーが)自分の稼ぎのために、適当に無難な大手を紹介しているだけです。 初学者にとってはスクールの良し悪しの判断が難しく、大手だからというブランドを信じて、アフィリエイト経由で入会することが多いです。そして半分以上の人が失敗しています。未経験からWebエンジニア転職は難しいです。 高い技術力が学べる、本物のスクールを選ぶことが大切。この選択を失敗してしまうと50~100万円を無駄にすることになる。スクール選びは慎重に。 Happiness Chain以外のいいスクールは RareTECH、フィヨルドブートキャンプかな。この3つをプログラミングスクール三大天と言います。 ポケモンの御三家と同じです。この3つから好きなものを選んでください。絶対に外さないですよ。

 



 

 僕はHappiness Chainに入学する前に様々なプログラミングスクールについてググり倒し、比較検討し尽くしました。

(自称)プログラミングスクール評論家といっても過言ではありません。 

 そんな僕からみても贔屓目抜きでHappiness Chain のレベルは日本一ではないかと思います。

 そんなHappiness Chain が新しい試みを始めました。その名もHappiness Chain Euphoria

 

今のHCは独立支援型です。基本的に自分のペースで学習できます。環境を提供し、自発的に勉強するスタイルです。ですが、これはもう辞めます。 これからは、100%ゆうだいが一人一人進歩を管理します。僕が直接コンサルし、成長を強制します。途中で離脱させません。マイペースでコツコツ成長させません。ぶち抜く成果を出すためには、そんなぬるいことをやっていてもダメだと学びました。いくら最高の環境を提供しても、やはり1000時間の勉強を継続するのは難しいのです。「友達を作ってね」と言って、月一でイベントを開催しても90%の人は参加しません。これからは全てを強制します。もう個人に委ねることは一切やりません。100%、ゆうだいの指示通りにやってもらいます。月100万稼げる人材を量産します。HCは生まれ変わります。

 

 

 

   

    EuphoriaはただでさえハードなHCにあって更にハードモードな特別コースです。

 12月1日からの始動で、僕は0期生として参加しています。
Euphoriaでは毎朝、その日のToDoリストを書き、1日の終わりに振り返りを行います。

 また、週報も書き、毎週末行われるオンラインミーティングでメンバー皆の報告会を行います。

 実はこの記事も月報なのでこれから毎月書いていくことになります。

これらは自己管理強化のみに留まらず、業界に入ったら行われるデイリースクラムやウィークリースクラム等の練習も兼ねています。

 個人的にはHCに入学直後にEuphoriaにも加入したので、この1ヶ月は激動の1ヶ月でした。

 業界未経験の僕にとっては初めての知識を大量に詰め込み、今まで書いたことのない日報やブログを書き、苦手だった時間管理やアウトプットの習慣もつき始めました。

 

 最も喜ばしかったことは、Euphoria生、メンターのみならず、腹を割って話せる多くの仲間達に出会えたことです。

 ひょっとしたら、人生で一番、濃密な1ヶ月だったかもしれません。

恐らく後々、振り返って大きな人生の転機だったと感じることでしょう。

怒涛の日々ですが来月以降もどれだけ成長できるか非常に楽しみです。

 読んでいただき、どうもありがとうございました。

 

基本的なLinuxコマンドについて

 18個の基本的なLinuxコマンドについて説明する。

 

cd :    change directoryの略でディレクトリ(ファイルが保存されている場所。MacWindowsのフォルダにあたる。)を移動するコマンド。

 

pwd :       print name of working directoryの略でカレントディレクトリを表示するコマンド。今いるディレクトリがわからなくなったら、pwdコマンドで確認する。

 

ls :            listの略でファイルやディレクトリの一覧を表示する。複数のディレクトリを指定することもできる。

 

mkdir :       make directoryの略。ディレクトリを作成するコマンド。

 

rmdir :        remove directoryの略。空のディレクトリを削除するコマンド。

 

cat :            concatenateの略。ファイルの中身を表示するコマンド。

 

less :            less-opposite of moreファイルの中身をスクロール表示するコマンド。

 

tail :             ファイルの最終行から数行を表示するコマンド。標準では10行を表示する。

 

touch :          空のファイルを作成するコマンド。

 

rm :               removeの略。ファイル・ディレクトリを削除するコマンド

 

mv :              moveの略。ファイルの移動、ファイル名を変更するコマンド。

cp :    copyの略。ファイル・ディレクトリをコピーするコマンド。 

ln :      linkの略。リンクを貼るコマンド。

find :              ファイルを検索するコマンド。

chomod :  change modeの略。ファイルやディレクトリのパーミッションを設定する。

chown :           change ownerの略。ファイルの所有者やグループを変更するコマンド。

ps :     process statusの略。実行中のプロセスを表示するコマンド。    

kill :     kill processの略。ジョブやプロセスを終了させるコマンド。     

 

 

 

 

 

 

 

 

 

 

 

 

 

vimの基本的な操作法について

vimの基本的な操作法についてvimを使って書いてみます。

 

 

⒈  超基本的操作

 

 コマンド    効果   

   h      :カーソルを左にずらす

   j       :カーソルを下にずらす

   k      :カーソルを上に上げる

   l               :カーソルを右にずらす

 

   a            :カーソルの場所から1文字進めてInsertModeに入る

   i             :カーソルの場所からInsertModeに入る

   x            :カーソル直下の文字を消します

    :w            :ファイルの保存(Contorol-s)

       :wq          :上を組み合わせて保存して閉じることもできる

       :w!           :のように最後に[!]をつけると強制的に処理する

 

 

  名前     意味   主な機能          起動の仕方   

NomalMode      コマン  カーソルの移動。他のモー            

        ド入力  ドへの移行。テキストのコ    Esc                                                     

        モード  ピー、カット、ペースト。        

 

InsertMode   文字入  テキストの入力、編集。    a/i/A/l/ciw/

        力モー

         ド 

 

VisualMode     文字選択 テキストの選択。        v 

        モード  

 

 

⒉ 基本的操作

 

 コマンド   効果

基本コマンド 

dd    カーソルがある1行削除

yy              1列コピー

p               ペースト

u               操作を1つ戻す(Contorl+z)

J               カーソルがある行に1つ下の行を連結する

カーソル移動

gg              ページの一番上に行く

G     ページの一番下に行く

H     表示されている画面の真ん中に行く

L      表示されている画面の一番下に行く

ページ内検索  

/hoge           [/]のあとの文字列を検索する

n     [/]で検索した文字列の次の検索候補に飛ぶ

N     [/]で検索した文字列の前の検索候補に飛ぶ

 

 

⒊ 文字入力の応用

 

 コマンド          効果

文字入力の応用

A          カーソルのある行の最後にInsertModeで飛ぶ

I                                  カーソルのある行の最初にInsertModeで飛ぶ

.                                        直前にやったことを繰り返す

 

カーソル移動

$                                     カーソルのある行の最後にNomalModeで飛ぶ

^                                     カーソルのある行の最初にNormalModeで飛ぶ

v+[移動キー]      カーソルのある行の最初にNormalModeで飛ぶ

VisualMode

v                                    インサートモードに入る

v+[移動キー]               範囲選択ができる

v+(1)+y                        選択した範囲をコピー

v+(1)+d                        選択した範囲を削除

 

 

⒋ カーソルの移動を捗らせるコマンド

 

コマンド         効果

w                   1単語飛ばしてカーソルを右に動かす(文字外)

e                    1単語飛ばしてカーソルを右に動かす(文字内)

b                    1単語飛ばしてカーソルを左に動かす(文字外)

ge                  1単語飛ばしてカーソルを左に動かす(文字内)

 

 

⒌ 削除系のコマンド

 

コマンド         効果

c                   VisualModeで選択した範囲を消してInsertModeで終わる

ci                  括弧の中身だけを消す(例:[ci"]"この中だけが消える")

ciw                カーソルの下にある1単語を消してInsertModeに入る(英語、カタ                               カナ、ひらがな、漢字で分けられる)

cit                 htmlのタグに囲まれている中を消す

dw                 カーソルから右にある単語を消す(NormalModeで終わる)

D     カーソルから右にある文を全て消す

S                   カーソルのある1行を全て消してInsertModeにはいる

 

 

⒍ その他役立つコマンド

 

コマンド         効果

:!{shellコマンド}    vim内でshellのコマンドが使える

m

`                     "    

~                    カーソル直下の文字の大文字小文字を切り替える

%                    括弧がカーソル直下にある場合[括弧終わり->括弧初め]に飛ぶ

                       (逆もできる)

U                      選択した範囲をの大文字小文字を切り替える

*or#                 カーソルのおいてある単語を検索する

  :n                   [n]に数字を入れるとその行に飛ぶ                                   ggVG                すべて選択(Contorol-a) 

Control+v         インサートモード(箱型)

保存系

ZZ      変更があれば保存して終了

:x                         変更があれば保存して終了

:xa                       変更があるタブを保存してすべてのタブを閉じる