Help us understand the problem. What is going on with this article?

端末から出たくない人にオススメする超個人的な設定

More than 5 years have passed since last update.

今回は、端末(ターミナル)からなるべく出たくない人にオススメする設定の紹介です。基本的に、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を少しだけ書き換えます。

~/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
}

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

あとは、便利なエイリアス、キーなどを設定してみましょう。

~/.zshrc
# alias
alias p="qlmanage -p *"

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

これで、 C-fを押して、プレビューするファイルを選択します。

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

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

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

コマンドの編集

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

~/.zshrc
# ディレクトリごとに区切る
# 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

よって、以下のようにして thbpu ブランチに切り替えてください。

cd /path/to/auto-fu.zsh

git checkout -b pu origin/pu

exec $SHELL

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

~/.zshrc
# 「-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

~/.zshrc
bindkey '^a' zaw-applications

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

open -a

また、以下の方法でも良いと思います。個人的には、こちらを使用することのほうが多いです。

~/.zshrc
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

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

~/.zshrc
# 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 も便利ですので、そちらを使っても構いません。

~/.zshrc
#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を利用します。

~/.zshrc
# 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/&lt;/</g' -e 's/&gt;/>/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

公式Twitterのアプリがなかなかいい感じに通知するようになっているみたいです。通知のために起動しておくのもいいかもしれません。

クライアントは、earthquakeが便利です。

インストールには、bundle installを使いましょう。

Google 翻訳を端末から行う

~/.zshrc
# 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-bFn+↑↓を押します。

そして、tmuxでの通常のコピー手順は以下のようになります。

C-b, [...コピーモードの開始
hjki...カーソル移動
Space...コピーの始点
Enter...コピーの終点
C-b, ]...貼り付け

しかし、いくつかの設定をすることで、コピーが簡略化され、入力するキーも減らすことが出来ます。

~/.tmux.conf
# コピーモード時のキーバインディング
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

コマンドラインで使用しているTips

Windows

Windowsのターミナル環境を整える vol.1

Windowsのターミナル環境を整える vol.2

Zsh

zshでの移動をとにかく楽にする

zshの補完を強化するTips

zshのhistoryを便利に使うためのTips

Mac

Macの初期設定に便利なコマンドとツール

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away