paranitips

Never stop learning! がモットーのゆるふわエンジニアブログ

vimの小技メモ

Vim幼稚園からVim小学校へ - Qiita で書かれていて勉強になった小技を忘れないようにメモっておきます。

W B:移動スピードアップ。

wを打つと次の単語の頭に、bを押すと前の単語の頭にジャンプする。大文字のWとBは記号を単語の一部とみなすのでジャンプ距離が伸びる。これは単なるショートカットではなく、wはこの後いろいろと応用が効く。行内での左右移動は基本これにするのが吉。

ciw:使いこなして変更とかラクチン。

""で囲まれている中にカーソルを置いて、ci"(change inner quoteと覚えよう)と打つと、""の中身を消してインサートモードに変わってくれる。""の末尾までカーソルを移動してiを押して""の中身をdeleteで1つずつ消して、とやるより早い。これを覚えて、俄然Vimがよさげに見えてきた。このciなんちゃらは応用が効く。たとえばciwとすれば、カーソルがある単語だけが消えてインサートモードに変わるし、ci'とすれば''で囲まれたところで同じことができる。

gj gk:画面分割してるときにめちゃ使える。

書こうと思って忘れていたのを久しぶりに追加。gjやgkと入力すると、改行のない長い段落の中を普通に1行ずつ上下移動できる。いつものjとkだと、1行ずつではなく1段落の上下移動になってしまうので。なぜかこれをすぐ忘れてしまう。

f F t T:移動するとき結構使えそう。

f,F,t,Tで行内検索して移動できるの便利ですよ! 実践Vimにも載ってる技です。

参考

rails4のenumはupdate_allで使うときは注意が必要

Rails4.1.0から使えるようになったenumがめちゃめちゃ便利です。

例えばUserモデルにstatusというINTのカラムがある場合、enumを使うと直感的に管理できるようになります。

class User < ActiveRecord::Base
  # ステータス: temporary (仮登録), active (本登録), resign (退会).
  enum status: %i(temporary active resign) 
end

この場合は自動的にtemporary: 0, active: 1, resign: 2になります。

値を自分で設定したい場合はハッシュで定義すればOKです。

class User < ActiveRecord::Base
  # ステータス: temporary (仮登録), active (本登録), resign (退会).
  enum status: {temporary: 10, active: 20, resign: 30} 
end

詳しい使い方は参考URLを参照。

いろいろと便利なenumですが、今回問題なのが更新するところ。

# status を 2 (resign) に変更
user.resign!

# status を 1 (active) に変更
user.update(status: :active)

# status を 1 (active) に変更
users = User.all
users.update_all(status: :active)
# => ERROR

update_allはローレベルAPIなので、enumの処理ができません。。なので値をちゃんと渡してあげる必要があります。

# status を 1 (active) に変更
users = User.all
users.update_all(status: User.statuses[:active])

以上です。

参考

gitをupdateしたら毎回ユーザ名、パスワードを求められるようになったので解消した

gitのバージョンが古かったのでbrewでバージョンアップしました。

$ brew update
$ brew upgrade git
$ git --version
git version 2.3.5

すると、常にユーザ名、パスワードが求められるように。。

$ git pull origin master
Username for 'https://github.com': 
Password for 'https://github.com': 

参考URLによるとremoteの設定がダメみたいなので確認します。

$ git remote -v
origin  https://github.com/hoge/sample.git (fetch)
origin  git@github.com:hoge/sample.git (push)

cloneの仕方が悪かったのか、fetchだけhttpsになってるので修正します。(なにゆえ...)

$ git remote set-url origin git@github.com:hoge/sample.git
$ git remote -v
origin  git@github.com:hoge/sample.git (fetch)
origin  git@github.com:hoge/sample.git (push)

以上です。

参考