Nexus7のAndroid Terminal Emulatorでzsh,vim,tmuxの簡易カスタマイズをしてみた

Firefox Mobile ちょっとだけカスタマイズしてみました。
photo credit: Johan Larsson

WAN経由からのファイル共有

パソコン:Dropboxに設定ファイルサンプルをコピーし、 タブレット:アストロファイルマネージャーでファイルをローカルに保存します。

ちなみに、自分の場合は、設定ファイルは、項目別に小分けしていますので、必要な物を以下のように取り込みます。

cat /storage/emulated/0/dotfiles/sample/zsh_prompt >> ~/.zshrc


設定ファイル各種

最初なので、程々に設定を取り込みました。ただ、いくつか不都合もあったため、適時修正しながらですが。



LANG=ja_JP.UTF-8
LC_CTYPE=ja_JP.UTF-8
LC_ALL=ja_JP.UTF-8

if [ "$TERM" = "screen" ]; then
        chpwd () { echo -n " _`dirs` \\" }
        preexec() {
                # see [zsh-workers:13180]
                # http://www.zsh.org/mla/workers/2000/msg03993.html
                emulate -L zsh
                local -a cmd; cmd=(${(z)2})
                case $cmd[1] in
                        fg)
                                if (( $#cmd == 1 )); then
                                        cmd=(builtin jobs -l %+)
                                else
                                        cmd=(builtin jobs -l $cmd[2])
                                fi
                                ;;
                        %*)
                                cmd=(builtin jobs -l $cmd[1])
                                ;;
                        cd)
                                if (( $#cmd == 2)); then
                                        cmd[1]=$cmd[2]
                                fi
                                ;;
                        *)
                                echo -n " k$cmd[1]:t \\"
                                return
                                ;;
                esac

                local -A jt; jt=(${(kv)jobtexts})

                $cmd >>(read num rest
                        cmd=(${(z)${(e):-\$jt$num}})
                        echo -n " k$cmd[1]:t \\") 2>/dev/null
        }
        chpwd
fi

#if [ "$TERM" = "screen" ]; then
#      precmd(){
#              screen -X title $(basename $(print -P "%~"))
#     TITLE=`print -P $USER@%m on tty%l: %~`
#     echo -n "\e]2;$TITLE\a"
#              }
#fi

# dabbrev
HARDCOPYFILE=$HOME/tmp/screen-hardcopy
touch $HARDCOPYFILE

dabbrev-complete () {
        local reply lines=80 # 80行分
        screen -X eval "hardcopy -h $HARDCOPYFILE"
        reply=($(sed '/^$/d' $HARDCOPYFILE | sed '$ d' | tail -$lines))
        compadd - "${reply[@]%[*/=@|]}"
}

zle -C dabbrev-complete menu-complete dabbrev-complete
bindkey '^o' dabbrev-complete
bindkey '^o^_' reverse-menu-complete

#alias w3m='LC_MESSAGES=ja w3m -O UTF-8 -bookmark /sdcard/dropbox/share/bookmark.html'
alias w3m='LC_MESSAGES=ja w3m -O UTF-8'
alias vi=vim
alias tmux="SHELL=$RBOX/bin/zsh tmux -S $HOME/tmp/tmux.socket"

LC_MESSAGES=ja
#カーソルキー上下で、ヒストリを検索できるようになる。
#bindkey " [A" history-beginning-search-backward
#bindkey " [B" history-beginning-search-forward
setopt prompt_subst
PROMPT='%~%% '
zstyle ':completion:*:default' menu select=1
setopt print_eight_bit
setopt auto_cd
setopt auto_pushd
setopt correct
setopt list_packed
fpath=($RBOX/share/zsh/4.3.17/functions $fpath)
autoload -U compinit
compinit -u
## Command history configuration
#
HISTFILE=~/.zsh_history
HISTSIZE=50000
SAVEHIST=50000
setopt hist_ignore_dups     # ignore duplication command history list
setopt share_history        # share command history data
bindkey -v
# historical backward/forward search with linehead string binded to ^P/^N
autoload history-search-end
zle -N history-beginning-search-backward-end history-search-end
zle -N history-beginning-search-forward-end history-search-end
bindkey "^P" history-beginning-search-backward-end
bindkey "^N" history-beginning-search-forward-end
alias fd='"$RBOX"/FD-3.00j/fd; export FDEXITDIR=`cat ~/.fd_exitdir`;cd "$FDEXITDIR";'
cd
export SCREENDIR=$HOME/.screen

# cdとlsの自動化
# http://qiita.com/items/e3c85fbe0fc4b939d0e2
alias ls='ls -a'
setopt auto_cd
function chpwd() { ls }

# ^で上の階層へ移動
# http://sho.tdiary.net/20060927.html
function cdup() {
echo
cd ..
zle reset-prompt
}
zle -N cdup
bindkey '\^' cdup

#Prompt
PROMPT="%{%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{black}%F{white} %k%f%{%B%F{white}%K{cyan}%}  [%~]  %{%k%f%b%}%{%k%f%}%K{black}%F{white} %k%f%(?.%F{white}%K{red}%}  COMP  %k%f.%B%K{red}%F{red}%}  ERROR  %b%k%f)%{%K{black}%F{white} %k%f%F{white}%K{green}%}  -%h  %{%k%f%}%K{black}%F{white} > %k%f "

RPROMPT="%k%f%{%k%f%}%{%F{black}%K{white}%}  $LANG  %"

#alias
alias zs='vim ~/.zshrc'
alias zr='source ~/.zshrc'
alias vs='vim ~/.vimrc'
alias ts='vim ~/.tmux.conf'
alias t='tmux'
#TMUX Terminal Multiplexr Config..

#Make CTRL-a the default Command key
set -g prefix C-a

#This means CTRL-a CTRL-a switches to next window
bind-key C-a last-window

# Start numbering at 1
set -g base-index 1

#Set up some more rememberable split pane functions..
#unbind %
bind H split-window -h
bind - split-window -v

# Set status bar
set -g status-bg black
set -g status-fg white
set -g status-interval 3
set -g status-left-length 80
set -g status-left ' #[bg=yellow] [tmux] #[bg=black] #[bg=blue] SPI: #S #P #I #[bg=black] #[bg=green] #W #H #[bg=black] #[bg=cyan] #F'

# Highlight active window
set-window-option -g window-status-current-bg red

#Set the right side of status bar
set -g status-right "#[bg=white]#[fg=black] %X %a %x #[bg=black] "

#Auto set window title
setw -g automatic-rename
# http://mba-hack.blogspot.jp/2012/07/tmuxvi.html

# ペイン終了
bind g kill-pane

# ウィンドウ終了
bind K kill-window

# ペインの移動1(Vim風にする)
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R

# 設定リロード
bind r source-file ~/.tmux.conf
" vim:set ts=8 sts=2 sw=2 tw=0: (この行に関しては:help modelineを参照)
set encoding=utf-8
" 文字コードの自動認識
if &encoding !=# 'utf-8'
  set encoding=japan
  set fileencoding=japan
endif
if has('iconv')
  let s:enc_euc = 'euc-jp'
  let s:enc_jis = 'iso-2022-jp'
" iconvがeucJP-msに対応しているかをチェック
  if iconv("\x87\x64\x87\x6a", 'cp932', 'eucjp-ms') ==# "\xad\xc5\xad\xcb"
    let s:enc_euc = 'eucjp-ms'
    let s:enc_jis = 'iso-2022-jp-3'
" iconvがJISX0213に対応しているかをチェック
  elseif iconv("\x87\x64\x87\x6a", 'cp932', 'euc-jisx0213') ==# "\xad\xc5\xad\xcb"
    let s:enc_euc = 'euc-jisx0213'
    let s:enc_jis = 'iso-2022-jp-3'
  endif
" fileencodingsを構築
  if &encoding ==# 'utf-8'
    let s:fileencodings_default = &fileencodings
    let &fileencodings = s:enc_jis .','. s:enc_euc .',cp932'
    let &fileencodings = &fileencodings .','. s:fileencodings_default
    unlet s:fileencodings_default
  else
    let &fileencodings = &fileencodings .','. s:enc_jis
    set fileencodings+=utf-8,ucs-2le,ucs-2utf-16le
    if &encoding =~# '^\(euc-jp\|euc-jisx0213\|eucjp-ms\)$'
      set fileencodings+=cp932
      set fileencodings-=euc-jp
      set fileencodings-=euc-jisx0213
      set fileencodings-=eucjp-ms
      let &encoding = s:enc_euc
      let &fileencoding = s:enc_euc
    else
      let &fileencodings = &fileencodings .','. s:enc_euc
    endif
  endif
" 定数を処分
  unlet s:enc_euc
  unlet s:enc_jis
endif
" 日本語を含まない場合は fileencoding に encoding を使うようにする
  if has('autocmd')
   function! AU_ReCheck_FENC()
   if &fileencoding =~# 'iso-2022-jp' && search("[^\x01-\x7e]", 'n') == 0
     let &fileencoding=&encoding
   endif
endfunction
autocmd BufReadPost * call AU_ReCheck_FENC()
  endif
" 改行コードの自動認識
  set fileformats=unix,dos,mac
" □とか○の文字があってもカーソル位置がずれないようにする
  if exists('&ambiwidth')
    set ambiwidth=double
  endif

"---------------------------------------------------------------------------
" サイトローカルな設定($VIM/vimrc_local.vim)があれば読み込む。読み込んだ後に
" 変数g:vimrc_local_finishに非0な値が設定されていた場合には、それ以上の設定
" ファイルの読込を中止する。
if 1 && filereadable($VIM . '/vimrc_local.vim')
  unlet! g:vimrc_local_finish
  source $VIM/vimrc_local.vim
  if exists('g:vimrc_local_finish') && g:vimrc_local_finish != 0
    finish
  endif
endif

"---------------------------------------------------------------------------
" ユーザ優先設定($HOME/.vimrc_first.vim)があれば読み込む。読み込んだ後に変数
" g:vimrc_first_finishに非0な値が設定されていた場合には、それ以上の設定ファ
" イルの読込を中止する。
if 0 && exists('$HOME') && filereadable($HOME . '/.vimrc_first.vim')
  unlet! g:vimrc_first_finish
  source $HOME/.vimrc_first.vim
  if exists('g:vimrc_first_finish') && g:vimrc_first_finish != 0
    finish
  endif
endif

"---------------------------------------------------------------------------
" 日本語対応のための設定:
"
" ファイルを読込む時にトライする文字エンコードの順序を確定する。漢字コード自
" 動判別機能を利用する場合には別途iconv.dllが必要。iconv.dllについては
" README_j.txtを参照。ユーティリティスクリプトを読み込むことで設定される。
"source $VIM/encode_japan.vim
" メッセージを日本語にする (Windowsでは自動的に判断・設定されている)
if !(has('win32') || has('mac')) && has('multi_lang')
  if !exists('$LANG') || $LANG.'X' ==# 'X'
    if !exists('$LC_CTYPE') || $LC_CTYPE.'X' ==# 'X'
"      language ctype ja_JP.eucJP
    endif
    if !exists('$LC_MESSAGES') || $LC_MESSAGES.'X' ==# 'X'
"      language messages ja_JP.eucJP
    endif
  endif
endif
" MacOS Xメニューの日本語化 (メニュー表示前に行なう必要がある)
if has('mac')
  set langmenu=japanese
endif
" 日本語入力用のkeymapの設定例 (コメントアウト)
if has('keymap')
  " ローマ字仮名のkeymap
  "silent! set keymap=japanese
  "set iminsert=0 imsearch=0
endif
" 非GUI日本語コンソールを使っている場合の設定
if !has('gui_running') && &encoding != 'cp932' && &term == 'win32'
  set termencoding=cp932
endif

"---------------------------------------------------------------------------
" メニューファイルが存在しない場合は予め'guioptions'を調整しておく
if 1 && !filereadable($VIMRUNTIME . '/menu.vim') && has('gui_running')
  set guioptions+=M
endif

"---------------------------------------------------------------------------
" Bram氏の提供する設定例をインクルード (別ファイル:vimrc_example.vim)。これ
" 以前にg:no_vimrc_exampleに非0な値を設定しておけばインクルードはしない。
if 1 && (!exists('g:no_vimrc_example') || g:no_vimrc_example == 0)
  source $VIMRUNTIME/vimrc_example.vim
endif

"---------------------------------------------------------------------------
" 検索の挙動に関する設定:
"
" 検索時に大文字小文字を無視 (noignorecase:無視しない)
set ignorecase
" 大文字小文字の両方が含まれている場合は大文字小文字を区別
set smartcase

"---------------------------------------------------------------------------
" 編集に関する設定:
"
" タブの画面上での幅
set tabstop=8
" タブをスペースに展開しない (expandtab:展開する)
set noexpandtab
" 自動的にインデントする (noautoindent:インデントしない)
set autoindent
" バックスペースでインデントや改行を削除できるようにする
set backspace=2
" 検索時にファイルの最後まで行ったら最初に戻る (nowrapscan:戻らない)
set wrapscan
" 括弧入力時に対応する括弧を表示 (noshowmatch:表示しない)
set showmatch
" コマンドライン補完するときに強化されたものを使う(参照 :help wildmenu)
set wildmenu
" テキスト挿入中の自動折り返しを日本語に対応させる
set formatoptions+=mM
" 日本語整形スクリプト(by. 西岡拓洋さん)用の設定
let format_allow_over_tw = 1  " ぶら下り可能幅

"---------------------------------------------------------------------------
" GUI固有ではない画面表示の設定:
"
" 行番号を非表示 (number:表示)
set nonumber
" ルーラーを表示 (noruler:非表示)
set ruler
" タブや改行を表示 (list:表示)
set nolist
" どの文字でタブや改行を表示するかを設定
"set listchars=tab:>-,extends:<,trail:-,eol:<
" 長い行を折り返して表示 (nowrap:折り返さない)
set wrap
" 常にステータス行を表示 (詳細は:he laststatus)
set laststatus=1
" コマンドラインの高さ (Windows用gvim使用時はgvimrcを編集すること)
set cmdheight=1
" コマンドをステータス行に表示
set showcmd
" タイトルを表示
set title
" 画面を黒地に白にする (次行の先頭の " を削除すれば有効になる)
"colorscheme evening " (Windows用gvim使用時はgvimrcを編集すること)
"---------------------------------------------------------------------------
" ファイル操作に関する設定:
"
" バックアップファイルを作成しない (次行の先頭の " を削除すれば有効になる)
set nobackup
"---------------------------------------------------------------------------
" ファイル名に大文字小文字の区別がないシステム用の設定:
"   (例: DOS/Windows/MacOS)
" if filereadable($VIM . '/vimrc') && filereadable($VIM . '/ViMrC')
  " tagsファイルの重複防止
  set tags=./tags,tags
"endif

"---------------------------------------------------------------------------
" コンソールでのカラー表示のための設定(暫定的にUNIX専用)
"if has('unix') && !has('gui_running')
"  let uname = system('uname')
"  if uname =~? "linux"
"    set term=builtin_linux
"  elseif uname =~? "freebsd"
"    set term=builtin_cons25
"  elseif uname =~? "Darwin"
"    set term=beos-ansi
"  else
"    set term=builtin_xterm
"  endif
"  unlet uname
"endif

"---------------------------------------------------------------------------
" コンソール版で環境変数$DISPLAYが設定されていると起動が遅くなる件へ対応
if !has('gui_running') && has('xterm_clipboard')
  set clipboard=exclude:cons\\\|linux\\\|cygwin\\\|rxvt\\\|screen
endif

"---------------------------------------------------------------------------
" プラットホーム依存の特別な設定

" WinではPATHに$VIMが含まれていないときにexeを見つけ出せないので修正
if has('win32') && $PATH !~? '\(^\|;\)' . escape($VIM, '\\') . '\(;\|$\)'
  let $PATH = $VIM . ';' . $PATH
endif

if has('mac')
  " Macではデフォルトの'iskeyword'がcp932に対応しきれていないので修正
  set iskeyword=@,48-57,_,128-167,224-235
endif

set nobackup
set vb t_vb=
set showcmd
set laststatus=2
set statusline=%<%f\ %m%r%h%w%{'['.(&fenc!=''?&fenc:&enc).']['.&ff.']'}%=%l,%c%V%8P
syntax on
let $LANG='ja'
filetype on
filetype indent on
filetype plugin on
nnoremap <Space> jzz
nnoremap <S-Space> kzz

" Disable input methods

"カーソルを表示行で移動する。物理行移動は<C-n>,<C-p>
nnoremap j  gj
nnoremap k  gk
nnoremap gj j
nnoremap gk k
nnoremap 0  g0
nnoremap g0 0
nnoremap $  g$
nnoremap g$ $

vnoremap j  gj
vnoremap k  gk
vnoremap gj j
vnoremap gk k
vnoremap 0  g0
vnoremap g0 0
vnoremap $  g$
vnoremap g$ $

source $VIMRUNTIME/delmenu.vim
source $VIMRUNTIME/menu.vim
let $LANG='ja_JP.UTF-8'
" http://qiita.com/items/14389dbaaa43d25f3254

" insertモードから抜ける
inoremap <silent> jj <ESC>
""inoremap <silent> <C-j> j
""inoremap <silent> kk <ESC>
""inoremap <silent> <C-k> k

" 行頭・行末移動方向をキーの相対位置にあわせる
nnoremap 0 $
nnoremap 1 0

" 挿入モードでのカーソル移動
inoremap <C-j> <Down>
inoremap <C-k> <Up>
inoremap <C-h> <Left>
inoremap <C-l> <Right>

" カーソル前の文字削除
inoremap <silent> <C-h> <C-g>u<C-h>
" カーソル後の文字削除
inoremap <silent> <C-d> <Del>
" カーソルから行頭まで削除
inoremap <silent> <C-d>e <Esc>lc^
" カーソルから行末まで削除
inoremap <silent> <C-d>0 <Esc>lc$
" カーソルから行頭までヤンク
inoremap <silent> <C-y>e <Esc>ly0<Insert>
" カーソルから行末までヤンク
inoremap <silent> <C-y>0 <Esc>ly$<Insert>

" 引用符, 括弧の設定
inoremap {{ {}<Left>
inoremap [[ []<Left>
inoremap (( ()<Left>
inoremap "" ""<Left>
inoremap '' ''<Left>
inoremap <> <><Left>


その他

壁紙を設定してなかったので、設定してみました。

ホーム画面でなにもないところを長押し!!



不都合の報告

不都合というよりか単に私の知識不足の問題ですが。

1. tmuxのステータスラインにおいて、 #(command)を書いても、コマンド結果の1行目が表示されない。

2. tmuxのペインを縦に分割しようとすると、Emulatorアプリが落ちる (現在、Nexus7を操るのに、MBAのキーボードを使用していますが、"|"を入力できないため、"%"を復活させたり、"H"に変更したりしている。画面は横に固定して使用)