.vimrc・.zshrcの設定

# 更新
- 2016/01/08: .vimrc、.gvimrcを更新

## .vimrcの設定

適当に書いてみました。
とりあえずPython3とC++を書けるようにする感じで。

```vim:.vimrc
" 1. curl https://raw.githubusercontent.com/Shougo/neobundle.vim/master/bin/install.sh | sh && mkdir -p ~/.vim/backup
" 2. cp このファイル ~/.vimrc
" 3. 一旦vim起動してBundleInstallする
" 4. cd ~/.vim/bundle/jedi-vim/ && git submodule update --init
" 5. pip install pep8 pyflakes


scriptencoding utf-8

set nocompatible
set antialias
set autoindent
set ambiwidth=double
set backupcopy=auto
set backupdir=~/.vim/backup
set backspace=indent,eol,start
set backupext=.vimbak
set clipboard=unnamed
set cmdheight=2
set confirm
set cursorcolumn
set cursorline
set encoding=utf-8
set noerrorbells
set expandtab
set fileencoding=utf-8
set guioptions-=r
set guioptions-=R
set guioptions-=l
set guioptions-=L
set guioptions-=b
set ignorecase
set imdisable
set incsearch
set laststatus=2
set list
set listchars=tab:>-,trail:-,extends:>,precedes:<,nbsp:%,eol:↲
set matchpairs+=<:>,":",':'
set mouse=a
set mousemodel=extend
set number
set numberwidth=5
set shell=zsh
set shiftround
set shiftwidth=4
set showcmd
set showmatch
set noshowmode
set smartcase
set smartindent
set softtabstop=4
set statusline=%(%r%t%m%)%<%=%h%w[ch=%B][%l:%c%V][%p%%]
set tabstop=4
set textwidth=0
set title
set ttymouse=xterm2
set visualbell t_vb=
set wildmenu wildmode=list:full
set wrap


" pyenv用PATH設定
if executable("pyenv")
    let $PATH = system("pyenv root")[:-2]."/shims:".$PATH
endif

"---------------------------
" Start Neobundle Settings.
"---------------------------
filetype off
if has('vim_starting')
    if &compatible
        set nocompatible
    endif
    set runtimepath+=~/.vim/bundle/neobundle.vim/
endif
call neobundle#begin(expand('~/.vim/bundle'))

" vimのパッケージマネージャー
NeoBundleFetch 'Shougo/neobundle.vim'

" カッコ補完(<C-H>でキーバインドされてしまうため自前リポジトリで対処)
"NeoBundle 'jiangmiao/auto-pairs'
NeoBundle 'CS-Toku/auto-pairs'

" サブモード作成用
NeoBundle 'kana/vim-submode'

" HTML補完
NeoBundle 'mattn/emmet-vim'

" プログラムを簡単に実行
NeoBundle 'thinca/vim-quickrun'

" vimで非同期実行
NeoBundle 'Shougo/vimproc.vim', {
  \ 'build' : {
  \     'windows' : 'tools\\update-dll-mingw',
  \     'cygwin' : 'make -f make_cygwin.mak',
  \     'mac' : 'make',
  \     'linux' : 'make',
  \     'unix' : 'gmake'
  \    }
  \ }

" 統合ユーザインターフェース
NeoBundle 'Shougo/unite.vim'
" Unite依存
NeoBundle 'Shougo/neomru.vim'

" ファイラー/ファイルサポート
NeoBundle 'Shougo/vimfiler'

" カラースキーム閲覧用
NeoBundle 'unite-colorscheme'

" vimのカラースキーム
NeoBundle 'flazz/vim-colorschemes'

" ディレクトリをツリー表示
NeoBundle 'scrooloose/nerdtree'

" ステータスラインを便利に
NeoBundle 'itchyny/lightline.vim'

" lightlineのカラースキーム
NeoBundle 'cocopon/lightline-hybrid.vim'

" インデントガイド
NeoBundle 'nathanaelkane/vim-indent-guides'

" コメントアウトツール
NeoBundle 'tomtom/tcomment_vim'

" sudoで編集(:e sudo:/etc/passwd)
NeoBundle 'sudo.vim'

" vim用grep
NeoBundle 'grep.vim'

" 「あの」ファイルを開く
NeoBundle 'kana/vim-altr'

" ブラウザで開く関連
NeoBundle 'tyru/open-browser.vim'

" Markdownプレビュー
NeoBundle 'kannokanno/previm'

" 補完
NeoBundle has('lua') ? 'Shougo/neocomplete' : 'Shougo/neocomplcache'

" gitのラッパー
NeoBundle 'tpope/vim-fugitive'

" vim用shell
NeoBundleLazy 'Shougo/vimshell', {
  \ 'depends' : 'Shougo/vimproc.vim',
  \ 'autoload' : {
  \   'commands' : [{ 'name' : 'VimShell', 'complete' : 'customlist,vimshell#complete'},
  \                 'VimShellExecute', 'VimShellInteractive',
  \                 'VimShellTerminal', 'VimShellPop'],
  \   'mappings' : ['<Plug>(vimshell_switch)']
  \ }
  \ }

"-------------------------
" 言語系プラグイン
"-------------------------
" 構文チェック
NeoBundle 'scrooloose/syntastic'
" Python
"" 補完
NeoBundle 'davidhalter/jedi-vim'
" Scala
"" 補完用
NeoBundle 'derekwyatt/vim-scala'
"" yaml用syntax
NeoBundle 'stephpy/vim-yaml'
"" ansible-yaml用syntax
NeoBundle 'chase/vim-ansible-yaml'
"" json用syntax
NeoBundle 'elzr/vim-json'
" C++
"" 構文チェック用
NeoBundleLazy 'vim-jp/cpp-vim', {
            \ 'autoload' : {'filetypes' : 'cpp'}
            \ }
"" pyenv対応
NeoBundleLazy "lambdalisue/vim-pyenv", {
      \ "depends": ['davidhalter/jedi-vim'],
      \ "autoload": {
      \   "filetypes": ["python", "python3"]
      \ }}
"-------------------------
" 言語系プラグイン終わり
"-------------------------

call neobundle#end()
filetype plugin indent on
NeoBundleCheck
""-------------------------
"" End Neobundle Settings.
""-------------------------


" jjでノーマルモードに戻る
inoremap jj <Esc><Esc><Esc>

" 検索時に対象を中央に表示
nnoremap n nzz
nnoremap N Nzz

" カーソル下の単語を検索、中央に表示
nnoremap * *zz
nnoremap # #zz
" カーソル下の単語を検索、中央に表示
nnoremap g* g*zz
nnoremap g# g#zz

" 下へ移動する時に見た目の1行下に移動する
nnoremap j gj
nnoremap k gk
vnoremap j gj
vnoremap k gk

" 対応するカッコへジャンプ
nnoremap <Tab> %
vnoremap <Tab> %

" 以下で使用するキーバインドのため解除
"iunmap <C-H>
inoremap <C-H> <Left>
inoremap <C-j> <Down>
inoremap <C-k> <Up>
inoremap <C-l> <Right>

"-------------------------
" スクリーン系キーバインド
"-------------------------
" 入力時ctl押しながらhjklでカのみは無効
nnoremap s <Nop>
"  ウィンドウを横分割
nnoremap ss :<C-u>sp<CR>
"  ウィンドウを縦分割
nnoremap sv :<C-u>vs<CR>
"  カーソルを移動
nnoremap sj <C-w>j
nnoremap sk <C-w>k
nnoremap sl <C-w>l
nnoremap sh <C-w>h
"  カーソルを次に移動
nnoremap sw <C-w>w
"  ウィンドウを移動
nnoremap sJ <C-w>J
nnoremap sK <C-w>K
nnoremap sL <C-w>L
nnoremap sH <C-w>H
"  ウィンドウを移動(回転？近いウィンドウと反転なきがする)
nnoremap sr <C-w>r
"  タブの作成
nnoremap st :<C-u>tabnew<CR>
"  タブの一覧表示
nnoremap sT :<C-u>Unite tab<CR>
"  タブを移動
nnoremap sn gt
nnoremap sp gT
"  ウィンドウの大きさを揃える
nnoremap s= <C-w>=
nnoremap sO <C-w>=
" 縦横最大化
nnoremap so <C-w>_<C-w>|
" 画面サイズ変更用サブモード(sの後該当ボタン長押しでサイズ変更)
call submode#enter_with('bufmove', 'n', '', 's>', '<C-w>>')
call submode#enter_with('bufmove', 'n', '', 's<', '<C-w><')
call submode#enter_with('bufmove', 'n', '', 's+', '<C-w>+')
call submode#enter_with('bufmove', 'n', '', 's-', '<C-w>-')
call submode#map('bufmove', 'n', '', '>', '<C-w>>')
call submode#map('bufmove', 'n', '', '<', '<C-w><')
call submode#map('bufmove', 'n', '', '+', '<C-w>+')
call submode#map('bufmove', 'n', '', '-', '<C-w>-')
"  開いてたバッファの移動
nnoremap sN :<C-u>bn<CR>
nnoremap sP :<C-u>bp<CR>
"  ウィンドウを閉じる
nnoremap sq :<C-u>q<CR>
"  バッファを閉じる
nnoremap sQ :<C-u>bd<CR>
"  現在のタブで開いたバッファ一覧
nnoremap sb :<C-u>Unite buffer_tab -buffer-name=file<CR>
"  バッファ一覧
nnoremap sB :<C-u>Unite buffer -buffer-name=file<CR>

"-------------------------
" スクリーン系キーバインド：終わり
"-------------------------

" altrプラグイン進むと戻る
nnoremap <Leader>f  <Plug>(altr-forward)
nnoremap <Leader>b  <Plug>(altr-back)

" 全角スペースを　で表示
function! ZenkakuSpace()
  highlight ZenkakuSpace cterm=underline ctermfg=darkgrey gui=underline guifg=darkgrey
endfunction
if has('syntax')
    augroup ZenkakuSpace
        autocmd!
            " ZenkakuSpaceをカラーファイルで設定するなら次の行は削除
        autocmd ColorScheme       * call ZenkakuSpace()
        " 全角スペースのハイライト指定
        autocmd VimEnter,WinEnter * match ZenkakuSpace /　/
    augroup END
    call ZenkakuSpace()
endif


" neocomplete設定
if neobundle#is_installed('neocomplete')
    " Disable AutoComplPop.
    let g:acp_enableAtStartup = 0
    " Use neocomplete.
    let g:neocomplete#enable_at_startup = 1
    " Use smartcase.
    let g:neocomplete#enable_smart_case = 1
    " Set minimum syntax keyword length.
    let g:neocomplete#sources#syntax#min_keyword_length = 3
    let g:neocomplete#lock_buffer_name_pattern = '\*ku\*'
    
    " Define dictionary.
    let g:neocomplete#sources#dictionary#dictionaries = {
        \ 'default' : '',
        \ 'vimshell' : $HOME.'/.vimshell_hist',
        \ 'scheme' : $HOME.'/.gosh_completions'
            \ }
    
    " Define keyword.
    if !exists('g:neocomplete#keyword_patterns')
        let g:neocomplete#keyword_patterns = {}
    endif
    let g:neocomplete#keyword_patterns['default'] = '\h\w*'
    
    " Plugin key-mappings.
    inoremap <expr><C-g>     neocomplete#undo_completion()
    inoremap <expr><C-l>     neocomplete#complete_common_string()
    
    " Recommended key-mappings.
    " <CR>: close popup and save indent.
    inoremap <silent> <CR> <C-r>=<SID>my_cr_function()<CR>
    function! s:my_cr_function()
      return (pumvisible() ? "\<C-y>" : "" ) . "\<CR>"
      " For no inserting <CR> key.
      "return pumvisible() ? "\<C-y>" : "\<CR>"
    endfunction
    " <TAB>: completion.
    inoremap <expr><TAB>  pumvisible() ? "\<C-n>" : "\<TAB>"
    " <BS>: close popup and delete backword char.
    inoremap <expr><BS> neocomplete#smart_close_popup()."\<C-h>"
    " Close popup by <Space>.
    "inoremap <expr><Space> pumvisible() ? "\<C-y>" : "\<Space>"
    
    " AutoComplPop like behavior.
    "let g:neocomplete#enable_auto_select = 1
    
    " Shell like behavior(not recommended).
    "set completeopt+=longest
    "let g:neocomplete#enable_auto_select = 1
    "let g:neocomplete#disable_auto_complete = 1
    "inoremap <expr><TAB>  pumvisible() ? "\<Down>" : "\<C-x>\<C-u>"
    
    " Enable omni completion.
    autocmd FileType css setlocal omnifunc=csscomplete#CompleteCSS
    autocmd FileType html,markdown setlocal omnifunc=htmlcomplete#CompleteTags
    autocmd FileType javascript setlocal omnifunc=javascriptcomplete#CompleteJS
    autocmd FileType python setlocal omnifunc=pythoncomplete#Complete
    autocmd FileType xml setlocal omnifunc=xmlcomplete#CompleteTags
    
    " Enable heavy omni completion.
    if !exists('g:neocomplete#sources#omni#input_patterns')
      let g:neocomplete#sources#omni#input_patterns = {}
    endif
    "let g:neocomplete#sources#omni#input_patterns.php = '[^. \t]->\h\w*\|\h\w*::'
    "let g:neocomplete#sources#omni#input_patterns.c = '[^.[:digit:] *\t]\%(\.\|->\)'
    "let g:neocomplete#sources#omni#input_patterns.cpp = '[^.[:digit:] *\t]\%(\.\|->\)\|\h\w*::'
    
    " For perlomni.vim setting.
    " https://github.com/c9s/perlomni.vim
    let g:neocomplete#sources#omni#input_patterns.perl = '\h\w*->\h\w*\|\h\w*::'
elseif neobundle#is_installed('neocomplcache')
    " neocomplcache用設定
    let g:neocomplcache_enable_at_startup = 1
    let g:neocomplcache_enable_ignore_case = 1
    let g:neocomplcache_enable_smart_case = 1
    if !exists('g:neocomplcache_keyword_patterns')
        let g:neocomplcache_keyword_patterns = {}
    endif
    let g:neocomplcache_keyword_patterns._ = '\h\w*'
    let g:neocomplcache_enable_camel_case_completion = 1
    let g:neocomplcache_enable_underbar_completion = 1
endif
" TABで補完選択
inoremap <expr><TAB> pumvisible() ? "\<C-n>" : "\<TAB>"
inoremap <expr><S-TAB> pumvisible() ? "\<C-p>" : "\<S-TAB>"


" emmetのキーバインドを変更(今はデフォ)
let g:user_emmet_leader_key='<C-y>'

" quickrun設定(bufferが空なら自動で閉じる)
let g:quickrun_config = get(g:, 'quickrun_config', {})
let g:quickrun_config._ = {
      \ 'runner'    : 'vimproc',
      \ 'runner/vimproc/updatetime' : 60,
      \ 'outputter' : 'error',
      \ 'outputter/error/success' : 'buffer',
      \ 'outputter/error/error'   : 'quickfix',
      \ 'outputter/buffer/split'  : ':rightbelow 8sp',
      \ 'outputter/buffer/close_on_empty' : 1,
      \ }
"  qで閉じる
au FileType qf nnoremap <silent><buffer>q :quit<CR>
"  \rで保存して実行
let g:quickrun_no_default_key_mappings = 1
nnoremap \r :write<CR>:QuickRun -mode n<CR>        
xnoremap \r :<C-U>write<CR>gv:QuickRun -mode v<CR> 
"  <C-c>で停止
nnoremap <expr><silent> <C-c> quickrun#is_running() ? quickrun#sweep_sessions() : "\<C-c>"


" lightline Settings
let g:lightline = {
        \'colorscheme': 'hybrid',
        \ 'mode_map': {'c': 'NORMAL'},
        \ 'active': {
        \   'left': [ [ 'mode', 'paste' ], [ 'fugitive', 'filename'] ],
        \   'right': [ [ 'syntastic', 'lineinfo' ],
        \              [ 'percent' ],
        \              [ 'filetype', 'fileencoding', 'pyenv' ] ]
        \ },
        \ 'component_expand':{
        \   'syntastic': 'SyntasticStatuslineFlag'
        \ },
        \ 'component_type':{
        \   'syntastic': 'error'
        \ },
        \ 'component_function': {
        \   'modified': 'MyModified',
        \   'readonly': 'MyReadonly',
        \   'fugitive': 'MyFugitive',
        \   'filename': 'MyFilename',
        \   'fileformat': 'MyFileformat',
        \   'filetype': 'MyFiletype',
        \   'fileencoding': 'MyFileencoding',
        \   'mode': 'MyMode',
        \   'pyenv': 'MyPyenvVersion'
        \ }
        \}

function! MyModified()
  return &ft =~ 'help\|vimfiler\|gundo' ? '' : &modified ? '+' : &modifiable ? '' : '-'
endfunction

function! MyReadonly()
  return &ft !~? 'help\|vimfiler\|gundo' && &readonly ? 'x' : ''
endfunction

function! MyFilename()
  return ('' != MyReadonly() ? MyReadonly() . ' ' : '') .
        \ (&ft == 'vimfiler' ? vimfiler#get_status_string() :
        \  &ft == 'unite' ? unite#get_status_string() :
        \  &ft == 'vimshell' ? vimshell#get_status_string() :
        \ '' != expand('%:t') ? expand('%:t') : '[No Name]') .
        \ ('' != MyModified() ? ' ' . MyModified() : '')
endfunction

function! MyFugitive()
  try
      if &ft !~? 'vimfiler\|gundo' && exists('*fugitive#head')
      return "\u2b60 " . fugitive#head()
    endif
  catch
  endtry
  return ''
endfunction

function! MyFileformat()
  return winwidth(0) > 70 ? &fileformat : ''
endfunction

function! MyFiletype()
  return winwidth(0) > 70 ? (strlen(&filetype) ? &filetype : 'no ft') : ''
endfunction

function! MyFileencoding()
  return winwidth(0) > 70 ? (strlen(&fenc) ? &fenc : &enc) : ''
endfunction

function! MyMode()
return  &ft == 'unite' ? 'Unite' :
        \ &ft == 'vimfiler' ? 'VimFiler' :
        \ &ft == 'vimshell' ? 'VimShell' :
        \ winwidth(0) > 60 ? lightline#mode() : ''
endfunction

function! MyPyenvVersion()
  return '⌘ '.pyenv#info#preset('short')[1:]
endfunction

let g:unite_force_overwrite_statusline = 0
let g:vimfiler_force_overwrite_statusline = 0
let g:vimshell_force_overwrite_statusline = 0

" OpenBrowser設定
let g:netrw_nogx = 1
nmap gx <Plug>(openbrowser-smart-search)
vmap gx <Plug>(openbrowser-smart-search)
nmap gz <Plug>(openbrowser-open)

" Previm設定
augroup PrevimSettings
    autocmd!
    autocmd BufNewFile,BufRead *.{md,mdwn,mkd,mkdn,mark*} set filetype=markdown
augroup END
nnoremap <C-p> :PrevimOpen<CR>


" <Space>キーでプラグイン起動系統のキーバインド
nnoremap <Space> <Nop>
nnoremap <silent> <Space>f :VimFiler<CR>
nnoremap <silent> <Space>t :NERDTreeToggle<CR>
nnoremap <silent> <Space>u :Unite<CR>
"" VimShell系統キーバインド
nnoremap <silent> <Space>v :VimShellCreate<CR>
""" gvimでpython実行するととても重いのでzsh経由。コレだとまだ軽い。
""" 以下5つの設定はどうにかしたい・・・
nnoremap <silent> <Space>s <Nop>
nnoremap <silent> <Space>s<CR> :VimShellInteractive zsh<CR>
nnoremap <silent> <Space>s<Space> :VimShellInteractive<Space>
nnoremap <silent> <Space><Space> :VimShellSendString<CR>
vnoremap <silent> <Space><Space> :VimShellSendString<CR>
nnoremap <silent> <Space>sb :VimShellSendBuffer<Space>


"-------------------------
" 言語系設定
"-------------------------
" C,C++,PythonでのみSyntasticを稼働
let g:syntastic_mode_map = {'mode': 'passive'}
augroup AutoSyntastic
  autocmd!
  autocmd BufWritePost *.c,*.cpp,*.py call s:syntastic()
augroup END
function! s:syntastic()
  SyntasticCheck
  call lightline#update()
endfunction
" Python
"" jediでdocstringは表示しない
autocmd FileType python setlocal completeopt-=preview
"" quickrunのマップと衝突するためコマンド作成
command! -nargs=0 JediRename :call jedi#rename()
let g:jedi#rename_command = ""
"" neocomplete共存設定
autocmd FileType python setlocal omnifunc=jedi#completions
let g:jedi#completions_enabled = 0
let g:jedi#auto_vim_configuration = 0
if !exists('g:neocomplete#force_omni_input_patterns')
        let g:neocomplete#force_omni_input_patterns = {}
endif
let g:neocomplete#force_omni_input_patterns.python = '\h\w*\|[^. \t]\.\w*'
"" syntasticでのチェッカーの指定
let g:syntastic_python_checkers=['pyflakes', 'pep8']
if jedi#init_python()
    function! s:jedi_auto_force_py_version() abort
        let major_version = pyenv#python#get_internal_major_version()
        call jedi#force_py_version(major_version)
    endfunction
    augroup vim-pyenv-custom-augroup
        autocmd! *
        autocmd User vim-pyenv-activate-post call s:jedi_auto_force_py_version()
        autocmd User vim-pyenv-deactivate-post call s:jedi_auto_force_py_version()
    augroup END
endif

" Scala
au BufNewFile,BufRead *.scala setf scala
au BufNewFile,BufRead *.sbt setf scala


" Highlight Settings
syntax enable
colorscheme hybrid
set t_Co=256

hi Normal ctermbg=236 guibg=Gray25
hi LineNr term=reverse ctermfg=10 ctermbg=0 guifg=Green guibg=Gray20
hi CursorLineNr term=reverse ctermbg=240 guibg=Gray25 guifg=Yellow
hi CursorLine term=reverse ctermbg=240 guibg=Gray30
hi CursorColumn term=reverse ctermbg=240 guibg=Gray30
hi Visual term=reverse ctermbg=250 guibg=Gray50

" インデントガイドをオン
let g:indent_guides_enable_on_vim_startup = 1
let g:indent_guides_auto_colors=0
let g:indent_guides_start_level=2
autocmd VimEnter,Colorscheme * :hi IndentGuidesOdd  ctermbg=239 guibg=Gray28
autocmd VimEnter,Colorscheme * :hi IndentGuidesEven ctermbg=241 guibg=Gray32
let g:indent_guides_color_change_percent = 30
let g:indent_guides_guide_size = 1

```

設定に関しては適度に理解しているが、プラグイン周りとカーソル移動、編集のコマンドに関してはほぼ記憶・理解してない状態なので追記していこうと思う。


gvimは.gvimrcの方でカラースキームを指定してやらないと背景がなんでか適応できなかった。
というわけで適度に書きました

```vim:.gvimrc
" Highlight Settings

set vb t_vb=

set imdisable
set guifont=Ricty-RegularForPowerline:h14
" Highlight Settings

syntax enable
colorscheme hybrid

hi Normal guibg=Gray25
hi LineNr guifg=Green guibg=Gray15
hi Cursor guifg=bg guibg=Green gui=NONE
hi CursorIM guifg=NONE guibg=Red gui=NONE
hi CursorLineNr term=reverse ctermbg=242 guifg=Yellow guibg=Gray25
hi CursorLine term=reverse ctermbg=242 guibg=Gray30
hi CursorColumn term=reverse ctermbg=242 guibg=Gray30
hi Visual term=reverse ctermbg=253 guibg=DarkGray
hi StatusLine gui=bold guibg=Green

```
## .zshrcの設定
こちらも適度にしか理解していない。
こっちに関してはそれでいいかなと。

```zsh:.zshrc
# .zshrc file

export TERM=xterm-256color

# HISTORY
HISTFILE=~/.zsh_history
HISTSIZE=1000000
SAVEHIST=1000000


# LANG設定 rootの場合はCに設定
export LANG=ja_JP.UTF-8
case ${UID} in
0)
    LANG=C
    ;;
esac


# キーバインドをVi化
bindkey -v


# プロンプトの設定
autoload -U colors
colors

local p_mark="%B%(?, %F{green}, %F{red})%#%f%b"

if [ -n "$SSH_CONNECTION" ]; then
    PROMPT="%F{green]}[%F{magenta}%n%F{green}@%F{cyan}%m%F{green}:%c]$p_mark"
else
    PROMPT="%F{green}[%c]$p_mark"
fi
PROMPT2="%F{magenta}%_->%f"
RPROMPT="%F{yellow}[%d]%f"
SPROMPT="%F{yellow}%r is correct? [(n)o, (y)es, (a)bort, (e)dit]:%f"



# 補完入力の有効化
autoload -U compinit
compinit


# ls 補完リスト色設定
export LSCOLORS=gxfxcxdhbxegehabahhfhg
export LS_COLORS="di=36;49:ln=35;49:so=32;49:pi=33;47:ex=31;49:bd=34;46:cd=34;47:su=30;41:sg=30;47:tw=37;45:ow=37;46"

zstyle ':completion:*' list-colors 'di=36;49' 'ln=35;49' 'so=32;49' 'pi=33;47' 'ex=31;49' 'bd=34;46' 'cd=34;47' 'su=30;41' 'sg=30;47'  'tw=37;45' 'ow=37;46'


# エイリアス設定
case "${OSTYPE}" in
freebsd*|darwin*)
    alias ls="ls -G -w"
    ;;
linux*)
    alias ls="ls --color"
    ;;
esac

alias la="ls -a"
alias lf="ls -F"
alias ll="ls -l"

alias grep='grep --color'
alias less='less -X -R'

alias vim='/Applications/MacVim.app/Contents/MacOS/mvim'
alias cvim='/Applications/MacVim.app/Contents/MacOS/Vim'

# エイリアスを拡張する(D)
setopt ALIASES

# 以降、定義されたすべての変数は自動的にexportされる
unsetopt ALL_EXPORT
 
# 補完候補など表示する時はその場に表示し、終了時に画面から消す
setopt ALWAYS_LAST_PROMPT

# 補完時に文字列末尾へカーソル移動
setopt ALWAYS_TO_END

# コマンドを終了した順序でヒストリファイルに追加
setopt APPEND_HISTORY

# コマンドがディレクトリの名前の時に自動的にcdコマンドとして実行する
setopt AUTO_CD

# disownコマンドでジョブテーブルから削除されストップしたジョブには自動的に CONT シグナルが送られ、実行するようになる
setopt AUTO_CONTINUE

# 補完のリストアップ
setopt AUTO_LIST

# 2度目の連続する補完の要求で自動的にメニュー補完を使う
setopt AUTO_MENU

# ディレクトリの絶対パスがセットされた変数は、そのディレクトリの名前となる
setopt AUTO_NAME_DIRS

# 変数名が補完され自動的に文字が入力されたあと、次の文字が変数名の直後に来るべきものであるなら自動的に付加された文字が削除され、入力された文字が変数名の直後に来る
setopt AUTO_PARAM_KEYS

# 中味がディレクトリ名である変数を補完すると、末尾がスペースのかわりにスラッシュとなる
setopt AUTO_PARAM_SLASH

# cdすると古いディレクトリがディレクトリスタックに積まれる
setopt AUTO_PUSHD

# 補完の結果として得られる最後の文字がスラッシュで次に入力した文字が単語の区切文字、スラッシュ、もしくはコマンドを終端する文字のとき、そのスラッシュを取り除く
setopt AUTO_REMOVE_SLASH

# サスペンド中のプロセスと同じコマンド名を実行した場合はリジューム
setopt AUTO_RESUME

# ファイル名生成のパターンがフォーマット違反の時、エラーメッセージを表示する
setopt BAD_PATTERN

# cshスタイルのヒストリ拡張を使う '!' 文字を特別に扱う
setopt BANG_HIST

# グロブパターンにおいて、末尾にあって'|'も'('も'~'も含まないならば、修飾子とみなす
unsetopt BARE_GLOB_QUAL

# 曖昧な補完の場合、補完関数が二度連続で呼ばれると自動的に選択肢をリストアップする このオプションは AUTO_LIST よりも強い優先度を持つ
unsetopt BASH_AUTO_LIST

# ZLE のエラー時にビープ音を発する
unsetopt BEEP

# 全てのバックグラウンドジョブを低優先度で実行する
unsetopt BG_NICE

# ブレース内の式が正しくない形式のとき、個々の文字の辞書順リストとなる
unsetopt BRACE_CCL

# 組み込みコマンド echo を、 BSD echo(1) コマンドと互換性のある動作にする
setopt BSD_ECHO

# グロッビング(ファイル名生成)で大文字小文字を区別する
setopt CASE_GLOB

# 16進数を C 言語形式で出力する
setopt C_BASES

# cd コマンドに与えられる引数がディレクトリではなく、スラッシュから開始されない場合には、先頭が'~' で開始されるように拡張される
unsetopt CDABLE_VARS

# パスの一部に'..'が含まれているもの、つまりひとつ前のディレクトリ名をキャンセルしたものに移動するとき、実際のディレクトリ名に移動する
unsetopt CHASE_DOTS

# ディレクトリ移動時のシンボリックリンクを真の値に変換する
unsetopt CHASE_LINKS

# バックグラウンドジョブとサスペンドしたジョブのステータスが、ジョブ制御をしたシェルの終了前に報告される
setopt CHECK_JOBS

# '>'のリダイレクションで存在するファイルを指定した場合に削除し、'>>' で存在しないファイルを指定した場合に新しいファイルを作成する
unsetopt CLOBBER

# 補完を行う前に内部的にコマンド行のエイリアスを置き換える作業を抑制する
unsetopt COMPLETE_ALIASES

# カーソルの位置に補なうことで単語を完成させようとする
setopt COMPLETE_IN_WORD

# コマンドのスペルの訂正を試みる
setopt CORRECT

# コマンド行の全ての引数に対してスペルミスの訂正を試みる
unsetopt CORRECT_ALL

# イベント識別子なしのヒストリ参照はつねに直前のコマンドとみなされる
setopt CSH_JUNKIE_HISTORY

# ループの中味として'do list; done'ではなく'list; end'の形式を許可する
setopt CSH_JUNKIE_LOOPS

# シングルクォートやダブルクォートの文字列のルールを、 csh のものと一致させる
unsetopt CSH_JUNKIE_QUOTES

# コマンドなしにリダイレクトを実行したとき、 NULLCMD および READNULLCMD の値を使わない
unsetopt CSH_NULLCMD

# ファイル名生成のパターンがマッチしないとき、引数リストからそのパターンを取り除く コマンド中の全てのパターンがマッチしない時でなければエラーを出力しない
unsetopt CSH_NULL_GLOB

# CORRECT、CORRECTALLの両オプション、およびspell-wordエディタコマンドでのスペルミス推定で、Dvorak配列を使う
unsetopt DVORAK

# ZLE がロードされていてこのオプションがオンになっているのは'bindkey -e'と等価に扱われ、 VI オプションが解除される
unsetopt EMACS

# = のファイル名生成が利用される
setopt EQUALS

# あるコマンドが非ゼロの終了コードとなったとき、このオプションがセットされていると、ZERRトラップを実行して終了する
unsetopt ERR_EXIT

# あるコマンドが非ゼロの終了コードとなったとき、そのコマンドの外の関数から脱出する
unsetopt ERR_RETURN

# コマンドを実行する このオプションなしには、コマンドが読み込まれて構文エラーをチェックうするだけで、実行されない
setopt EXEC

# '#' '~' '^' といった文字をファイル名生成のパターンの一部として扱う
unsetopt EXTENDED_GLOB

# コマンドの開始時のタイムスタンプ(エポックからの秒数)と実行時間(秒単位)をヒストリに含める
setopt EXTENDED_HISTORY

# このオプションが解除されていると、シェルエディタにおけるスタート／ストップ文字(通常は ^S/^Q) によるフロー制御の出力が無効化される
setopt FLOW_CONTROL

# シェル関数やスクリプトの source 実行時に、 $0 を一時的にその関数／スクリプト名にセットする
setopt FUNCTION_ARGZERO

# ファイル名生成(グロッビング)を実行する
setopt GLOB

# このオプションがセットされていると、 declare、float、integer、readonly、および typeset(ただし local は除く)に -x フラグが与えられると、 -g フラグもオンになる
setopt GLOBAL_EXPORT

# このオプションが解除されると、起動時に /etc/zprofile、/etc/zshrc、/etc/zlogin、/etc/zlogout は実行されなくなる
setopt GLOBAL_RCS

# このオプションがセットされると、スカラ変数代入の形式の'name=pattern'の右辺でもファイル名生成が実行される
unsetopt GLOB_ASSIGN

# 現在の単語がグロブパターンのとき、その結果の単語すべてを挿入するのではなく、 MENU_COMPLETE のように補完にマッチしたものを生成し、サイクルする
setopt GLOB_COMPLETE

# '.' で開始するファイル名にマッチさせるとき、先頭に明示的に '.' を指定する必要がなくなる
unsetopt GLOB_DOTS

# 変数の結果を置換して得られた文字を、ファイル拡張やファイル名生成として扱う
setopt GLOB_SUBST

# 個々のコマンドの位置を、最初に実行したときに記憶する
setopt HASH_CMDS

# コマンド名がハッシュされるときに、それを含むディレクトリもハッシュする
setopt HASH_DIRS

# コマンド補完が行われたとき、コマンドパスが最初にハッシュされるようにする
setopt HASH_LIST_ALL

# ヒストリにおいて、出力リダイレクションに '|' を加える
setopt HIST_ALLOW_CLOBBER

# 存在しないヒストリエントリにアクセスしようとしたときにビープを出す
unsetopt HIST_BEEP

# 現在のコマンド行をヒストリに追加することによって、内部のヒストリの末尾が削られるときに、ユニークなものの前に、全く同じイベントがヒストリ中に存在する、最も古いものが削除される
unsetopt HIST_EXPIRE_DUPS_FIRST

# ラインエディタでヒストリのエントリを探索するときに、一度見たことのあるエントリと同じものは、それが連続していなければ表示しない
unsetopt HIST_FIND_NO_DUPS

# コマンド行からヒストリリストに追加されたものが古いものと全く同じ場合に、古いものをリストから削除する
unsetopt HIST_IGNORE_ALL_DUPS

# 直前のイベントと全く同じものの場合、コマンド行をヒストリリストに加えない
unsetopt HIST_IGNORE_DUPS

# 行の最初の文字がスペースの場合、もしくはスペースから開始される拡張エイリアスの場合に、コマンド行をヒストリリストから削除する
unsetopt HIST_IGNORE_SPACE

# ヒストリリストから関数定義を除く
unsetopt HIST_NO_FUNCTIONS

# history (fc -l) コマンドをヒストリリストから取り除く
unsetopt HIST_NO_STORE

# ヒストリリストに追加するときに、各コマンド行の余計な空白を取り除く
setopt HIST_REDUCE_BLANKS

# ヒストリファイルに書き出すときに、古いコマンドと同じものは無視する
unsetopt HIST_SAVE_NO_DUPS

# ヒストリ拡張から行に持ってきた場合、それを直接は実行しない ヒストリ拡張を行い、行をバッファに読み込む
setopt HIST_VERIFY

# シェル終了時に、起動中のジョブに HUP シグナルを送る
setopt HUP

# ブレース拡張を行わない
unsetopt IGNORE_BRACES

# ファイル終端で終了しない exit か logout の実行を要求する
unsetopt IGNORE_EOF

# このオプションがセットされると、APPEND_HISTORYのように、新しいヒストリ行は$HISTFILEにインクリメンタルに(入力されるとすぐに)追加されるようになる
unsetopt INC_APPEND_HISTORY

# 対話的なシェルであることを意味する
# unsetopt INTERACTIVE

# 対話的なシェルでもコメントを有効にする
setopt INTERACTIVE_COMMENTS

# ksh っぽい配列の扱いをできるだけエミュレートする
unsetopt KSH_ARRAYS

# ksh の関数オートロードをエミュレートする
unsetopt KSH_AUTOLOAD

# パターンマッチにおいて、カッコの解釈は直前の '@'、'*'、'+'、'?'、'!' によって異なる
unsetopt KSH_GLOB

# オプション設定の表示方法を変える
unsetopt KSH_OPTION_PRINT

# typeset 系のコマンド、 declare、 export、 float、 integer、 local、 readonly などの引数の処理方法を変える
unsetopt KSH_TYPESET

# コマンド行から入力したプレフィクスに曖昧さがないとき、補完リストを表示することなく補完する
setopt LIST_AMBIGUOUS

# 曖昧な補完の時にビープ音を発する
setopt LIST_BEEP

# 異なる幅のカラムを使うことで、補完リストを小さく(なるべく少ない行数に)しようとする
setopt LIST_PACKED

# 補完リストを水平にソートする
setopt LIST_ROWS_FIRST

# 補完対象となるファイルをリストアップするとき、ファイルの末尾に識別マークをつけて種類を提示する
setopt LIST_TYPES

# このオプションがセットされると、シェル関数の終了時に、すべての(このオプションを含む)オプションは復帰される
unsetopt LOCAL_OPTIONS

# このオプションがセットされていて、関数内でシグナルのトラップが設定されているとき、関数の終了時にそのシグナルの元のトラップに復帰する
unsetopt LOCAL_TRAPS

# ログインシェルであることを示す
# setopt LOGIN

# ジョブリストがデフォルトでロングフォーマットになる
unsetopt LONG_LIST_JOBS

# コマンド名のあとに表われる、クォートされていない'anything=expression' という形式の引数は、 expression のところがパラメタ割り当てであるかのように、ファイル名拡張を行う
unsetopt MAGIC_EQUAL_SUBST

# シェルが最後にチェックした後でメールファイルがアクセスされていると、警告メッセージを表示する
unsetopt MAIL_WARNING

# ファイル名生成(グロッビング)の結果のディレクトリ名に対して、 '/' を末尾に追加する
unsetopt MARK_DIRS

# 曖昧な補完の際に、可能なリストを表示してビープを鳴らすのではなく、最初にマッチしたものをいきなり挿入する
unsetopt MENU_COMPLETE

# ジョブ制御を可能にする。対話的なシェルではデフォルトでセットされる
# setopt MONITOR

# 複数のリダイレクションが行われるときに、暗黙に tee や cat が実行される
setopt MULTIOS

# ファイル名生成のパターンにマッチするものがない場合、引数リストをそのままにするのではなく、エラーを表示する
setopt NOMATCH

# バックグラウンドジョブの状態の報告を、次のプロンプトを表示するまで待つのではなく、即座に行う
setopt NOTIFY

# ファイル名生成のパターンにマッチするものがないときは、エラーを報告するのではなく、その引数リストのパターンを除去する
unsetopt NULL_GLOB

# ファイル名生成パターンから数値ファイル名がマッチしたら、ファイル名を辞書順ではなく数値順にソートする
unsetopt NUMERIC_GLOB_SORT

# 0から開始される整数は、 IEEE Std 1003.2-1992 (ISO 994502:1993) に従って8進数として解釈する
unsetopt OCTAL_ZEROES

# ラインエディタをオーバストライクモードで起動する
unsetopt OVERSTRIKE

# コマンド名にスラッシュが含まれていても、パス探索を行う
unsetopt PATH_DIRS

# このオプションがセットされているとき、組み込みコマンド command によってシェルの組み込みコマンドを実行できる
setopt POSIX_BUILTINS

# 補完リストその他でも8ビット文字を表示する
unsetopt PRINT_EIGHT_BIT

# セットされているとき、 '!' をプロンプト拡張で特殊文字として扱う
setopt PROMPT_BANG

# ラインエディタのプロンプトを表示する直前に復帰文字を出力する
setopt PROMPT_CR

# セットされているとき、 '%' をプロンプト拡張で特殊文字として扱う
setopt PROMPT_PERCENT

# セットされているとき、プロンプトで変数拡張、コマンド置換、計算拡張が実行される
setopt PROMPT_SUBST

# ディレクトリスタックに同じディレクトリの複数のコピーを push しない
unsetopt PUSHD_IGNORE_DUPS

# ディレクトリスタックに数を与えるとき、 '+' と '-' の意味を交換する
unsetopt PUSHD_MINUS

# pushd と popd で、ディレクトリスタックを表示しない
unsetopt PUSHD_SILENT

# pushd に引数を与えないと、 'pushd $HOME' として動作する
unsetopt PUSHD_TO_HOME

# 'foo${xx}bar' の形式で配列を置換するとき、たとえば xx の値が (a b c) だったとすると
unsetopt RC_EXPAND_PARAM

# シングルクォートで囲まれた文字列内部でシングルクォート自身を表現する時に '''' による表現を許可する
unsetopt RC_QUOTES

# 起動時に /etc/zshenv を読み込んだあとで、 .zshnv、/etc/zprofile、.zprofile、/etc/zshrc、.zshrc、/etc/zlogin、.zlogin、.zlogout など、 'Files' の章で記述されたファイルを読み込む
setopt RCS

# 補完において、曖昧さがあっても正確なマッチを認識する
unsetopt REC_EXACT

# 制限モードになる
# setopt RESTRICTED

# 'rm *' や 'rm path/*' を実行しようとする前にユーザに確認を求めない
unsetopt RM_STAR_SILENT

# 'rm *' や 'rm path/*' の実行の前のユーザへの確認時に、10秒間だけ待ち、その間のいかなる入力も無視する
unsetopt RM_STAR_WAIT

# このオプションはヒストリファイルから新しいコマンドをインポートするのと、入力したコマンドをヒストリファイルに書き出すのの両方を行う
unsetopt SHARE_HISTORY

# ファイル名拡張(~拡張など)は、変数拡張やコマンド置換、計算拡張やブレース拡張の前に行う
unsetopt SH_FILE_EXPANSION

# 変数やコマンド置換結果得られたグロッビングにおいて、またシェルがパターンを受け付ける他の場所のいくつかで、 '('、'|'、')' および '<' の特殊な意味を無効化する
unsetopt SH_GLOB

# 変数やコマンド置換結果得られたグロッビングにおいて、またシェルがパターンを受け付ける他の場所のいくつかで、 '('、'|'、')' および '<' の特殊な意味を無効化する 
# setopt SHIN_STDIN

# リダイレクションの差異に NULLCMD や READNULLCMD の値を使うのではなく、 ':' コマンドを使う
unsetopt SH_NULLCMD

# このオプションがセットされると、シェルは単一文字オプション(set や setopt で利用される)を ksh のように解釈する
unsetopt SH_OPTION_LETTERS

# for、repeat、select、if、function などの短形式を許す
setopt SHORT_LOOPS

# クォートされていない変数拡張が行われたあとで、フィールド分割を行う
unsetopt SH_WORD_SPLIT

# シェルが標準入力から読み込んでいるとき、1つのコマンドを実行したら終了する。また、コマンド行から INTERACTIVE オプションが明示的に指定されない限り、シェルは対話的でなくなる
unsetopt SINGLE_COMMAND

# 複数行ではなく、単一コマンド行編集にする
unsetopt SINGLE_LINE_ZLE

# 行がバッククォートで終端し、この行に奇数個のバッククォートがあるとき、末尾のバッククォートを無視する
unsetopt SUN_KEYBOARD_HACK

# コマンド行を受け入れたときに、右プロンプトを削除する
unsetopt TRANSIENT_RPROMPT

# 解除されていると、オプションなしで 'typeset' 系のコマンドを実行したり、割当てる値なしに既存の変数名のリストを渡したりすると、その変数の値を表示する
unsetopt TYPESET_SILENT

# 置換するときに、内容のない変数を空白として扱う
setopt UNSET

# 入力された行を表示する
unsetopt VERBOSE

# ZLE がロードされていると、このオプションをセットするのは 'bindkey -v' と同じ効果を持つ
setopt VI

# 実行されるコマンドと引数を表示する
unsetopt XTRACE

# zsh line editor を利用する
setopt ZLE

```

こんな感じ。