#はじめに
Command Line
(コマンドライン)で使用しているTool
(ツール)を簡単にではありますが、まとめてみようと思います。前回の続きです。私が知らない便利ツールはまだまだたくさんありますので、ここに掲載されているもの以外で便利なものがあれば、ぜひ教えてください。
Command Line で使用しているツールまとめ vol.1
Command Line で使用しているツールまとめ vol.2
この記事に貼り付けてあるリンクは、キーワードに関連する適切な場所へと誘導してくれます。非常に有効なので、ぜひ参照してみてください。
また、私は基本的にパソコンのことは何もわかっていないので、記事内には誤りを含む可能性があります。よって、できる限り自分の環境を把握した上で、適時読み換えてもらえればと思います。特に、設定ファイルの場所については気をつけてください。また、Git
やHomebrew
、MacPort
の導入説明などは省略していますので、注意が必要です。
#zsh
##zshのPromptをカスタマイズする
###環境説明
Prompt
(プロンプト)とは、いわゆる外観のことです。Terminal
(ターミナル)の外観をカスタマイズするには、Terminal
そのものの設定やShell
(シェル)、Virtual
(バーチャル)、Editor
(エディタ)の設定ファイルに書くことで、実現できます。ここで、それぞれについて私が使用しているTool
を明示して、zshのPromptをカスタマイズする
の説明に移りたいと思います。
OS ='Mac'
Terminal = 'iTerm2'
Shell = 'zsh'
Editor = 'Vim'
Virtual = 'tmux'
###Prompt
zsh
のPromptの設定については、clear-code/zsh.dがとても参考になります。設定ファイルに日本語で設定方法が詳しく書き込んであるからです。
###Setting File
### PROMPT# {{{
# https://github.com/clear-code/zsh.d/
setopt prompt_subst
setopt prompt_percent
setopt transient_rprompt
color256()
{
local red=$1; shift
local green=$2; shift
local blue=$3; shift
echo -n $[$red * 36 + $green * 6 + $blue + 16]
}
fg256()
{
echo -n $'\e[38;5;'$(color256 "$@")"m"
}
bg256()
{
echo -n $'\e[48;5;'$(color256 "$@")"m"
}
zstyle ':vcs_info:*' max-exports 3
zstyle ':vcs_info:hg:*' get-revision true # hg で check-for-changes を有効にするには
zstyle ':vcs_info:hg:*' use-simple true # この2つの設定が必要
autoload -Uz is-at-least
zstyle ':vcs_info:git:*' check-for-changes true
zstyle ':vcs_info:git:*' stagedstr "⚡" # 適当な文字列に変更する
zstyle ':vcs_info:git:*' unstagedstr "±" # 適当の文字列に変更する
# Gitブランチ名や作業状態を表示する
zstyle ':vcs_info:git:*' formats '%K{green}%F{black}⮀%k%f%{%F{white}%K{green}%} %s %{%k%f%}%K{blue}%F{green}⮀%k%f%{%F{white}%K{blue}%} %b %{%k%f%}%K{black}%F{blue}⮀%k%f%{%F{white}%K{black}%} %c%u %{%k%f%}'
autoload -Uz vcs_info
# プロンプトの左
prompt_bar_left_self="%{%F{white}%K{blue}%} %n%{%k%f%}%{%F{white}%K{blue}%}@%{%k%f%}%{%F{white}%K{blue}%}%m %{%k%f%}%{%B%F{blue}%K{blue}%}%{%b%f%k%}%K{cyan}%F{blue}⮀%k%f%{%B%F{white}%K{cyan}%} [%~] %{%k%f%b%}%{%k%f%}%K{red}%F{cyan}⮀%k%f%(?.%F{white}%K{red}%} COMP %k%f.%B%K{red}%F{red}%} ERROR %b%k%f)%{%K{green}%F{red}⮀%k%f%F{white}%K{green}%} -%h %{%k%f%}%K{green}%F{white}⮂%k%f"
prompt_bar_left="${prompt_bar_left_self} ${prompt_bar_left_status} ${prompt_bar_left_date}"
# プロンプトの左下
prompt_left='%{%F{white}%K{black}%} $SHELL %{%k%f%}%{%K{white}%F{black}⮀%k%f%B%F{black}%K{white}%} %# %{%b%k%f%f%}%K{black}%F{white}⮀%k%f > '
count_prompt_characters()
{
print -n -P -- "$1" | sed -e $'s/\e\[[0-9;]*m//g' | wc -m | sed -e 's/ //g'
}
update_prompt()
{
local bar_left_length=$(count_prompt_characters "$prompt_bar_left")
local bar_rest_length=$[COLUMNS - bar_left_length]
local bar_left="$prompt_bar_left"
local bar_right_without_path="${prompt_bar_right:s/%d//}"
local bar_right_without_path_length=$(count_prompt_characters "$bar_right_without_path")
local max_path_length=$[bar_rest_length - bar_right_without_path_length]
bar_right=${prompt_bar_right:s/%d/%(C,%${max_path_length}<...<%d%<<,)/}
bar_right="%${bar_rest_length}<<${separator}${bar_right}%<<"
PROMPT="${bar_left}${bar_right}"$'\n'"${prompt_left}"
# プロンプトの右下
RPROMPT="%K{white}%F{black}⮀%k%f%{%F{black}%K{white}%} %l %K{black}%F{white}⮀%k%f%{%k%f%}%{%F{white}%K{black}%} $LANG %{%k%f%}%K{black}%F{white}⮂%k%f"
case "$TERM_PROGRAM" in
Apple_Terminal)
RPROMPT="${RPROMPT}"
;;
esac
LANG=C vcs_info >&/dev/null
if [ -n "$vcs_info_msg_0_" ]; then
RPROMPT="${vcs_info_msg_0_}${RPROMPT}"
fi
}
precmd_functions=($precmd_functions update_prompt)
# }}}
###tmuxの自動起動
私はtmux
を起動することが多いので、Terminal Appを起動すると同時に、tmux
を自動的に起動するようにしています。
## tmux自動起動
# http://d.hatena.ne.jp/tyru/20100828/run_tmux_or_screen_at_shell_startup
is_screen_running() {
# tscreen also uses this varariable.
[ ! -z "$WINDOW" ]
}
is_tmux_runnning() {
[ ! -z "$TMUX" ]
}
is_screen_or_tmux_running() {
is_screen_running || is_tmux_runnning
}
shell_has_started_interactively() {
[ ! -z "$PS1" ]
}
resolve_alias() {
cmd="$1"
while \
whence "$cmd" >/dev/null 2>/dev/null \
&& [ "$(whence "$cmd")" != "$cmd" ]
do
cmd=$(whence "$cmd")
done
echo "$cmd"
}
if ! is_screen_or_tmux_running && shell_has_started_interactively; then
for cmd in tmux tscreen screen; do
if whence $cmd >/dev/null 2>/dev/null; then
$(resolve_alias "$cmd")
break
fi
done
fi
#tmux
##tmuxのPromptをカスタマイズする
###tmux-powerline
tmux-powerlineというものを使うことで、tmux
のPromptは簡単にカスタマイズできます。
mkdir ~/dotfiles/ && cd ~/dotfiles/
git clone https://github.com/jedipunkz/tmux-powerline.git
sudo port install bash
### tmux-prompt# {{{
# https://github.com/jedipunkz/tmux-powerline
# http://d.hatena.ne.jp/yonchu/20120414/1334422075
# tmux-powerline
set-option -g status on
set-option -g status-interval 2
set-option -g status-utf8 on
# set-option -g status-justify "centre"
set-option -g status-left-length 80
set-option -g status-right-length 90
set-option -g status-left "#(~/dotfiles/tmux-powerline/status-left.sh)#[bg=red]#[fg=black]⮀#[bg=red]#[fg=white] mem #(used-mem) %% #[bg=black]#[fg=red]⮀"
set-option -g status-right "#(~/dotfiles/tmux-powerline/status-right.sh)"
# 文字色と背景色
set -g status-fg white
set -g status-bg black
# 256色ターミナル
set-option -g default-terminal "screen-256color"
# P-rで再起動
bind r source-file ~/.tmux.conf; display-message "Reload Config!!"
# }}}
ただし、上では、used-mem
というシェルスクリプトを使って、メモリの使用率を表示するようにしてます。これは、よんちゅBlog版プロンプトのものを使用します。
また、tmux-powerline/status-left.sh
とtmux-powerline/status-right.sh
も多少カスタマイズしています。これらのファイルを編集することで、容易に独自のカスタマイズが反映されるようになっています。
カスタマイズ方法は以下のようになります。自分がカスタマイズしたものを表示してもいいのですが、途中で切れそうで怖い(投稿制限のため)。
# カスタマイズの一例
declare -A uptime
uptime+=(["script"]="${segments_path}/uptime.sh") # tmux-powerline/segments/ にあるスクリプトを指定します。 `uptime.sh`
uptime+=(["foreground"]="colour255") # フォントカラーを指定します。 `colour255`
uptime+=(["background"]="colour37") # バックグラウンドカラーを指定します。 `colour37`
uptime+=(["separator"]="${separator_right_thin}") # 表示する矢印パターンを指定します。 `separator_right_thin`
register_segment "uptime" # ここをコメントアウトすると、無効にできます。
天気は、Google
がAPIを変更したようで、Error
(エラー)が出ます。また、ここで紹介しているtmux-powerline
は無線接続をするMacBookAir
などのLAN IP Address
(ローカルIPアドレス)を取得するように原作者以外の方が改善されたものを使っています。
#Vim
##VimにPowerlineを入れる
Vim
Plugin
(プラグイン)には、Powerlineというものがあり、このPluginを導入することで、Vim
のステータスラインがとてもカッコよくなります。
git clone https://github.com/gmarik/vundle.git ~/.vim/bundle/vundle
vim ~/.vim/bundle/vundle/test/minirc.vim
set nocompatible
syntax on
filetype off
set rtp+=~/.vim/bundle/vundle/
call vundle#rc()
Bundle 'gmarik/vundle'
" ステータスラインをカッコよくする
Bundle 'Lokaltog/vim-powerline'
filetype plugin indent on
あとは、:BundleInstall
とすれば、Pluginがインストールされます。なお、プラグインのアップデートは、以下の様にしてalias
(エイリアス)を設定しておくと便利です。
echo "alias bi!='vim +BundleInstall! +qall'" >> ~/.zshrc && exec $SHELL
#iTerm2
##iTerm2によるPromptの微調整
上で紹介したPromptの表示には、iTerm2
などのTerminalにより微調整が必要になってくる場合があります。
また、fillchars
によりフォントにパッチを当てる必要も出てきます。
sudo port install fontforge
fontforge -script /path/to/fontpatcher MyFontFile.ttf
##使用しているフォント
私は、Rictyというフォントを使用しています。
git clone https://github.com/yascentur/Ricty.git
cd Ricty
brew install fontforge
wget http://levien.com/type/myfonts/Inconsolata.otf
w3m http://mix-mplus-ipa.sourceforge.jp/download.html
('Migu 1M'をダウンロードします。)
unzip migu-1m-20120411-2.zip
sh ricty_generator.sh Inconsolata.otf migu-1m-regular.ttf migu-1m-bold.ttf
cp -f Ricty*.ttf ~/Library/fonts
#Blogger
私は、Blogger
というGoogleのブログサービスでブログをやっています。そこで、いろいろな操作を自動化しているのですが、参考までに設定しているエイリアスなどを紹介できたらと思います。
ドットインストールのレッスンを開始する
ドットインストール
とは、プログラミングが動画で学習できるサイトのことです。ブログをやるには、HTML
やCSS
の知識が必要らしいので、まずは、それらをドットインストールで学習してみようかなと思いました。動画はYouTube
にアップロードされているので、ファイルとしてローカルに保存したほうが何かと扱いやすい思いましたので、この度、ローカルなレッスン環境を整えてみることにしました。
sudo port install youtube-dl wget mplayer
mkdir -p ~/Movies/dt/ && cd ~/Movies/dt/ && wget -r http://dotinstall.com/lessons
#!/bin/zsh
until cd ~/Movies/dt/dotinstall.com/lessons/"$1" && touch test.mp4 test.part && rm *.mp4 *.part && 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 -A -t -a url2.txt && mkdir -p ~/Movies/dt/"$1" && mv *.mp4 ~/Movies/dt/"$1" && cd ~/Movies/dt/"$1" && find `pwd` -maxdepth 1 -mindepth 1 | grep -v "\/\." > mylist && mplayer -playlist mylist -x 680 -y 360 -geometry +1+40
do
echo "ダウンロードが失敗しました。もう一度ダウンロードします。終了する場合は、Ctrl+Cを押してください。"
done
## ドットインストールで学習する
# help:lessonコマンドで学習したいレッスンを選び、クリップボードにコピーします。Vimを閉じると、選択したレッスンがダウンロードされます。
# 開始したいレッスンを表示する
alias lesson-ls='cd ~/Movies/dt/ && vim lesson.txt'
# 開始したいレッスンをダウンロードする
alias lesson-dl='~/Movies/dt/lesson-dl'
# レッスンを選択し、ダウンロード、再生する
alias lesson='lesson-ls && pbpaste | xargs ./lesson-dl'
##Bloggerでブログを始めよう
ファイルを作成したり、記事をポストしたり、画像をアップロードする作業は、定型的な作業ですので、自動で行うのが望ましいですね。以下、Bloggerでブログをやる際に便利なalias
(エイリアス)やToolを紹介していきたいと思います。
sudo port install googlecl imagemagick exiftool wkhtmltoimage
## Blogger
# Picasaに画像をアップロードする
# help:まずは、アップロードする画像を圧縮しています。次に、EXIF情報を削除し、アップロードを実行します。その後、画像があるURLを一覧で表示します。なお、アップロード後は画像を削除するように設定していますので注意が必要です。
alias picasa='cd ~/Pictures/picasa/ && mogrify -quality 75 *.png && exiftool -overwrite_original -all= ~/Pictures/picasa && touch ~/Pictures/picasa/test.html && rm ~/Pictures/picasa/*.html && google picasa post -n "picasa" ~/Pictures/picasa/*.png && rm ~/Pictures/picasa/*.png && google picasa list -n "picasa" --delimiter " " > ~/Pictures/picasa/img_link.html && vim -c "e ~/Pictures/picasa/img_link.html" +/http'
# YouTubeに動画をアップロードする
# help:"~/Movies/youtube/"にある.mp4をYouTubeにUpladeします。その後、動画があるURLを一覧で表示します。なお、アップロード後は動画を削除するように設定していますので注意が必要です。
alias youtube_post='touch ~/Movies/youtube/test.html && rm ~/Movies/youtube/*.html && google youtube post --category People ~/Movies/youtube/*.mp4 && rm ~/Movies/youtube/*.mp4 && google youtube list --delimiter " " > ~/Movies/youtube/url.html && vim ~/Movies/youtube/url.html'
# アイキャッチ画像を取得する
# help:アイキャッチ画像を簡単に使えるようにしています。
# おすすめのアイキャッチ画像を紹介したページをダウンロードして表示する
alias blogicat='cd ~/blog/ && touch blogicat.test && rm blogicat* && curl -o blogicat.html http://mba-hack.blogspot.jp/2012/08/blogicat.html && wkhtmltoimage http://mba-hack.blogspot.jp/2012/08/blogicat.html blogicat.jpg'
# ダウンロードしたページを検索する
alias blogicat1='cd ~/blog/ && display blogicat.jpg & vim blogicat.html'
# 記事を書いて、Bloggerにポストする
# help:記事を書いて、それを保存し、「タイトル タグ」をクリップボードに保存して終了すれば、自動でBloggerにポストしてくれます。なお、個人的な事情によりまずは使用したいアイキャッチ画像を選択するようにしています。アイキャッチ画像を使用したい人は、`blogicat &&'を外してください。
alias blogger='blogicat1 && cd ~/blog/ && touch blogpost.test.html && rm blogpost* && vim blogpost.html && pbpaste | xargs ./blogger'
Bloggerにポストするblogger
コマンドを使いたい場合は、以下のシェルスクリプトを作成し、指定の場所に置いてください。
mkdir ~/blog/ && cd ~/blog/ && vim blogger
chmod +x blogger
#!/bin/zsh
google blogger post --blog "ブログタイトル" --title "$1" --tags "$2" ~/blog/blogpost.html && google blogger --blog "ブログタイトル" list --delimiter " " > ~/blog/mba_hack_list.html && vim -c "e ~/blog/mba_hack_list.html" +/http && rm ~/blog/mba_hack_list.html
なお、URLを開くには、Vim Plugin
があると便利です。これでURL上でgx
を押せば、当該URLがブラウザで開きます。
Bundle 'tyru/open-browser.vim'
" gx を押してカーソル下のURLを開くようにする
" http://vim-users.jp/2011/08/hack225/
let g:netrw_nogx = 1 " disable netrw's gx mapping.
nmap gx <Plug>(openbrowser-smart-search)
vmap gx <Plug>(openbrowser-smart-search)
##HTMLなどの編集に便利なvimrcの設定例
" ### プラグイン bundle"{{{
filetype off
set rtp+=~/.vim/bundle/vundle/
call vundle#rc()
" プラグイン管理
Bundle 'gmarik/vundle'
"Bundle 'Shougo/neobundle.vim'
Bundle 'YankRing.vim'
Bundle 'Shougo/neocomplcache'
Bundle 'Shougo/neocomplcache-snippets-complete'
Bundle 'Smooth-Scroll'
Bundle 'smartword'
Bundle 'thinca/vim-quickrun'
Bundle 'tpope/vim-markdown'
Bundle 'Shougo/unite.vim'
Bundle 'mrtazz/simplenote.vim'
Bundle 'yuratomo/w3m.vim'
Bundle 'Shougo/vimfiler'
Bundle 'mattn/zencoding-vim'
Bundle 'mattn/excitetranslate-vim'
filetype plugin indent on"}}}
"### プラグイン設定 plugin"{{{1
"## str2htmlentity.vim "{{{2
"" 範囲指定し sx でHTMLの特殊文字を変換する
" http://www.serendip.ws/resource/str2htmlentity.vim
vmap <silent> sx :Str2HtmlEntity<cr>
vmap <silent> sr :Entity2HtmlString<cr>
"}}}
"}}}
"### 基本設定 setting"{{{
" :CopyCmdOutput でコマンド欄をクリップボードへコピー
" http://d.hatena.ne.jp/hide04/20111223/1324621495
func! s:func_copy_cmd_output(cmd)
redir @*>
silent execute a:cmd
redir END
endfunc
command! -nargs=1 -complete=command CopyCmdOutput call
<SID>func_copy_cmd_output(<q-args>)
" F5 でHTMLのプレビュー for Safari
" http://vim.wikia.com/wiki/Preview_current_HTML_file
nnoremap <F5> :!open -a Safari %<CR><CR>
" foldmethod の折りたたみ
set foldmethod=marker
" カッコ内に自動的に移動すし、カッコを補完すし、カッコを範囲指定する。
" http://d.hatena.ne.jp/spiritloose/20061113/1163401194
inoremap { {}<LEFT>
inoremap [ []<LEFT>
inoremap ( ()<LEFT>
inoremap " ""<LEFT>
inoremap ' ''<LEFT>
vnoremap { "zdi^V{<C-R>z}<ESC>
vnoremap [ "zdi^V[<C-R>z]<ESC>
vnoremap ( "zdi^V(<C-R>z)<ESC>
vnoremap " "zdi^V"<C-R>z^V"<ESC>
vnoremap ' "zdi'<C-R>z'<ESC>
"}}}
#最後に
投稿の上限がきそうなので、今回はココら辺で。最後に、今回は、主に、ブログに関連する内容になったので、ブログをやっている人は、以下の企画にぜひ参加してほしいと思います。
動画でブログを更新する時の様子を解説していますので、文章よりも分かりやすいかと思います。
私がブログを書くときに使っているツール #blogvideo9
次回はこの続きからになりそうです。よろしくお願いします。