Cygwinで遊びたいっ
Cygwinで遊びたい季節ですよね(どういう前ふりなの……?)
いますぐコマンドプロンプトを捨てて、Cygwinを使うべき10+の理由 - ブックマクロ開発に
上記エントリに影響されて、早速Cygwin環境を構築したのでその覚書を。
構築環境はWindows7 Professional 64bit版です。
ダウンロード先
Cygwin本家
本文中のsetup.exeをクリックするとダウンロードが始まります。
とりあえず、Dドライブ直下にインストールしました。
これは自分の環境に合わせて適当にしましょう。
インストールするファイル類
最小構成インストールでも問題ありませんが、以下のソフトを入れておくと捗ります。
- vim
- zsh
- git
- gcc4
- wget
- bzip2
- perl
- ruby
- python
- php
apt-cygのインストール
wget http://apt-cyg.googlecode.com/svn/trunk/apt-cyg chmod +x apt-cyg mv apt-cyg /bin/apt-cyg
このエントリではapt-cygの出番が殆ど無いけれども、これがあれば毎度毎度setup.exeを起動しなくて良くなるので、非常に大事。
minttyの設定
右クリックからOptionsを選択すしましょう
LooksのTransparencyはMed.かHigh.がお勧めです。個人的にはHigh.が好き。
対応していればGlassもいいかもしれません。
CursorはデフォルトではLineになっていますが、僕はBlockが好きなので、それにしました。
Textは後でも変えられるのでそのままに。
Localeは、ja_JP、Charcter setはUTF-8にしました。
後は特に変更した箇所はありません。
一つ前のエントリに書いたように、minttyの起動オプションを適当に設定しましょう。最大化素敵。
細かい設定等
.screenrcはこんな感じ。 escapeがC-aでもC-zでもC-tでも無く、C-kな僕は異端派。
#UTF-8を使う defutf8 on defencoding utf8 encoding utf-8 utf-8 #escape escape ^Kk startup_message off autodetach on vbell off caption always "%-w%10L>%{=b bw}%n %t%{-}%+w%-0=" hardstatus alwayslastline "%H%=%Y/%m/%d %02c" shelltitle "$ |shell" shell $SHELL
zshrcはこんな感じ
# 文字コードの設定 export LANG=ja_JP.UTF-8 # ヒストリの設定 HISTFILE=~/.histfile HISTSIZE=10000 SAVEHIST=10000 autoload -Uz compinit compinit autoload colors colors alias ls='ls -pla' # like vim bindkey -v # history search 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 # aut cd setopt auto_cd setopt auto_pushd #環境変数 export CYGWIN=tty
.minttyrcはこんな感じ。
フォントはMigu 2Mにしてますが、ここはお好みで。これをそのままコピペするとうぎゃーってなっても責任取れませんw
BoldAsFont=no FontHeight=14 Columns=80 Rows=20 Locale=ja_JP Charset=UTF-8 Transparency=medium CursorType=block Font=Migu 2M BoldAsColour=no RightClickAction=paste CursorColour=0,255,0 IMECursorColour=255,0,0 Term=xterm-256color FontHeight=14 Columns=80 Rows=20 Locale=ja_JP Charset=UTF-8 Transparency=medium CursorType=block Font=Migu 2M BoldAsColour=no RightClickAction=paste CursorColour=0,255,0 IMECursorColour=255,0,0 Term=xterm-256color
.vimrcはこんな感じ
"" " For Cygwin Version _vimrc " Since 2011.11.24 """""""""""""""""""""""""""""" "内部エンコーディングの設定 """""""""""""""""""""""""""""" "if has('gui_running') && !has('unix') set encoding=utf-8 "endif "scriptencoding cp932 "filetype off filetype on filetype indent on syntax enable "行番号表示 set number "バックアップは邪魔臭いので要らない set nobackup "クリップボードへコピー set clipboard=unnamed "for vundler set nocompatible " be iMproved filetype plugin indent off " required! if has('vim_starting') set runtimepath+=~/.vim/bundle/neobundle.vim/ call neobundle#rc(expand('~/.vim/bundle/')) endif NeoBundle 'Shougo/neocomplcache' NeoBundle 'Shougo/vimshell' NeoBundle 'Shougo/unite.vim' NeoBundle 'Shougo/git-vim' NeoBundle 'Shougo/vimproc' NeoBundle 'Shougo/vimfiler' NeoBundle 'tpope/vim-surround' NeoBundle 'thinca/vim-quickrun' NeoBundle 'mattn/zencoding-vim' NeoBundle 'mattn/webapi-vim' NeoBundle 'kana/vim-smartchr' NeoBundle 'koron/chalice' filetype plugin indent on " required! "For vimfiler let g:vimfiler_as_default_explorer = 1 "Zen Coding用 let g:user_zen_settings = { \'lang': "ja" \} "for smart char "inoremap <expr> = smartchr#one_of(' = ', ' == ', ' === ', '=') " 演算子の間に空白を入れる "inoremap <buffer><expr> < search('^#include\%#', 'bcn')? ' <': smartchr#one_of(' < ', ' << ', '<') "inoremap <buffer><expr> > search('^#include <.*\%#', 'bcn')? '>': smartchr#one_of(' > ', ' >> ', '>') "inoremap <buffer><expr> + smartchr#one_of(' + ', '++', '+') "inoremap <buffer><expr> - smartchr#one_of(' - ', '--', '-') "inoremap <buffer><expr> / smartchr#one_of(' / ', '// ', '/') " *はポインタで使うので、空白はいれない "inoremap <buffer><expr> & smartchr#one_of(' & ', ' && ', '&') "inoremap <buffer><expr> % smartchr#one_of(' % ', '%') "inoremap <buffer><expr> <Bar> smartchr#one_of(' <Bar> ', ' <Bar><Bar> ', '<Bar>') "inoremap <buffer><expr> , smartchr#one_of(', ', ',') " 3項演算子の場合は、後ろのみ空白を入れる "inoremap <buffer><expr> ? smartchr#one_of('? ', '?') "inoremap <buffer><expr> : smartchr#one_of(': ', '::', ':') " =の場合、単純な代入や比較演算子として入力する場合は前後にスペースをいれる。 " 複合演算代入としての入力の場合は、直前のスペースを削除して=を入力 inoremap <expr> = search('\(&\<Bar><Bar>\<Bar>+\<Bar>-\<Bar>/\<Bar>>\<Bar><\) \%#', 'bcn')? '<bs>= ' \ : search('\(*\<Bar>!\)\%#', 'bcn') ? '= ' \ : smartchr#one_of(' = ', ' == ', '=') "neocomplcache用 let g:neocomplcache_enable_at_startup = 1 "" reloadable vimrc nnoremap <silent> ,r :<C-u>source $MYVIMRC<CR> "" for unite " 編集モードで開始する let g:unite_enable_start_insert=0 "バッファ一覧 nnoremap <silent> ,ub :<C-u>Unite buffer<CR> "ファイル一覧 nnoremap <silent> ,uf :<C-u>UniteWithBufferDir -buffer-name=files file<CR> "レジスタ一覧 nnoremap <silent> ,ur :<C-u>Unite -buffer-name=register register<CR> "最近使用したファイル一覧 nnoremap <silent> ,um :<C-u>Unite file_mru<CR> "常用セット nnoremap <silent> ,uu :<C-u>Unite buffer file_mru<CR> "全部乗せ nnoremap <silent> ,ua :<C-u>UniteWithBufferDir -buffer-name=files buffer file_mru bookmark file<CR> "ウインドウを横に分割して開く au FileType unite nnoremap <silent> <buffer> <expr> <C-j> unite#do_action('split') au FileType unite inoremap <silent> <buffer> <expr> <C-j> unite#do_action('split') "ウインドウを縦に分割して開く au FileType unite nnoremap <silent> <buffer> <expr> <C-l> unite#do_action('split') au FileType unite inoremap <silent> <buffer> <expr> <C-l> unite#do_action('split') "ESCキーを2回押すと終了する "au FileType unite nnoremap <silent> <ESC><ESC> q "au FileType unite inoremap <silent> <ESC><ESC> q "新しいウインドウで開く au FileType unite nnoremap <silent> <buffer> <expr> <C-t> unite#do_action('tabopen') au FileType unite inoremap <silent> <buffer> <expr> <C-t> unite#do_action('tabopen') "バッファ系 au BufNewFile,BufRead * set tabstop=4 shiftwidth=4 au BufNewFile,BufRead *.rhtml set tabstop=2 shiftwidth=2 au BufNewFile,BufRead *.rb set tabstop=2 shiftwidth=2 au BufNewFile,BufRead *.yml set tabstop=2 shiftwidth=2 au BufNewFile,BufRead *.js set tabstop=4 shiftwidth=4 au BufNewFile,BufRead *.css set tabstop=2 shiftwidth=2 au BufNewFile,BufRead *.html set tabstop=2 shiftwidth=2 " for python autocmd FileType python setl autoindent autocmd FileType python setl smartindent cinwords=if,elif,else,for,while,try,except,finally,def,class autocmd FileType python setl tabstop=8 expandtab shiftwidth=4 softtabstop=4 " replce nnoremap <silent> cy ce<C-r>0<Esc>:let@/=@1<CR>:noh<CR> vnoremap <silent> cy c<C-r>0<Esc>:let@/=@1<CR>:noh<CR> nnoremap <silent> ciy ciw<C-r>0<Esc>:let@/=@1<CR>:noh<CR> " F5 command history " F6 search history nnoremap <F5> <Esc>q: nnoremap <F6> <Esc>q/ " ignore q: q/ nnoremap q: <Nop> nnoremap q/ <Nop> nnoremap q? <Nop> "ゴミ削除 function! RTrim() let s:cursor = getpos(".") %s/\s\+$//e call setpos(".", s:cursor) endfunction autocmd BufWritePre *.php,*.rb,*.js,*.bat,*.py call RTrim() autocmd QuickfixCmdPost vimgrep cwin " コメントアウト用 " http://vim-users.jp/2011/03/hack205/をそのままコピペ " Comment or uncomment lines from mark a to mark b. function! CommentMark(docomment, a, b) if !exists('b:comment') let b:comment = CommentStr() . ' ' endif if a:docomment exe "normal! '" . a:a . "_\<C-V>'" . a:b . 'I' . b:comment else exe "'".a:a.",'".a:b . 's/^\(\s*\)' . escape(b:comment,'/') . '/\1/e' endif endfunction " Comment lines in marks set by g@ operator. function! DoCommentOp(type) call CommentMark(1, '[', ']') endfunction " Uncomment lines in marks set by g@ operator. function! UnCommentOp(type) call CommentMark(0, '[', ']') endfunction " Return string used to comment line for current filetype. function! CommentStr() if &ft == 'cpp' || &ft == 'java' || &ft == 'javascript' return '//' elseif &ft == 'vim' return '"' elseif &ft == 'python' || &ft == 'perl' || &ft == 'sh' || &ft == 'R' || &ft == 'ruby' return '#' elseif &ft == 'lisp' return ';' endif return '' endfunction nnoremap <Leader>c <Esc>:set opfunc=DoCommentOp<CR>g@ nnoremap <Leader>C <Esc>:set opfunc=UnCommentOp<CR>g@ vnoremap <Leader>c <Esc>:call CommentMark(1,'<','>')<CR> vnoremap <Leader>C <Esc>:call CommentMark(0,'<','>')<CR> "カレント変更 command! -nargs=? -complete=dir -bang CD call s:ChangeCurrentDir('<args>', '<bang>') function! s:ChangeCurrentDir(directory, bang) if a:directory == '' lcd %:p:h else execute 'lcd' . a:directory endif if a:bang == '' pwd endif endfunction " Change current directory. nnoremap <silent> <Space>cd :<C-u>CD<CR> "URL encode and decode command! -nargs=0 -range URLEncode :<line1>,<line2>call <SID>URLEncode() command! -nargs=0 -range URLDecode :<line1>,<line2>call <SID>URLDecode() "from chalice.vim function! s:URLEncode() let l:line = getline('.') let l:encoded = AL_urlencode(l:line) call setline('.', l:encoded) endfunction "from chalice.vim function! s:URLDecode() let l:line = getline('.') let l:encoded = AL_urldecode(l:line) call setline('.', l:encoded) endfunction " colors colorscheme desert hi CursorIM guifg=black guibg=red gui=NONE ctermfg=black ctermbg=white cterm=reverse
圧倒的なVim力の差……。
メイン環境なので仕方がありませんね。
ちなみにvimは厳密な手順で設定する必要があります。
$ mkdir -p ~/.vim/bundle $ git clone https://github.com/Shougo/neobundle.vim ~/.vim/bundle/neobundle.vim
上記の魔法のコマンドを実行してから、vimを起動。
:NeoBundleInstall を実行。
$ cd ~/.vim/bundle/vimproc $ make -f make_cygwin.mak
と実行して、cygwin用のvimproc.dllをコンパイル。
そうしてようやくunite.vimが使えるようになります。
unite.vimはホント素晴らしい。
感想
- minttyが思った以上に綺麗。
- apt-cygで全て捗る
- zencoding.vimは便利
- UTF-8いいねぇ。
- VimFilerに感動。
- vimprocに感動。
- githubが無いと死んじゃう
以上です。何かの参考にしていただければ幸いです
コメント
コメントを投稿