2014-05 / 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

2014-05-18 (日)

zshの履歴検索は↑やC-rだけじゃないよM-pもあるよ&履歴マニアの話 [zsh]

少し前にこちらの記事が話題になりました。
naoya_itoの火を噴いたシェルtips - Togetterまとめ

rebuild.fmのEpisode41でも言及されていた気がします。

弊社フィードフォースでも、ペアプロの時にこういった話をすることはあ
ります。ただ、C-rやC-uは知られていても、M-pはあまり知られていない雰
囲気でしたのでまとめました。


はじめに


M-pやM-nは、Escapeを押して離してpまたはnです。

OSXのターミナルをお使いの方は以下を設定すると、option-pまたは
option-nが使えます。それ以外の環境ではAltが使えるかもしれません。

OSX Terminal setting

デフォルトの動作を知る


デフォルトのM-pとM-nには、それぞれhistory-search-backwardと
history-search-forwardが割り当てられています。

敢えて設定を書くとこんな感じです。

bindkey "^[p" history-search-backward
bindkey "^[n" history-search-forward



"git re"のあとにM-pを続けて打つ様子。"git"にマッチした履歴が現れま
す。M-nすると戻ってきます。
history-search-backward

既存の関数をキーに割り当てる


以下の設定をすると、マッチする履歴が変わります。

bindkey "^[p" history-beginning-search-backward
bindkey "^[n" history-beginning-search-forward


設定場所は~/.zshrcが適切でしょう。[2002-05-14-1]

"git re"のあとにM-pを続けて打つ様子。今度は"git re"から始まる履歴に
マッチします。こちらの方が直感的だと思います。
history-beginning-search-backward

期待する履歴が現れたらReturnキーで確定して下さい。C-eで行末に移動し
たくなりますが不要です。

もう少しカスタマイズ


以下の設定をすると、ヒット後のカーソル位置が変わります。

autoload -U history-search-end
zle -N history-beginning-search-backward-end history-search-end
zle -N history-beginning-search-forward-end history-search-end
bindkey "^[p" history-beginning-search-backward-end
bindkey "^[n" history-beginning-search-forward-end



"git re"から始まる履歴にマッチするのは変わりませんが、カーソル位置
が行末になります。
history-beginning-search-backward-end

期待した履歴が現れたらReturnキーで確定してください。カーソル位置が
行末なので、こちらの方が自然に感じるかもしれません。Emacsの
shell-modeをお使いの方は特に。

この設定はおそらく漢のzshで知ったのだと思いますが、昔すぎて覚えてい
ません。
漢のzsh (4) コマンド履歴の検索~EmacsとVi、どっちも設定できるぜzsh

履歴マニアの話


シェルの履歴を辿るには十分な数の履歴が必要です。この程度の設定は当
然でしょう。

# 履歴を保存するファイル
HISTFILE=$HOME/.zhistory

# メモリ内の履歴の数
HISTSIZE=1000000

# $HISTFILE に保存される履歴の数
SAVEHIST=1000000


※ 信じられないことにHISTSIZEのデフォルト値は30、SAVEHISTは0です。

こちらの設定もオススメです。

# $HISTFILEに時間も記録
setopt extended_history

# 全履歴の一覧を出力する
alias hall="history -E -i 1"



私が履歴の重要性を知った伝説の記事です。
横着プログラミング 第3回: 履歴マニア
10年以上前の記事というのに、全く色褪せることがありません(褒めすぎ)。

履歴を味方につけて開発スピードを上げましょう!

おまけ1


M-.(insert-last-word)もオススメです。直前の履歴の最後の引数をカーソ
ル位置に挿入します。続けて打つと履歴を辿ります。意外に便利です。

おまけ2


以下の設定をするとM-x tetrisでテトリスをプレイ出来ます。有名ですよね?

autoload -U tetris; zle -N tetris



おまけ3


私の~/.zshenvと~/.zshrcを晒します。
~/.zshenv https://gist.github.com/masutaka/9287567
~/.zshrc https://gist.github.com/masutaka/9287575

2014-05 / 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

最終更新時間: 2017-04-26 22:58

検索
最近の話題
- 2017-04-16
  CircleCI 2.0 で capistrano デプロイしてみた
- 2017-04-15
  CircleCI 2.0 をローカルで実行できる circleci コマンドとは何者か
- 2017-04-13
  Rails リポジトリに CircleCI 2.0 を導入した
- 2017-04-08
  PS4 Pro と LG の 4K テレビ 43UH6500 で nasne は使えるのか?
- 2017-04-02
  オムロンの低周波治療器が肩こりにだいぶ効く
- 2017-03-21
  ローカル環境を出来るだけ Dockerize した
- 2017-03-12
  JAWS UG 2017 に行ってきた #jawsdays
最近追記された記事
- 2017-04-13-1 (10日前)
- 2017-04-13-1 (12日前)
- 2017-03-02-1 (54日前)
- 2017-02-25-1 (59日前)
- 2017-02-21-1 (63日前)
- 2015-06-07-1 (69日前)
- 2016-10-19-1 (78日前)
- 2016-01-01-1 (90日前)
- 2015-01-04-1 (99日前)
- 2015-06-07-1 (119日前)
カテゴリ
- Anthy (3)
- Apache (11)
- Apple (1)
- ATOK (4)
- au (3)
- AWS (17)
- Bazaar (1)
- Berkshelf (2)
- BigQuery (1)
- BitBar (3)
- Book (85)
- Boxen (2)
- Bugsnag (1)
- C (26)
- capistrano (4)
- chalow (56)
- ChatWork (1)
- Chef (17)
- Chrome (3)
- Chromecast (1)
- CircleCI (10)
- Comics (2)
- Cooking (10)
- cvs (15)
- cygwin (12)
- D3.js (1)
- Debian (55)
- Docker (3)
- E-mail (8)
- elasticsearch (4)
- Emacs (219)
- Emacs講座 (10)
- English (4)
- feedforce (7)
- fetchmail (3)
- Firefox (20)
- Fluentd (4)
- ftp (1)
- Game (20)
- Gem (5)
- Git (9)
- GitHub (15)
- Go (5)
- Google (1)
- gpg (4)
- GrowthForecast (7)
- Health (3)
- Heroku (9)
- Homebrew (10)
- HTML (6)
- iBook (1)
- iPhone (15)
- IRC (1)
- Jenkins (8)
- JS (1)
- Karabiner (1)
- KeySnail (3)
- Kibana (1)
- Kindle (1)
- Langrich (7)
- LDAP (6)
- Life (19)
- Linux (5)
- Mackerel (1)
- Mew (18)
- MongoDB (1)
- Mozilla (19)
- Music (1)
- MySQL (1)
- NAS (4)
- nginx (6)
- NHK (1)
- Node (1)
- ntp (4)
- OOP (1)
- OpenID (2)
- openssl (1)
- Opera (2)
- OSX (41)
- Perl (14)
- PHP (19)
- PostgreSQL (1)
- procmail (4)
- Programing (3)
- Puppet (1)
- Python (2)
- Rails (12)
- Rake (2)
- RaspberryPi (1)
- RedHat (29)
- Redmine (3)
- Rspec (1)
- Ruby (48)
- samba (3)
- screen (7)
- sed (5)
- serverspec (6)
- sh (8)
- Slack (2)
- Solaris9 (22)
- Spring (2)
- ssh (4)
- StatusNet (21)
- svn (12)
- Swift (1)
- Tablet (1)
- tdiary (3)
- Twitter (14)
- Twmode (6)
- Ubuntu (5)
- UNIX (102)
- vagrant (8)
- Video (21)
- vim (1)
- Wercker (9)
- Windows (29)
- Wine (3)
- XML (11)
- XP (1)
- zsh (25)
- インストールメモ (33)
- クイックシェイプ (12)
- ネタ (15)
- 勉強会 (14)
- 携帯 (6)
- 正規表現 (4)
過去ログ
2017 : 01 02 03 04 05 06 07 08 09 10 11 12
2016 : 01 02 03 04 05 06 07 08 09 10 11 12
2015 : 01 02 03 04 05 06 07 08 09 10 11 12
2014 : 01 02 03 04 05 06 07 08 09 10 11 12
2013 : 01 02 03 04 05 06 07 08 09 10 11 12
2012 : 01 02 03 04 05 06 07 08 09 10 11 12
2011 : 01 02 03 04 05 06 07 08 09 10 11 12
2010 : 01 02 03 04 05 06 07 08 09 10 11 12
2009 : 01 02 03 04 05 06 07 08 09 10 11 12
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 01 02 03 04 05 06 07 08 09 10 11 12
2006 : 01 02 03 04 05 06 07 08 09 10 11 12
2005 : 01 02 03 04 05 06 07 08 09 10 11 12
2004 : 01 02 03 04 05 06 07 08 09 10 11 12
2003 : 01 02 03 04 05 06 07 08 09 10 11 12
2002 : 01 02 03 04 05 06 07 08 09 10 11 12
2001 : 01 02 03 04 05 06 07 08 09 10 11 12
Google+