今回は、端末(ターミナル)からなるべく出たくない人にオススメする設定の紹介です。基本的に、Macで動作するツールを使って紹介しますが、WindowsやLinuxでも応用できる内容になっています。
なお、設定後は、アプリやシェルを再起動する必要や設定ファイルを読み込み直す必要があったりしますので、その辺りは気をつけてください。
ファイルのプレビュー、画像の閲覧など
画像関連は、端末との相性は悪いです。ここは、外部ツールと連携することにしましょう。
Xを使っても良いのですが、通常のデスクトップには、それなりの画像を閲覧するソフトが入っている事が多いです。よって、それを使いましょう。
ここでは、qlmanage
というコマンドを使ってみます。なお、インターフェイスはzawを使用します。
zaw-open-file
mkdir -p ~/dotfiles/.zsh/plugin/
cd !$
git clone git://github.com/zsh-users/zaw.git
echo "source ${PWD}/zaw/zaw.zsh" >> ~/.zshrc
source ~/.zshrc && exec $SHELL
ここで、~/dotfiles/.zsh/plugin/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
を押して、プレビューするファイルを選択します。
フォルダ内のファイル全部を閲覧したい場合は、いったん閉じて、 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を使っている方は、以下の様なエラーが出ます。
Cannot rebind backward-kill-word: user:backward-kill-word-match
Cannot rebind kill-word: user:kill-word-match
よって、以下のようにして thb
か pu
ブランチに切り替えてください。
cd /path/to/auto-fu.zsh
git checkout -b pu origin/pu
exec $SHELL
ちなみに、auto-fu.zsh
を使っている方は、「-azfu-」を表示させないようにすることもできます。私は、設定していませんが...。
# 「-azfu-」を表示させない
zstyle ':auto-fu:var' postdisplay $''
auto-fu.zsh
は、基本キーバインドがEmacs
になってるところが使いやすいんですよね。設定ファイルでvi
にしていると、手軽に使えるキーが増えます。
ここで、プラグインを併用して使う場合は、auto-fu.zsh
をキャンセルするキーを設定しておくとよいです。
アプリケーションの実行
zaw-applications
基本的には、 open -a
で起動できますが、面倒なので、キーで選択、起動できるようにしています。
https://github.com/zsh-users/zaw/blob/master/sources/applications.zsh
bindkey '^a' zaw-applications
これで、 C-a
を押すと、アプリを選択できると同時に、起動しやすくなります。
open -a
また、以下の方法でも良いと思います。個人的には、こちらを使用することのほうが多いです。
function openapp() {
BUFFER="open -a "
CURSOR=$#BUFFER
}
zle -N openapp
bindkey '^o' openapp
後は、 C-o
を押した後、Tab
若しくは、起動したいアプリのアルファベットでも入力して、補完できます(そのための設定をしている人限定ですが…詳しくはこちら)
どちらを利用するかは、お好みで。
ディレクトリ移動
よく移動するディレクトリの補完とフィルタにより、ディレクトリ移動を簡単にします。
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
# 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-jumpや z も便利ですので、そちらを使っても構いません。
#dir {{{
## 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)
# }}}
インデント消えてます。対応するのは無理っぽいです。
クリップボード履歴
クリップボード履歴を利用するには、ClipMenuというアプリを使います。インターフェイスは、先ほど入れたpercol
を利用します。
# clipboard
## clipmenu
## http://qiita.com/dai___chi/items/b71fe99339bdbe5b5347
function searchClipBoard() {
clipMenuPath='$HOME/Library/Application Support/ClipMenu'
plutil -convert xml1 $HOME/Library/Application\ Support/ClipMenu/clips.data -o - |\
awk '/<string>/,/<\/string>/' |\
# 15行目から最終行まで抜き出す
sed -n '15, $p' |\
sed -e 's/<string>//g' -e 's/<\/string>//g' -e 's/</</g' -e 's/>/>/g' |\
# head -5020 |tail -5000 |\
sed '/^$/d'|cat -n |sort -k 2|uniq -f1 |sort -k 1 |\
sed -e 's/^ *[0-9]*//g' |\
awk '{for(i=1;i<NF;i++){printf("%s%s",$i,OFS=" ")}print $NF}' |\
# ナンバリングの追加
nl -b t -n ln |percol |sed -e "s/\ /\\\ /g" |\
# ナンバリングの削除
sed -e 's/\\ / /g' |cut -c 8- |ruby -pe 'chomp' |pbcopy
zle reset-prompt
};
zle -N searchClipBoard
# C-pでクリップボード履歴の検索
bindkey '^p' searchClipBoard
これで、C-p
を押すと、クリップボード履歴を利用できます。
ClipMenuの設定
適時使用しやすいように設定しておいてください。
通知
通知には、Growlを使います。
コマンド終了を通知する
zsh
のコマンド終了をGrowl
で通知する方法です。経過時間は 3秒
、メッセージは done!!
にしました。
まずは、GrowlNotifyをインストールして、growlnotify
コマンドが使えるようにします。
次に、このツールと連携する設定を書いたファイルをダウンロードし、適用します。
mkdir -p ~/dotfiles/.zsh/tool/
cd !$
curl -O http://growl.cachefly.net/GrowlNotify-2.1.zip
aunpack GrowlNotify-2.1.zip
open GrowlNotify.pkg
curl -O https://gist.github.com/syui/7112389/raw/growl.zsh
cat growl.zsh
echo "source $PWD/growl.zsh" >> ~/.zshrc
source ~/.zshrc && exec $SHELL
では、試してみましょう。
sleep 4
Growlの設定
すべての通知を閉じるショートカットを設定しておきましょう。なお、通知は、常に画面にとどまるように設定しておくと良いです。
では、先ほど設定したショートカットを試してみましょう。
sudo port install watch
watch -n 1 'growlnotify -m mba-hack' | sleep 6
ここで、 ショートカットを押します。通知が消えました。
スタイルはどれがいいんでしょうか。あまりプレビューしてないので、分かりませんが、オススメのあったら教えて下さい。
なお、OS X Mavericks
を使っている方は、MacPorts
が動かないと思います。その場合は、以下の記事を参考にしてください。
http://mba-hack.blogspot.jp/2013/10/os-x-mavericksmacports.html
公式Twitterのアプリがなかなかいい感じに通知するようになっているみたいです。通知のために起動しておくのもいいかもしれません。
クライアントは、earthquakeが便利です。
インストールには、bundle install
を使いましょう。
Google 翻訳を端末から行う
# google_translate [-j, -e]
# $ google_translate -e power line
function google_translate() {
local str opt arg
str=`pbpaste` # clipboard
arg=`echo ${@:2} | sed -e 's/ */+/g'` # argument
en_jp="?hl=ja&sl=en&tl=ja&ie=UTF-8&oe=UTF-8" # url
case "$1" in
"-j") opt="?hl=ja&sl=ja&tl=en&ie=UTF-8&oe=UTF-8&text=${arg}";; # jp -> en translate
"-e") opt="${en_jp}&text=${arg}";; # en -> jp translate
*) opt="${en_jp}&text=${str}";; # en -> jp translate
esac
w3m +20 "http://translate.google.com/${opt}" # goto 20 line
}
クリップボードにある英語を日本語に翻訳
# クリップボードに英語が入っていることの確認
$ pbpaste
# 翻訳
$ google_translate
英語を日本語に翻訳
$ google_translate -e power line for vim
日本語を英語に翻訳
$ google_translate -j 日本人は英語ができますか。 いいえ、翻訳機がないと無理です。
http://mba-hack.blogspot.jp/2013/10/google.html
tmuxでスクロールしたり、コピーしたりする方法
例えば、w3m
からコピーをしてもいいですが、tmux
のコピー機能も結構使える場合があります。
tmux
でのスクロールするには、 C-b
、 Fn+↑↓
を押します。
そして、tmux
での通常のコピー手順は以下のようになります。
C-b, [
...コピーモードの開始
hjki
...カーソル移動
Space
...コピーの始点
Enter
...コピーの終点
C-b, ]
...貼り付け
しかし、いくつかの設定をすることで、コピーが簡略化され、入力するキーも減らすことが出来ます。
# コピーモード時のキーバインディング
set-window-option -g mode-keys vi
# 1行コピー
bind-key -t vi-copy Y copy-line
# viコピーモードのキーバインド表示
bind / list-keys -t vi-copy
# Enterでクリップボードに
# http://qiita.com/kkabetani/items/e37ac1e4e0b53c418a35
bind-key -t vi-copy Enter copy-pipe "reattach-to-user-namespace pbcopy"
http://mba-hack.blogspot.jp/2013/10/tmux.html
参考
過去に書いた記事と関連する部分も多いので、もしよろしければどうぞ。
コマンドライン
Command Line で使用しているツールまとめ vol.1
Command Line で使用しているツールまとめ vol.2
Command Line で使用しているツールまとめ vol.3
Command Line で使用しているツールまとめ vol.4
Command Line で使用しているツールまとめ vol.5
Command Line で使用しているツールまとめ vol.6
Command Line で使用しているツールまとめ vol.7