hotoolong's blog

プログラムのことやエンジニアリングに関することを記事にしています。

iTerm2越しにコマンドラインの単語で戻る進むのショートカットを追加する

新しいMacを構築中です。
気づいたことをメモっておこうかと思っています。

bashなどのコマンドラインでEsc+f Esc+b で単語移動できますが、 押しづらいのでiTerm2で接続するときに Command+f と Command+b に置き換えています。

iTerm2のPreferences > Keys の Key Mapings の下の + を押して
追加する項目を設定します。

Keyboard Shortcut で Command+f を押して Actionで Send Escape Sequenceを選択して Esc+fなどに設定すればOKです。
他にも設定可能なので見ておくといいかもしれないですね。

f:id:hotoolong:20170127011553p:plain

Accept: */*; で MissingTemplateになってしまうのを防ぐ

topページヘのアクセスでたまに変なExceptionが出てたのです。

ActionView::MissingTemplate (Missing template pages/top, application/top with {:locale=>[:ja], :formats=>["*/*;"], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :slim, :coffee, :jbuilder]}. Searched in:

一見何がおかしいのかよくわからなかったですが、

HTTP Headerが Accept: /; で送られるとエラーになり Accept: / とセミコロンがない場合はhtmlのテンプレートが判断されて セミコロンがついてるとMissingTemplateになってしまうようです。

UAをみていると Baidu Browser のようですが、ExceptionがでてSlackなどに通知されてしまうのも何なので

ActionView::MissingTemplate (Missing template mall_front/pages/top, mall_front/application/top with {:locale=>[:ja], :formats=>["/;"], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :slim, :coffee, :jbuilder]}. Searched in:

ApplicationController に以下のように設定すると防げました。

before_atcion :default_request_format

def default_request_format
  request.format = :html if request.format == '*/*;'
end

あんまり困っている人がいないのか、ググっててもあまり載ってないですね。

新しいMacBook Proを買いました。

新年あけましておめでとうございます。
しばらくブログを書けていなかったのですが、
気づけば2016年も終わり2017年になってしまいました。
早いものです。

年末に頼んでいたMacBook Proが届きました。 www.apple.com

まだ使い始めてセットアップなどしてるところですが、
今回はUSキーボードにして少し操作にもなれないといけないのですが、
会社ではUSキーだったので、これはこれで少しすれば慣れそうです。
何と言っても日本語キーボードよりもホームポジションがセンターよりになっているのが
気持ちよく作業できますね。
ただ、新しいMacBook Proタッチパッドが大きくなってしまったので右手が少し触れてしまうこともあり、
その点は少し残念ですね。

Touch Barはまだうまく使いこなせてないのですが、
カスタマイズしておきたいところですね。
しばらく使ってみてまた感想書いておきます。

簡単ですが、今年もよろしくお願いします。

Windows、Linux、Macで開発している場合のGitの改行コード

Gitで管理してるファイルの改行コードが混在してないですか?
いままではnkfを使って改行コードをLFに直したりしてたのですが、
Git側でLFになおしてくれる設定がありました。
なんてこった。。いままで無駄なことして履歴を汚してたなんて、、

core.autocrlf
の設定を変更しておけばよかったようで

git config --global core.autocrlf false

デフォルトはfalseのようで、変換しないでそのままコミットしてチェックアウトするようです。

git config --global core.autocrlf true

trueするとコミット時にLFに、チェックアウト時にCRLFに変換してくれます。

git config --global core.autocrlf input

inputを設定するとコミット時にLFに変換してくれますが、チェックアウト時は何もしないでくれます。
この設定だといろいろな環境で扱っている場合便利そうですね。

Git - Git の設定

www.shuwasystem.co.jp

単一の文字列中から文字列を探すときは正規表現は使わない

文字列から文字列を探すときには正規表現をよく使ってしまいます。

Effective Rubyには =~ などのPerl風機能を避けようということが書かれています。
RuboCopでは逆に=~を使うように促されてしまってなんのこっちゃと思っていたのですが、
ruby-style-guideの内容を見てると
単一の文字列中から文字列を探す場合は正規表現を使わないというような記述がありました。
ruby-style-guide/README.ja.md at japanese · fortissimo1997/ruby-style-guide · GitHub

string['text']

と書けば良いようです。
こんなこともできるのですね。

文字列の添字に直接正規表現を入れることもできるようで、

match = string[/regexp/]             # マッチした内容が得られる
first_group = string[/text(grp)/, 1] # キャプチャグループの内容が得られる
string[/text (grp)/, 1] = 'replace'  # string => 'text replace'

こんなこともできるようです。
便利ですね。

www.shoeisha.co.jp

www.oreilly.co.jp

Unite.vimの履歴を使う

最近、特定のリクエストで Railsのformatsの値が/;に置き換わってしまってMissing templateになるという事例に悩まされています。

原因がいまいちよくわからず。。知ってる人がいれば教えて下さい。

本題ですが、

以前からUnite.vimの履歴があればいいなと思っていたら、

GitHub - Shougo/unite.vim: Unite and create user interfaces

history/unite

というsourceが増えていたのですね。

感激です。

これで履歴を呼び出すことができそうです。

ありがたや〜

あと知らない間に

grep/git

のsourceも増えていてこちらも使ってみようかなと

git grep の sourceは以前から

github.com

こちらを使っていました。

こちらはいきなり入力モードで入れるので使い方に合わせて使ってみようかと思います。

シェルで前回使った引数を使う

最近、itamae, serverspecと格闘中です。

production, stagingでうまく切り替えてroleの管理ができないか。

なんて考え中です。うまいことできないかしら。。

本題ですがzshなどを使っているケースで

gd aaa bbb
ga aaa bbb

※gdはgit diff , ga は git addのaliasです。

などのコマンドを打つときに

前回使った引数を使いまわしたいシーンが度々あります。

mkdir と cdを使うケースの場合は

mkdir aaa
cd $_

引数がひとつの場合は$_ を使うことで乗りきれるのですが

複数ある場合はこれではうまくいきません。

調べていると

  • !!で前回のコマンドのhistoryを使えて
  • !$で前回の引数の最後の値
  • !:1で前回の引数の最初の値

が使えるので

gd aaa bbb
ga !:1-$

と打つことで複数の引数に対応できるようです。

ただ$_とは違うので一旦展開が差し込まれる挙動が省略されて欲しいところです。

少し話は変わって

yum install hogehoge

と打った時に

sudo忘れなんてこともありますが

!!を使うことで

sudo !!

とすると前回のコマンドをsudoで実行ということも簡単にできそうです。

でもやっぱり C-p、C-a でsudoと打ってしまいそうですが。。