ほとんどの作業を端末上で行う人にオススメする設定

iterm2
端末からあまり出たくない人向けの記事です。

photo-credit: syui


画像の閲覧






zaw-open-file



画像関連は、端末との相性は悪いです。ここは、外部ツールと連携することにしましょう。


Xを使っても良いのですが、通常のデスクトップには、それなりの画像を閲覧するソフトが入っている事が多いです。よって、それを使いましょう。


私が Mac で使っている方法は以下の通りです。 zawを使用します。


zaw/sources/open-file.zshを少しだけ書き換えます。


function zaw-callback-open-file() {
# file_path, file_dir
filep="${(q)1}"
filed=`echo ${filep%/*}`

# TODO: symlink to directory
if [[ -d "$1" ]]; then
zaw zaw-src-open-file "$1"
else
BUFFER="qlmanage -p ${(q)1} && cd $filed"
# BUFFER="gnome-open ${(q)1}"
# BUFFER="open ${(q)1}"
# accept-line
zle accept-line
fi
}



ファイルが存在するディレクトリに移動するように設定。選択後、コマンドが実行されるように設定。


# alias
alias p="qlmanage -p *"

# key
bindkey '^f' zaw-open-file



これで、 C-f (auto-fu.zshなどを使用している場合は、C-g,C-f)を押して、プレビューするファイルを選択します。


フォルダ内のファイル全部を閲覧したい場合は、いったん閉じて、 pコマンドです。


ちなみに、プレビューできるファイルは、画像に限らずあらゆる拡張子に対応しています。また、対応拡張子を増やすこともできますし、プレビュー形式を変更することもできます。


Command Line で使用しているツールまとめ vol.6


コマンドの編集



補完されたディレクトリを編集しやすいようにするには、以下の設定がオススメです。

# ディレクトリごとに区切る
# http://mollifier.hatenablog.com/entry/20081214/1229229752
autoload -Uz select-word-style
select-word-style default
zstyle ':zle:*' word-chars " /=;@:{},|"
zstyle ':zle:*' word-style unspecified



これで、 ^wを押すと、ディレクトリ1つを削除することが出来ます。


auto-fu.zshの特殊事情



なお、 auto-fu.zshを使っている方は、エラーが出ますので、以下のように thb か pu ブランチに切り替えてください。


exec $SHELL

cd /path/to/auto-fu.zsh

git checkout -b pu origin/pu



Cannot rebind backward-kill-word: user:backward-kill-word-match
Cannot rebind kill-word: user:kill-word-match




auto-fu.zshを使っている方は、「-azfu-」を表示させないようにすることもできます。私は、設定していませんが...。


# 「-azfu-」を表示させない
zstyle ':auto-fu:var' postdisplay $''



アプリケーションの実行





zaw-applications



基本的には、 open -aで起動できますが、面倒なので、キーで選択、起動できるようにしています。


https://github.com/zsh-users/zaw/blob/master/sources/applications.zsh


bindkey '^a' zaw-applications



これで、 C-g,C-aを押すと、アプリを選択できると同時に、起動しやすくなります。


open -a



また、以下の方法でも良いと思います。

function openapp() {
BUFFER="open -a "
CURSOR=$#BUFFER
}
zle -N openapp
bindkey '^o' openapp



後は、 C-g,C-oを押した後、Tab若しくは、起動したいアプリのアルファベットでも入力して、補完できます(そのための設定をしている人限定ですが...)


zshの補完を強化するTips


ディレクトリ移動


よく移動するディレクトリの補完とフィルタにより、ディレクトリ移動を簡単にします。




percol-cdr



sudo pip install percol

# 以下は必要ありません
brew install cmigemo

curl -O http://www.atzm.org/etc/files/pymigemo/pymigemo-0.4.tar.gz

sudo pip install pymigemo-0.4.tar.gz



percol 入れて zsh と組み合わせたら超便利


# cdr {{{
# http://qiita.com/yoshikaw/items/c5f44ad6dcae059ea34c
autoload -Uz compinit && compinit
zstyle ':completion:*' menu select
zstyle ':completion:*:cd:*' ignore-parents parent pwd
zstyle ':completion:*:descriptions' format '%BCompleting%b %U%d%u'
typeset -ga chpwd_functions
if is-at-least 4.3.11; then
autoload -U chpwd_recent_dirs cdr
chpwd_functions+=chpwd_recent_dirs
zstyle ":chpwd:*" recent-dirs-max 500
zstyle ":chpwd:*" recent-dirs-default true
zstyle ":completion:*" recent-dirs-insert always
fi

## zaw-cdr
## http://shibayu36.hatenablog.com/entry/20120130/1327937835
##autoload -Uz chpwd_recent_dirs cdr add-zsh-hook
##add-zsh-hook chpwd chpwd_recent_dirs
##zstyle ':chpwd:*' recent-dirs-max 5000
##zstyle ':chpwd:*' recent-dirs-default yes
##zstyle ':completion:*' recent-dirs-insert both

## http://yagays.github.io/blog/2013/05/20/zaw-zsh/
##zstyle ':filter-select' case-insensitive yes # 絞り込みをcase-insensitiveに
##bindkey '^g' zaw-dir # zaw-cdrをbindkey

## percol-cdr
## http://piyopiyoducky.net/blog/2013/08/17/cdr-with-percol/
### search a destination from cdr list
function percol-get-destination-from-cdr() {
cdr -l | \
sed -e 's/^[[:digit:]]*[[:blank:]]*//' | \
percol --match-method migemo --query "$LBUFFER"
}

### search a destination from cdr list and cd the destination
function percol-cdr() {
local destination="$(percol-get-destination-from-cdr)"
if [ -n "$destination" ]; then
BUFFER="cd $destination"
zle accept-line
else
zle reset-prompt
fi
}
zle -N percol-cdr
bindkey '^g' percol-cdr

# }}}


auto-jumpz も便利ですので、そちらを使っても構いません。


# autojump
# http://ihiroky.hatenablog.com/entry/2013/01/22/114130
export FPATH="$FPATH:/opt/local/share/zsh/site-functions/"
if [ -f /opt/local/etc/profile.d/autojump.sh ]; then
. /opt/local/etc/profile.d/autojump.sh
fi

# z
# http://qiita.com/ikm/items/0e498981c6b19ac8d19b
. /usr/local/etc/profile.d/z.sh
function _Z_precmd {
z --add "$(pwd -P)" 61 }
precmd_functions=($precmd_functions _Z_precmd)


インデント消えてます。対応するのは無理っぽいです。