Vim
Zsh
Mac
command
tmux

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

Command Lineで使用しているツールを簡単にではありますが、まとめてみようと思います。私が知らない便利ツールはまだまだたくさんありますので、ここに掲載されているもの以外で便利なものがあれば、ぜひ教えてください。

この記事に貼り付けてあるリンクは、キーワードに関連する適切な場所へと誘導してくれます。非常に有効なので、ぜひ参照してみてください。

また、私は基本的にパソコンのことは何もわかっていないので、記事内には誤りを含む可能性があります。よって、できる限り自分の環境を把握した上で、適時読み換えてもらえればと思います。特に、設定ファイルの場所については気をつけてください。また、GitHomebrewMacPortの導入説明などは省略していますので、注意が必要です。

zsh

Shellであるzshを拡張する設定の数々を紹介していきたいと思います。簡易にではありますが、もっと良い設定があれば、コメントにて補足していただければありがたいと思います。

brew install zsh

chsh -s /usr/local/bin/zsh

autojump

autojumpは、移動を簡単にしてくれるツールです。autojumpを導入し、補完関数のパッケージを$fpath以下においてやると、効果を発揮します。また、補完関数を自作することもできます。

brew install autojump

z

autojumpよりもzのほうがいいという人もいます。私もそう思います。

git clone https://github.com/rupa/z.git

または

brew install z

そして、設定ファイルに以下を付け足します。これで、jを押すと、履歴JUMPが使えます。もし使用できない場合は、こちらを使用してみてください。

~/.zshrc
_Z_CMD=j
source ~/z/z.sh
precmd() {
  _z --add "$(pwd -P)"
}

auto-fu.zsh

auto-fu.zshは、自動補完を簡単にしてくれるツールです。更新されてからさらに使いやすくなりました。

git clone https://github.com/hchbaw/auto-fu.zsh.git

echo "source ~/auto-fu.zsh/auto-fu.zsh" >> ~/.zshrc

canything

zshanything.elライクな環境を整えるには、canythingがお勧めです。まあ、auto-fu.zshと同一作者のzaw.zshでもいいのですが。

sudo aptitude install libncursesw5-dev

git clone https://github.com/keiji0/canything

cd canything && make

mkdir -p ~/bin && mv canything ~/bin

おすすめの設定gistyで管理しているリポジトリのワーキングディレクトリに一覧から選んで移動する設定です。

# -*- sh -*-
zmodload zsh/parameter

function zaw-src-gisty() {
    candidates=("${(ps:\n:)$(gisty list)}")
    actions=("zaw-callback-gisty-append-to-buffer")
    act_descriptions=("append to edit buffer")
}

zaw-register-src -n gisty zaw-src-gisty

function zaw-callback-gisty-append-to-buffer() {
    local gitdir=`echo "${(j:; :)@}" | cut -d":" -f1`
    local destpath=$GISTY_DIR/$gitdir
    if [ -n "$gitdir" -a -d "$destpath" ]
    then
        LBUFFER="${BUFFER}${destpath}"
    fi
}

コマンドラインスタック

zshでは、コマンドラインスタックというものを使うと利便性が向上します。これは、簡単には、入力を一時避難しておくようなものです。コマンドラインスタックの使い方は、Esc-qEsc-hです。また、避難したものを表示しておくようにすると、更に便利です。

~/.zshrc
show_buffer_stack() {
  POSTDISPLAY="
stack: $LBUFFER"
  zle push-line-or-edit
}
zle -N show_buffer_stack

oh-my-zsh

oh-my-zshは、zshのカスタマイズを簡単にするようなものです。設定ファイルの集まりといえば分かりやすいでしょうか。有志たちが公開してくれている設定を簡単に取り込めます。特に、Promptの設定においては、大いに参考になると思います。zshのPromptの設定を書くのはとても面倒くさいので、oh-my-zshを参考に構築するのもありかなとは思っています。

git clone git://github.com/robbyrussell/oh-my-zsh.git ~/.oh-my-zsh

cp -i ~/.oh-my-zsh/templates/zshrc.zsh-template ~/.zshrc

zsh-git-prompt

zsh の Prompt に Git のRepository 情報を表示するには、zsh-git-promptがお手軽です。ただ、私の場合は、ククログのzshrcを参考にして書きました。

git clone https://github.com/olivierverdier/zsh-git-prompt.git 

cd zsh-git-prompt

mkdir -p ~/.zsh/git-prompt

cp gitstatus.py ~/.zsh/git-prompt

echo "source ~/zsh-git-prompt/zshrc.sh" >> ~/.zshrc

echo "PROMPT='%B%m%~%b$(git_super_status) %#" >> ~/.zshrc

tmux

tmuxとは、Virtual環境を構築するツールです。screenとともに有名ですが、私は、tmuxを使っています。ここでは、tmuxを便利にする設定の数々を紹介していきたいと思います。

brew install tmux

screen風のキーバインドを使用する

mkdir -p ~/.tmux.d

sudo cp /opt/local/share/doc/tmux/screen-keys.conf ~/.tmux.d

echo "source ~/.tmux.d/screen-keys.conf" > ~/.tmux.conf

Setting File Sample

設定ファイルのサンプルは、GitHubに挙げられているものが参考になります。設定ファイルの書き方はこちらです。

~/.tmux.conf
#prefixキーの変更
set-option -g prefix ^_

#viのキーバイドを使用する
set-window-option -g mode-keys vi

#C-h,lでウィンドウの移動
unbind-key C-h
unbind-key C-l
bind -n C-h previous-window
bind -n C-l next-window

MacのtmuxでClipboardを利用する

mkdir ~/bin && echo "PATH=$HOME/bin:$PATH" >> ~/.zshrc

git clone git://github.com/ChrisJohnsen/tmux-MacOSX-pasteboard.git

cd ~/tmux-MacOSX-pasteboard

make reattach-to-user-namespace

cp reattach-to-user-namespace ~/bin

vim ~/.tmux.conf

以下のように書きます。すると、Macのtmuxで普通にClipboardを利用することができます。

~/.tmux.conf
#クリップボードの共有
set-option -g default-command "~/bin/reattach-to-user-namespace -l $SHELL"

#C-cでコピー
bind-key C-c run "tmux save-buffer - | ~/bin/reattach-to-user-namespace pbcopy"

#C-vで貼り付け
bind-key C-v run "~/bin/reattach-to-user-namespace pbpaste | tmux load-buffer - && tmux paste-buffer"

tmuxのPromptに様々な情報を表示する

tmuxのPromptに様々な情報を表示するには、情報を取得するシェルスクリプトが必要になります。それらを作成した後、設定ファイルに以下のように書きます。長くなりそうなので、詳しくは、上の記事を見てください。

~/.tmux.conf
# ステータスライン - Right
set -g status-right '< #[fg=black,bold]#(echo $LANG)#[default] < #[fg=blue]up #(pc-running-time)#[default] < #[fg=magenta](#(loadaverage)) Mem #(used-mem)%%#[default] < #[fg=red,bold]%y/%m/%d(%a)%H:%M:%S#[default] '

# Rightの表示領域最大長
set -g status-right-length 90

weechat

weechatとは、IRC Clientのことです。IRC Clientの中では、使いやすいので、お勧めです。Growlとの連携で更に便利になります。

brew install weechat

追記
120resetさんからコメントをいただきました。pluginのことも考えると、以下のようするほうがいいようです。

brew install weechat --ruby --perl --python

mutt+Gmail

mutt+GmailでCUIメール環境を構築する方法です。これについても、簡易手順なので、それぞれにカスタマイズしていただければと思います。

brew install mutt

brew install msmtp

mkdir -p ~/.mutt/cache/headers && mkdir ~/.mutt/cache/bodies && touch ~/.mutt/certificates

curl http://cache.gawker.com/assets/images/lifehacker/2010/06/muttrc-gmail.txt > ~/.muttrc

vim ~/.muttrc

以下の項目を自分のアカウントのものに書き換えます。

iTerm2

iTerm2は、MacのTerminalアプリです。私は、Macではこれを使用しています。

フォントをRictyに変更する

フォントをRictyに変更すると、アルファベットや数字の判別が分かりやすくなると思います。

brew install fontforge --use-gcc

Inconsolata のインストール 

Migu 1M のインストール

git clone https://github.com/yascentur/Ricty.git

cd Ricty && sh ricty_generator.sh auto

cp -f Ricty*.ttf ~/Library/fonts

あとは、iTerm2の設定を開き、フォントをRictyに変更します。

ディレクトリを維持する

iTerm2の設定にて、Profiles>General>Working_DirectoryをReuse…にしておくと、ディレクトリを維持することができます。

fu

fuとは、ワンライナーを簡単に投稿、共有できるCommand-Line-FuのCLI Clientです。cmdline-fuのほうがお勧めですが、私は、fuを使っています。

git clone git://github.com/samirahmed/fu.git

cd fu/

sudo make install

fuの使い方

#検索して結果をすべてを表示
fu -a キーワード

#2番目をコピー
fu -c 2

peep

peepとは、Command LineでGoogleReaderを確認するツールです。使い方は簡単で-nで未読数を表示します。キーは、ヘルプは?で終了はqです。記事を読むにはOです。

git clone https://github.com/ryuji/peep

echo "alias peep='~/peep/peep'" >> ~/.zshrc

zshで使用するデフォルトのブラウザを変更する

これをやっておくと、記事をw3mで開くことができます。

echo "export BROWSER=w3m" >> ~/.zshrc

Sheet

Sheetとは、Command Lineで動作するチートシート補助ツールのようなものです。依存関係の解消には、bundlerを使います。rvm installを使用するには、gccを使います。Xcode4.3以降は、gccがインストールされないので、インストールしておきましょう。

brew install ruby

gem install bundler

git clone --depth 1 git://github.com/wayneeseguin/rvm.git

cd rvm

./install

rvm install 1.9.2

rvm use 1.9.2

cd ~/

git clone https://github.com/oscardelben/sheet.git

cd sheet

bundle install

gem install sheet

使い方は、簡単で、sheet new testなどで作成したシートをsheet listなどで開きます。

Sublime Text 2

Command Lineで動作するというわけではありませんが、コマンドラインに替わるものとして、Sublime Text 2がお勧めです。Coda2人気の中、私は、こちらのほうがいいと思っています。

パッケージ管理

コンソールをCtrl+Shift+@を押して表示し、以下のコマンドを実行します。

import urllib2,os; pf='Package Control.sublime-package'; ipp=sublime.installed_packages_path(); os.makedirs(ipp) if not os.path.exists(ipp) else None; urllib2.install_opener(urllib2.build_opener(urllib2.ProxyHandler())); open(os.path.join(ipp,pf),'wb').write(urllib2.urlopen('http://sublime.wbond.net/'+pf.replace(' ','%20')).read()); print 'Please restart Sublime Text to finish installation'

Themeの設定

パッケージコントロールをCommnad+Shift+pを押して表示し、installにて、以下のパッケージを追加していきます。

Theme - Soda

Sublime Text 2 -> Preferences -> Settings - User を選択し、設定ファイルに以下を追記します。

{
    "theme": "Soda Dark.sublime-theme"
}

パッケージの追加

1. URLを用いたパッケージの追加
Commnad+Shift+pを押し、add repositoryを選択します。そして、URLを入力しEnterを押します。

2. 検索を用いたパッケージの追加
Commnad+Shift+pを押し、installを選択します。そして、キーワードで検索し、Enterを押します。

おすすめパッケージは、こちらが参考になります。もうそろそろ表示領域の上限がきそうなので、記述は、相当省略していきます。

TweetVim

TweetVimは、Twitter Clientです。導入は少しばかり面倒ですが、Vim上で動作するためかなり便利だと思います。また、Command Lineで動作するTwitter Clientとしては、tなどもあります。

Vim Pluginの管理

git clone https://github.com/gmarik/vundle.git ~/.vim/bundle/vundle

echo "source ~/.vim/bundle/vundle/test/minirc.vim" >> ~/.vimrc

vim ~/.vim/bundle/vundle/test/minirc.vim

TweetVimの導入

~/.vim/bundle/vundle/test/minirc.vim
set nocompatible
syntax on
filetype off
set rtp+=~/.vim/bundle/vundle/
call vundle#rc()
Bundle 'gmarik/vundle'

"TweetVimとその依存関連
Bundle 'basyura/TweetVim'
Bundle 'mattn/webapi-vim'
Bundle 'basyura/twibill.vim'
Bundle 'tyru/open-browser.vim'
Bundle 'h1mesuke/unite-outline'
Bundle 'basyura/bitly.vim'

filetype plugin indent on

ファイルを保存した後は、:BundleInstallとすると、プラグインがインストールされます。

blogger.vim

blogger.vimとは、Vim上からブログへポストするためのプラグインです。ブログを書くことはアウトプットにいいということで導入してみました。

プラグインのインストール

~/.vim/bundle/vundle/test/minirc.vim
"gitリポジトリの内容を参照する
Bundle 'kana/vim-metarw'

"bloggerに投稿する
Bundle 'ujihisa/blogger.vim'

"プラグインの読み込みパスを変更
"Bundle 'tpope/vim-pathogen'

:BundleInstallを実行すると、プラグインのインストールが完了します。

必要なものをインストール

sudo port install pandoc

gem install nokogiri

gem install net-https-wrapper

必要な設定

vim-pathogenを使用しない場合は、以下の設定を行います。

git clone https://github.com/ujihisa/blogger.vim.git

cd blogger.vim

mkdir -p ~/.vim/autoload/metarw/

cp autoload/metarw/blogger.vim ~/.vim/autoload/metarw/ && cp autoload/metarw/blogger.rb ~/.vim/autoload/metarw/

後は、設定ファイルに、アカウント情報を記入していきます。your_blogid_hereなどの箇所を自分のアカウント情報と置き換えます。

~/.vimrc
"Bloggerアカウント情報
let g:blogger_blogid = 'your_blogid_here'
let g:blogger_email = 'your_email_here'
let g:blogger_pass = 'your_blogger_password_here'

VimからBloggerにポストする方法は簡単です。また、Markdown形式にも対応しているので、zencoding-vimを使わなくてもある程度書けると思います。

#投稿したものを編集する
:e blogger:list

#新しく投稿する
:w blogger:create

gist-vim

VimからCodeをGistに投稿してみましょう。そして、それをブログに貼り付けてみます。ただし、公式アプリもそれなりに便利なので、公式アプリの導入も検討してみてはどうでしょう。

公式アプリの導入とgist-vimの動作に必要なアプリの導入

brew install gist

brew install curl

プラグインのインストール

~/.vim/bundle/vundle/test/minirc.vim
Gistにポストする
Bundle 'mattn/gist-vim'

あとは:BundleInstallというVimコマンドを実行してプラグインをインストールします。そして、設定ファイルにアカウント情報を書き込んでいきます。

アカウント情報などの設定(Macの場合)

~/.vimrc
let g:gist_clip_command = 'pbcopy'
let g:gist_detect_filetype = 1
let g:github_user = 'usrename'

必要な設定

必要なファイルを必要な場所に置きます。

mkdir ~/.vim/cookies && touch ~/.vim/cookies/github

Gistにポストしたコードをブログに埋め込むには?

VimFiler

VimFilerとは、Vimで動くファイルマネージャーのことです。brew install mcmcを入れてもいいのですが、Vimの操作に慣れている方は、VimFilerがお勧めです。

~/.vimrc.bundle
"VimFilerと依存関連
Bundle 'Shougo/vimfiler'
Bundle 'Shougo/unite.vim'
Bundle 'Shougo/vimproc'

:BundleInstallを実行します。

~/.vimrc
"VimFilerエクスプローラーの設定
let g:vimfiler_as_default_explorer=1

"VimFilerセーフモードの設定
let g:vimfiler_safe_mode_by_default=0

VimShell

VimShellとは、Vimで動くShellエミュレータです。導入しておくと、開発環境が便利になります。

~/.vimrc.bundle
Bundle 'Shougo/vimshell'
Bundle 'Shougo/vimproc'

コンパイルと必要なファイルの移動

cd ~/.vim/bundle/vimproc/

make -f make_mac.mak

cp vimproc_mac.so ~/.vim/bundle/vimproc/autoload

デバッガなどのインストール

実行可能バイナリを検査するためのツールなどを入れていきます。

brew install binutils

brew install cgdb

VimShellの使用例

Vimを起動し、:VimShellを実行します。

echo "int main(void) {return 0;}" > ~/hello.c

gcc hello.c

gobjdump a.out

cgdb ./a.out

vim-quickrun

vim-quickrunは、Vimで編集中のプログラムの実行結果を確認できるVim Pluginです。

~/.vimrc.bundle
Bundle 'thinca/vim-quickrun'

デフォルトでは、<Leader>rを押すと、実行結果を確認できます。

pkill

プロセスの終了には、通常、PID(プロセスIDのことだと思う)が必要になります。しかし、topコマンドなどを使って、PIDを調べるのも面倒ですので、私は、プロセス名からPIDを検索し、それをkillする方法をよく利用します。pkillを使えば、それが簡単にできます。

brew install pkill

rtorrent

よく容量が大きいisoファイルの配布などには、torrentファイルが使われることがあります。これは、あるファイルをダウンロードしたいという場合に、ユーザー間でファイルの不足分を補う形でダウンロードとアップロードをすることで、人気のあるものほど高速でダウンロードできるというものです。また、ファイルの配布者にとっても負担軽減になるため、広く使われている技術でもあります。

よって、個人的には、人気のある Linux ディストリビューションは、Torrent Clientでダウンロードすることがよくあります。ここでは、そのTorrent Clientの一つであるrtorrentの使い方を紹介します。

ただし、torrentファイルを使用する場合、アップロードも同時に行なってしまうので、ダウンロードするファイルには、細心の注意をはらいましょう。また、アップロードには特定のPortを使用するため、ファイアウォールを一部解除しなければならないことがあります。よって、セキュリティ上も注意が必要です。

brew install rtorrent

使い方は簡単で、^Qで終了です。^Sでスタートとストップです。EnterでModeを切り替えてファイルを選択できます。

なお、ファイルの総容量が大きすぎるため、ファイルが分割されていることがあります。そういったときは、ファイルを結合しましょう。例えば、CentOS-5.8-i386-bin-1of7.iso-7of7.isoがあったとして、その場合は以下のようにします。なお、進行度を表示したい場合はオプションを付けてください。

cat CentOS-5.8-i386-bin-* > CentOS-5.8-i386-bin.iso

VirtualBox

私は、VirtualBoxを使って仮想環境を構築し、複数のデスクトップやサーバーを起動することがよくあります。そんな時、仮想環境を直接操作することが通常ですが、たまにリモート操作したほうが便利なことがあります。そんな時は、リモート操作するために、VirtualBoxのネットワーク設定とSSHの設定が必要になります。ここでは、その設定方法を書いていきたいと思います。

VirtualBoxの初期設定

非常に申し訳ないのですが、VirtualBoxでOSをインストール手順については省略させて頂きます。ここでは、仮想環境にUbuntu12.04をインストールすることで、話を進めていきたいと思います。

VirtualBox上でUbuntuを起動する

VirtualBox上でUbuntuを起動させます。VBoxManageなどのコマンドを使用するといいと思います。

#OSリストの確認
VBoxManage list vms

#VRDP接続を有効にする
VBoxManage modifyvm ubuntu12.04 --vrde on

#ゲストOSの起動
VBoxManage startvm ubuntu12.04

VirtualBoxのネットワーク設定

VirtualBoxホストをリモート操作する場合は、NAT + ポートフォーワーディングまたは、ホストオンリーアダプタの方法が一般的です。ここでは、後者の方法を採用し、設定していきたいと思います。

VirtualBox > 環境設定 > ネットワーク

VirtualBox > Ubuntu > 設定 > ネットワーク

SSHの設定

以下、サーバーがUbuntuであり、クライアントがMacとなります。これを前提に読み進めていただけるとありがたいです。

SSHの接続設定

サーバー側の操作

ifconfig

sudo vi /etc/network/interfaces
/etc/network/interfaces
auto eth1
iface eth1 inet static
        address 192.168.56.2
        netmask 255.255.255.0
        network 192.168.56.0
        broadcast 192.168.56.255
        gateway 192.168.56.1
        up route del default gateway 192.168.56.1
sudo /etc/init.d/networking restart

または

sudo shutdown -r now

sudo apt-get update && sudo apt-get install openssh-server

sudo ufw allow ssh

which ssh-copy-id

クライアント側の操作

sftp 192.168.56.2

>get /usr/bin/ssh-copy-id

>exit

mv ssh-copy-id /usr/local/bin

source .zshrc

ssh-keygen
[保存先を聞かれたら'Enter'を押す。鍵のパスワード設定を聞かれるので入力する。決定したパスワードを再入力する。実行後、秘密鍵と公開鍵が'~/.ssh'以下に保存される]

cd ~/.ssh && mv id_rsa.pub identity.pub

ssh-copy-id 192.168.56.2

ssh 192.168.56.2

SSHの認証設定

sudo vi /etc/ssh/sshd_config
/etc/ssh/sshd_config
#パスワード認証を無効化
PasswordAuthentication no

ドットインストール

ドットインストールとは、無料でプログラミングを学べるサイトのことです。このサイトを利用すると、プログラミングの学習が捗ります。ただし、ここでは、いちいちサイトにアクセスするのも面倒なので、当該サイトに貼り付けてあるYouTube動画をダウンロードして視聴してみたいと思います。

動画のダウンロード

brew install youtube-dl

brew install wget

wget -r http://dotinstall.com/

find ~/dotinstall.com/lessons -name "[0-9]*" | xargs -I{} mv {} ~/dotinstall.com/lessons && cd ~/dotinstall.com/lessons && cat [0-9]* [0-9]* > filename.txt && grep videoId filename.txt > videoid.txt && sed "s|videoId: '|http://jp.youtube.com/watch?v=|" videoid.txt > url.txt && sed "s/',//g" url.txt > url2.txt && youtube-dl -t -a url2.txt

mkdir -p ~/Movie/dt/ && mv *mp4 ~/Movie/dt 

動画の視聴

brew install mplayer

cd ~/Movie/dt

#フォルダ内にあるファイルのパスをmylistに抽出する(ただし、隠しファイルは含まない)
echo alias mylist='find `pwd` -maxdepth 1 -mindepth 1 | grep -v "\/\." > mylist' >> ~/.zshrc

source ~/.zshrc

mplayer -playlist mylist

Mplayerの操作

私は、動画を再生するときは基本的に倍速再生します。なので、]を押して、倍速再生してみます。

Speace //スタートまたは、ストップ

Enter //次へまたは、終了

< //前へ

> //次へ

[ //遅い

] //速い

q //終了

しかし、どうやら音声が高くなりすぎてしまって、他のプレイヤーと比べると、とても聞こえにくいです。

追記
投稿の上限が来たので、これ以降のツールの紹介は、次回になります。よろしくお願いします。