vimの導入から各種設定

インストール

% sudo port install vim

プラグインとかを放り込む.vimディレクトリを作る

% mkdir ~/.vim

プラグインを導入していく

その前にディレクトリを作る

% mkdir ~/.vim/plugin

minibufexpl

minibufexpl.vim - Elegant buffer explorer - takes very little screen space : vim online
version 6.3.2のminibufexplをダウンロード。
ファイルminibufexpl.vimを~/.vim/pluginに放り込む。

AutoComplPop

AutoComplPop - Automatically opens popup menu for completions : vim online
version 2.14.1のvim-autocomplpop.zipをダウンロード。
解凍したvim-autocomplpopディレクトリ中のautoloadディレクトリを
~/.vim下に投げ込む。docディレクトリを~/.vim下に投げ込む。
pluginディレクトリ中のacp.vimを~/.vim/plugin下に投げ込む。

commentout

commentout.vim : ソースをコメントアウト ←→ コメントアウト解除 — 名無しのvim使い
以下の内容のファイルcommentout.vimを~/.vim/pluginに放り込む。

" commentout.vim
" lhs comments
vmap ,# :s/^/#/<CR>:nohlsearch<CR>
vmap ,/ :s/^/\/\//<CR>:nohlsearch<CR>
vmap ,> :s/^/> /<CR>:nohlsearch<CR>
vmap ," :s/^/\"/<CR>:nohlsearch<CR>
vmap ,% :s/^/%/<CR>:nohlsearch<CR>
vmap ,! :s/^/!/<CR>:nohlsearch<CR>
vmap ,; :s/^/;/<CR>:nohlsearch<CR>
vmap ,- :s/^/--/<CR>:nohlsearch<CR>
vmap ,c :s/^\/\/\\|^--\\|^> \\|^[#"%!;]//<CR>:nohlsearch<CR>

" wrapping comments
vmap ,* :s/^\(.*\)$/\/\* \1 \*\//<CR>:nohlsearch<CR>
vmap ,( :s/^\(.*\)$/\(\* \1 \*\)/<CR>:nohlsearch<CR>
vmap ,< :s/^\(.*\)$/<!-- \1 -->/<CR>:nohlsearch<CR>
vmap ,d :s/^\([/(]\*\\|<!--\) \(.*\) \(\*[/)]\\|-->\)$/\2/<CR>:nohlsearch<CR>

" block comments
vmap ,b v`<I<CR><esc>k0i/*<ESC>`>j0i*/<CR><esc><ESC>
vmap ,h v`<I<CR><esc>k0i<!--<ESC>`>j0i--><CR><esc><ESC>

.vimrc

"Use vim
set nocompatible

"backgroundは明るいと教えてあげる
" light or black
set background=light

"配色の指定
colorscheme desert

"これを書かない意味が分からない
filetype plugin indent on

" 強調表示(色)on or off
syntax on

"モードラインを有効にする
"デフォルトでは上下5行だけ探しにいく
" 例 C言語ファイルの場合
" /* vim: set expandtab ft=txt */
set modeline
set modelines=3


"inoremap { {}<LEFT>
"inoremap [ []<LEFT>
"inoremap ( ()<LEFT>


augroup Binary
  autocmd!
  autocmd BufReadPre  *.bin let &bin=1
  autocmd BufReadPost * if &bin | silent %!xxd -g 1
  autocmd BufReadPost * set filetype=xxd | endif
  autocmd BufWritePre * if &bin | %!xxd -r
  autocmd BufWritePost * if &bin | silent %!xxd -g 1
  autocmd BufWritePost * set nomod | endif
augroup END


"vimを使ってくれてありがとう問題に対処
set title

" number(行数)を表示
set number

"一行に長い文章を書いていても
"自動折り返しをしない
set textwidth=0
"画面端で行を折り返して表示
set wrap

"backupファイルを作らない
"set nobackup
"やっぱり作る
"以下の設定で.vim-backupに*~や*.swpファイルができる
" $ mkdir $HOME/.vim-backup とやる必要があり
"set backup
"set backupdir=$HOME/.vim-backup
"let &directory = &backupdir
"やっぱいらない

"コマンド、検索パターンの履歴数
set history=1000

"加減算コマンドCtrl+a,Ctrl+x
"alpha アルファベット
"octal 8進数
"hex   16進数
set nrformats+=alpha
set nrformats+=octal
set nrformats+=hex

"カーソルが何行目の何列目に置かれているか表示する
"でも、statuslineで指定しているので意味ないのかと
"set ruler

"poweful backspace
"backspaceの挙動を強化する
"indentはオートインデントの空白文字を削除できる
"eolは行の先頭で<BS>を押すと前の行の改行文字を削除できる
"startはC+uやC+wで入力した文字以外(最初から行にある文字)も削除できる
set backspace=indent,eol,start

"%での移動に<>も追加
"下の3つはdefaultで移動可能
"{}
"[]
"()
set matchpairs+=<:>

"自動でindentしてくれる
"autoindentとcindentがあるが
"個人的にはsmartindentが一番賢いと思ってる
"set smartindent

" タブの代わりに空白を
set expandtab
" 自動インデントのスペース数
set shiftwidth=2
" タブを入力したのときのスペース数
set tabstop=2
" タブを削除するときに
set softtabstop=2

" 現在のmodeを表示
" ビジュアル?
" 挿入?
" コマンド?
set showmode

" 対応する括弧に一時的に移動する
" たとえば(と入力してから)を入力すると
" (に一時的にカーソルが移動する
" )に戻ってくるまでの時間は
" オプションmatchtimeで指定可能
set showmatch
" (値/10)秒
set matchtime=5

" コマンドを表示する
set showcmd

"補間候補の表示
set wildmenu


" 検索文字列が小文字の場合は大文字小文字を区別なく検索する
set ignorecase
" 検索文字列に大文字が含まれている場合は区別して検索する
set smartcase
" 検索が末尾まで行ったら先頭へ戻る
"set wrapscan
set nowrapscan
" インクリメンタルサーチ
set incsearch
" 検索結果をハイライト
set hlsearch
"ハイライト残ってると気が散るのでさようなら
nnoremap <C-k><C-k> :nohlsearch<CR><Esc>

"表示行単位で移動してくれる
"1行が長い場合に便利だったりする
"nnoremap j gj
"nnoremap k gk
"見ている行が真ん中にくる
nnoremap j gjzz
nnoremap k gkzz

" ステータスラインを表示
" 2に設定するといつでも表示
set laststatus=2
" 表示する内容の編集
set statusline=\ [%02n]                                        "number of buffer
set statusline+=\ %F                                           "file name
set statusline+=\ %7(%m\ %r%)                                  "読み込み専用ファイルはRO,変更されたら+とか
set statusline+=%{&fileencoding}\ %{&fileformat}\ %{&filetype}
set statusline+=%=\ (%l,%c)                                    "行、列表示
set statusline+=%=\ \ \ [%b,0x%B]                              "ascii文字コード表示


" 前回終了したカーソル行に移動
" 最近のvimでは設定しなくてもdefaultらしいけど一応
autocmd BufReadPost * if line("'\"") > 0 && line("'\"") <= line("$") | exe "normal g`\"" | endif


"Shiftを使った画面移動
nnoremap <S-h> <C-W>h
nnoremap <S-j> <C-W>j
nnoremap <S-k> <C-W>k
nnoremap <S-l> <C-W>l


"skeltonファイルの読み込み
"面倒な記述をしてもらう
"silentは下に表示されるメッセージを無視
autocmd BufNewFile *.pl    silent 0r ~/.vim/skelton/sk.pl
autocmd BufNewFile *.c     silent 0r ~/.vim/skelton/sk.c
autocmd BufNewFile *.java  silent 0r ~/.vim/skelton/sk.java
"zsh関数ファイルのファイルタイプをzshに
autocmd BufNewFile,BufReadPost ~/.zfunc/* :set ft=zsh



"キーボード
nnoremap ; :
"shellへの移動を簡単に
nnoremap ,, <C-z>
"escは打ちにくいので
inoremap <C-k> <esc>

"bufferが編集中でも他のファイルが開ける
set hidden
"外部のeditorで変更されたら自動でfileを読み直す
set autoread

"全角スペースを目立たせる
"以下の設定だと赤い下線になる
highlight ZenkakuSpace cterm=underline ctermfg=red guibg=white
match ZenkakuSpace / /


"MiniBufExp
"Spaceでbuffer移動
nnoremap <Space> :bn<CR>
" minibufexpl.vimの変数
"こう書けと言われた
"調べたい
let g:miniBufExplMapWindowNavVim = 1
let g:miniBufExplMapWindowNavArrows = 1
let g:miniBufExplMapCTabSwitchBufs = 1
let g:miniBufExplModSelTarget = 1
let g:miniBufExplSplitBelow = 0
let g:miniBufExplSplitToEdge = 1
""""""""""""""""""""""""""""""""""""""""


"file exploreを開いてくれるけど
"あんまり使ってない
"map <C-W><C-V> :Vexplore!<CR>
"map <C-W><C-H> :Hexplore<CR>
"map! <C-W><C-V> <Esc>:Vexplore!<CR>
"map! <C-W><C-H> <Esc>:Hexplore<CR>

"plugin YankRing.vimの利用のため
"前は使ってたけど、今はない
"nmap ,y :YRShow<CR>


""""""""""""""""""""Autocompletion""""""""""""""""""""
"補完候補completeの設定
"以下は補間の優先順位の設定
"~/.vim/dictに自分で作った辞書ファイルとかも置ける
autocmd Filetype *    let g:AutoComplPop_CompleteOption='.,w,b,u,t,i'
autocmd Filetype java let g:AutoComplPop_CompleteOption='.,w,b,u,t,i,k~/.vim/dict/j2se14.dict'
autocmd Filetype c    let g:AutoComplPop_CompleteOption='.,w,b,u,t,i,k~/.vim/dict/c.dict'
"真ならvim起動時にポップアップを有効にしない
"let g:AutoComplPop_NotEnableAtStartup=1
"有効にしたり無効にしたり
inoremap ,s <ESC>:AutoComplPopDisable<CR>a
inoremap ,q <ESC>:AutoComplPopEnable<CR>a
nnoremap ,s :AutoComplPopDisable<CR>
nnoremap ,q :AutoComplPopEnable<CR>
"補間バーの色設定
highlight Pmenu     ctermbg=4
highlight PmenuSel  ctermbg=1
highlight PMenuSbar ctermbg=4

"<TAB>で補完
" {{{ Autocompletion using the TAB key
" This function determines, wether we are on the start of the line text (then tab indents) or
" if we want to try autocompletion
function! InsertTabWrapper()
        let col = col('.') - 1
        if !col || getline('.')[col - 1] !~ '\k'
                return "\<TAB>"
        else
                if pumvisible()
                        return "\<C-N>"
                else
                        return "\<C-N>\<C-P>"
                end
        endif
endfunction
" Remap the tab key to select action with InsertTabWrapper
inoremap <tab> <c-r>=InsertTabWrapper()<cr>
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""




set fileencodings=utf-8,cp932



"以下全部、引用。
"まったく理解してない。
"ずんwikiより
" 文字コードの自動認識
"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-2
"    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

skelton用のディレクトリを作成する

% mkdir ~/.vim/skelton

skelton用の各種ファイルを作成する

Perl言語用のskeltonファイル
% cat > ~/.vim/skelton/sk.pl
#!/usr/bin/perl

use strict;
use warnings;

&main();
exit;

sub main {
}

__END__
C言語用のskeltonファイル
% cat > ~/.vim/skelton/sk.c
#include <stdio.h>

int main(void)
{
Java言語用のskeltonファイル
% cat > ~/.vim/skelton/sk.java
public class  {
  public static void main(String[] args) {

autocomplpop用の辞書ファイルを作成する

以下のページを参考に辞書ファイルを作成した。
autocomplpop.vimでリアルタイムにキーワード補完 - ナレッジエース
作成した辞書ファイルを~/.vim/dictに投げ込む。
詳しい作り方は失念してしまった。