!DOCTYPE nico

Web Director nico0927's note

Category list & Search box

Vim使い方メモ

Vimを使いはじめて少し経った。これはスタート地点としての個人的な記録。

ダウンロードとバージョン

現在Kaoriyaさんで配布されているVer7.2(Windows)のgvimから使ってみる。
この場合、手間のかかるインストールなどは特になく、すぐに使い始めることができる。まるごと持ち運べるので便利。

このURLからKaoriyaさんへ。
http://www.kaoriya.net/

まずは最低限、覚えるべきコマンド

まずはコマンドモードで使用するコマンドを覚えなければ何もできない。
以下、さしあたって必要と思われるものを覚え書き。

移動
h,j,k,l 左下上右に移動
Ctrl+↓↑ 5行飛ばしの移動
Shift+↓↑ 表示範囲飛ばしの移動
^ 行頭に移動
Shift+$ 行末に移動
コピペ操作
v ヴィジュアルモードに以降(Escで離脱)
d,y,p カット,コピー,ペースト
dd,yy カーソル行をカット,コピー
検索・置換
/文字列 文字列を下方向に検索、ハイライト
n,N ハイライトされた検索結果を巡回,逆方向に巡回
:%s/hoge/piyo/g ファイル全体からhogeを検索し、piyoに置換
:%s/hoge/piyo/cg ファイル全体からhogeを検索し、一つ一つ確認しながらpiyoに置換
:noh 検索結果のハイライトをクリア
保存・終了
:sav ファイル名名前をつけて保存
:w 上書き保存
:w ファイル名 別名保存
:wq 保存して終了
:q! 変更を保存せずに終了(カレントタブを閉じる)
文字コード・改行コード
:set fileencoding=文字コード 文字コードを変更
:set fileformat=dos,mac,unix 改行コードを変更(win,mac,unix)
その他
u 操作の取り消し
. 操作の繰り返し
:tabnew 新規タブを開く
gt タブを切り替え

_gvimrcの内容

_gvimrcはgvimの設定ファイル。少しは書いておかないと不便。
以下、現時点での設定ファイルの中身。

"-------------------------------------------------------------------------------
" 基本設定
"-------------------------------------------------------------------------------

"カラーを設定
colorscheme chlordane

"メニューバーを非表示
set guioptions-=T

"ステータスラインにエンコーディングを表示
set statusline+=[%{&fileencoding}]	

"行番号を表示する
set number

"水平スクロールバーを表示
if has('gui')
    set guioptions+=b
endif

"日本語入力時にカーソルの色を変更
if has('multi_byte_ime') || has('xim')
    highlight CursorIM guibg=White guifg=NONE
endif

"同時に開くタブ数の最大値を設定
set tabpagemax=30

"ウィンドウの端で折り返さない
set nowrap

"ヤンクした文字は、システムのクリップボードに入れる
set clipboard=unnamed

"クリップボードをWindowsと連携
set clipboard=unnamed

"検索時に大文字を含んでいたら大/小を区別
set smartcase

"自動的にインデントする
set autoindent

"シフト移動幅
set shiftwidth=4

"行頭の余白内で Tab を打ち込むと、'shiftwidth' の数だけインデントする
set smarttab

"ファイル内の <Tab> が対応する空白の数
set tabstop=4

"ファイル保存の初期ディレクトリを編集中のディレクトリに変更
set browsedir=buffer

"他で書き換えられたら自動で読み直す
set autoread

"バックアップを取らない
set nobackup

"スワップファイルを作らない
set noswapfile

"ファイルタイプ判定をon
filetype plugin on

"ファイルブラウザは前回終了時のディレクトリを開く
set browsedir=last

"-------------------------------------------------------------------------------
" キーマップ変更
"-------------------------------------------------------------------------------

"Ctrl+Tabでタブを切り替える
nnoremap <C-Tab>   gt
nnoremap <C-S-Tab> gT

"挿入モードでCtrl+kを押すとクリップボードの内容を貼り付けられるようにする
inoremap <C-k> <ESC>"*pa

"Ctrl+上下で5行ずつ移動
map <C-Up> <Up><Up><Up><Up><Up>
imap <C-Up> <Up><Up><Up><Up><Up>
map <C-Down> <Down><Down><Down><Down><Down>
imap <C-Down> <Down><Down><Down><Down><Down>

"スペースキーでスクロール
nnoremap <Space> <C-d>
nnoremap <S-Space> <C-u>

"バックスペースでインデントや改行を削除できるようにする
set backspace=indent,eol,start

"カーソルを行頭、行末で止まらないようにする
set whichwrap=b,s,h,l,<,>,[,]

"ノーマルモードでもエンターキーで改行を挿入
noremap <CR> o<ESC>

"「,vim」で_gvimrcを開く
nnoremap ,vim :e $VIM/_gvimrc<CR>

"「,_」で_.snippetsを開く
nnoremap ,_ :e $VIM/vimfiles/snippets/_.snippets<CR>

"「,t」で新規タブを開く
nnoremap ,t :tabnew<CR>

"「,feu」でファイルエンコーディングをUTF-8に設定
nnoremap ,feu :set fileencoding=utf-8<CR>

"「,fec」でファイルエンコーディングをShift_JISに設定
nnoremap ,fec :set fileencoding=cp932<CR>

"「,fth」でコマンドラインに「:set filetype=html」を入力(Enterで確定)
nnoremap ,fth :set filetype=html

"-------------------------------------------------------------------------------
" オートコマンド
"-------------------------------------------------------------------------------

"日本語入力をリセット
au BufNewFile,BufRead * set iminsert=0

"入力モード時、ステータスラインのカラーを変更
augroup InsertHook
autocmd!
autocmd InsertEnter * highlight StatusLine guifg=#ccdc90 guibg=#2E4340
autocmd InsertLeave * highlight StatusLine guifg=#2E4340 guibg=#ccdc90
augroup END

"-------------------------------------------------------------------------------
" 前回終了時のウィンドウ位置を保存、復元
"-------------------------------------------------------------------------------

if has('unix')
  let s:infofile = '~/.vim/.vimpos'
else
  let s:infofile = '~/_vimpos'
endif

function! s:SaveWindowParam(filename)
  redir => pos
  exec 'winpos'
  redir END
  let pos = matchstr(pos, 'X[-0-9 ]\+,\s*Y[-0-9 ]\+$')
  let file = expand(a:filename)
  let str = []
  let cmd = 'winpos '.substitute(pos, '[^-0-9 ]', '', 'g')
  cal add(str, cmd)
  let l = &lines
  let c = &columns
  cal add(str, 'set lines='. l.' columns='. c)
  silent! let ostr = readfile(file)
  if str != ostr
    call writefile(str, file)
  endif
endfunction

augroup SaveWindowParam
  autocmd!
  execute 'autocmd SaveWindowParam VimLeave * call s:SaveWindowParam("'.s:infofile.'")'
augroup END

if filereadable(expand(s:infofile))
  execute 'source '.s:infofile
endif
unlet s:infofile

"ウィンドウを透過(※上記ウィンドウ設定の後方でなければ機能しない)
gui
set transparency=235

"-------------------------------------------------------------------------------
" タブに番号と分かりやすいファイル名を表示する
"-------------------------------------------------------------------------------

function! GuiTabLabel()
  let l:label = ''

  let l:bufnrlist = tabpagebuflist(v:lnum)

  let l:bufname = fnamemodify(bufname(l:bufnrlist[tabpagewinnr(v:lnum) - 1]), ':t')
  let l:label .= l:bufname == '' ? 'No title' : l:bufname

  let l:wincount = tabpagewinnr(v:lnum, '$')
  if l:wincount > 1
    let l:label .= '[' . l:wincount . ']'
  endif

  for bufnr in l:bufnrlist
    if getbufvar(bufnr, "&modified")
      let l:label .= '[+]'
      break
    endif
  endfor

  return l:label
endfunction

set guitablabel=%N:\ %{GuiTabLabel()}

"-------------------------------------------------------------------------------
" プラグイン autocomplpop
" http://www.vim.org/scripts/script.php?script_id=1879
"-------------------------------------------------------------------------------

"Tabで補完候補を巡回可能にする
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
inoremap <tab> <c-r>=InsertTabWrapper()<cr>

"-------------------------------------------------------------------------------
" プラグイン zencoding-vim
" http://mattn.github.com/zencoding-vim/
"-------------------------------------------------------------------------------

"展開キーを設定
let g:user_zen_expandabbr_key = '<c-z>'

"-------------------------------------------------------------------------------
" プラグイン HTML文字実体参照の変換を行うスクリプト
" http://www.serendip.ws/archives/335
"-------------------------------------------------------------------------------

vmap <silent> sx :Str2HtmlEntity<cr>
vmap <silent> sr :Entity2HtmlString<cr>

プラグインを入れてみる

調べればいくらでも出てくるVimのプラグインも入れてみる。
とりあえず下記の二点。

autocomplpop.vim
http://www.vim.org/scripts/script.php?script_id=1879

zencoding.vim
http://mattn.github.com/zencoding-vim/

autocomplpopは言わずと知れた(らしい)タグ補完のプラグイン。補完候補がポップアップで出るので便利。
zencoding環境は欲しいので、それも追加。

実際に使ってみた感想

まずは移動・コピペ系のコマンドを使い慣れることと、設定ファイルを少し書くだけで随分便利に。
既にメイン使用のテキストエディタになっている。

以上。

このエントリーをはてなブックマークに追加