hollyさんのwiki

設定ファイル

とりあえずこれ使う

gvimrc

設定変えてるとこ

カラー設定

colorscheme torte
他に
  • blue
  • darkblue
  • default
  • delek
  • desert
  • elflord
  • evening
  • koehler
  • morning
  • murphy
  • pablo
  • peachpuff
  • ron
  • shine
  • slate
  • zellner
から選択できる。http://nanasi.jp/colorscheme.htmlにいろいろ載っている

フォント設定

if has('win32')
 " Windows用
 set guifont=MS_Gothic:h12:cSHIFTJIS
 "set guifont=MS_Mincho:h12:cSHIFTJIS
 " 行間隔の設定
 set linespace=1
 " 一部のUCS文字の幅を自動計測して決める
 if has('kaoriya')
   set ambiwidth=auto
 endif
elseif has('mac')
 set guifont=Osaka−等幅:h14
elseif has('xfontset')
 " UNIX用 (xfontsetを使用)
 set guifontset=a14,r14,k14
endif

ウインドウに関する設定

" ウインドウの幅
set columns=90
" ウインドウの高さ
set lines=30
" コマンドラインの高さ(GUI使用時)
set cmdheight=3

編集に関する設定

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

" その他もろもろ
set nocompatible
syntax on
filetype on
filetype indent on
filetype plugin on

GUI固有ではない画面表示の設定

" 行番号を非表示 (number:表示)
set number
" ルーラーを表示 (noruler:非表示)
set ruler
" タブや改行を表示 (nolist:表示しない)
set list
" どの文字でタブや改行を表示するかを設定
set listchars=tab:>-,extends:<,trail:-,eol:<
" listcharsの文字色
highlight SpecialKey guifg=#606060
" 長い行を折り返して表示 (nowrap:折り返さない)
set wrap
" 常にステータス行を表示 (詳細は:he laststatus)
set laststatus=2
" コマンドをステータス行に表示
set showcmd
" タイトルを表示
set title

ファイル操作に関する設定

" バックアップファイルを作成しない (次行の先頭の " を削除すれば有効になる)
set nobackup
" ファイル、ディレクトリのパスを \ => / に変更
set shellslash
" 改行コード自動認識
set fileformats=dos,unix,mac
" 文字コードの自動認識完璧版
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

buffer keybind

" buffer keybind
"map <silent> <F2> :bp<cr>
"map <silent> <F3> :bn<cr>
" nnoremap <UP>    :<C-u>ls<CR>
nnoremap <RIGHT> :<C-u>bnext<CR>
nnoremap <LEFT>  :<C-u>bprevious<CR>

表示上の設定

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

" 全角スペースを表示
hi FullWidthSpace term=underline ctermbg=blue guibg=darkgray
match FullWidthSpace / /

for tab

"ctrl+tab, ctrl+shift+tab でタブ切り替え
nnoremap <C-Tab>   gt
nnoremap <C-S-Tab> gT

デフォルトカレントディレクトリ

" ファイルを開くとそのディレクトリに移動
" 一部のファイルのみにしたい場合は
" au BufEnter *.xml,*.doc execute \":lcd \" . expand("%:p:h")
" のようにする
au BufEnter * execute ":lcd " . expand("%:p:h")

for vimgrep

" vimgrepで自動的にQuickWindowsを開く
au QuickfixCmdPost vimgrep cw

自動でディレクトリに移動する設定

プラグインもあるが、大したことないので、直接設定ファイルに記述。http://nanasi.jp/articles/vim/cd_vim.html
" ファイルを開くとそのディレクトリに移動
" 一部のファイルのみにしたい場合は
" au BufEnter *.xml,*.doc execute \":lcd \" . expand("%:p:h")
" のようにする
au BufEnter * execute ":lcd " . expand("%:p:h")

for grep

" gnuwin32は取得済みが前提
let Grep_Path = 'd:\soft\gnuwin32\bin\grep'
"let Fgrep_Path = 'd:\soft\gnuwin32\bin\fgrep'
"let Egrep_Path = 'd:\soft\gnuwin32\bin\egrep' 
let Grep_Find_Path = 'd:\soft\gnuwin32\bin\findf'
let Grep_Xargs_Path = 'd:\soft\gnuwin32\bin\xargs'
" rgrep使うときに必要
let Grep_Shell_Quote_Char = '"'
gnuwin32の各コマンドはhttp://gnuwin32.sourceforge.net/ から取得しておく

for ruby

autocmd FileType ruby,eruby set omnifunc=rubycomplete#Complete
autocmd FileType ruby,eruby let g:rubycomplete_buffer_loading = 1
autocmd FileType ruby,eruby let g:rubycomplete_rails = 1
autocmd FileType ruby,eruby let g:rubycomplete_classes_in_global = 1

for python

" for python plugin
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
" autocmd FileType python set omnifunc=pythoncomplete#Complete

for perl

"autocmd FileType perl :set dictionary+=$VIM/dict/perl_func.dict
"let complete+=k
autocmd FileType perl :compiler perl
$VIMはインストールされているディレクトリになる。この中にdictというフォルダを作成し、perl用辞書ファイルを用意する(辞書作成スクリプト fileperldic.pl)
標準出力に結果がでるので、リダイレクトで辞書ファイルを作成する。
補完方法
例えば
pr
と書きかけの文字のところ
cntl + x  cntl + k
で補完候補が出てくるので
cntl + n
で選択する。補完方法の詳細はhttp://nanasi.jp/articles/howto/dictionary.html 参照

for NEEDTree

" 隠しファイルを表示
let NERDTreeShowHidden = 1

for neocomplcache

" 有効にする。効いてないようだが
let g:neocomplcache_enable_at_startup = 1 
" <TAB> completion.
inoremap <expr><TAB> pumvisible() ? "\<C-n>" : "\<TAB>"

let g:neocomplcache_cachelinecount=1000

let g:neocomplcache_dictionary_filetype_lists = {
            \ 'default' : '',
            \ 'perl' : $VIM.'/dict/perl_func.dict'
            \ }

"let g:neocomplcache_keyword_patterns = {
"  \ 'perl'   : '\v\<\h\w*\>?|\h\w*(::\h\w*)*|[$@%&*]\h\w*|\h\w*%(\s*\(\)?)?',
"  \ 'erlang' : '\v\h\w*(:\h\w*)*'
"  \}
let g:neocomplcache_keyword_patterns = {
  \ 'default'   : '\h\w*'
  \}


" snippets expand key。tabで選択してCtrl + eで展開
imap <silent> <C-e> <Plug>(neocomplcache_snippets_expand)
smap <silent> <C-e> <Plug>(neocomplcache_snippets_expand)

for taglist

taglist.vimをあらかじめ取得しておくこと。ctagsも必要。http://ctags.sourceforge.net/
set tags=tags

for autodate

kaoriya版gvimではデフォルトで有効になっている
"autodate.vim. kaoriya版のgvimをデフォルトで使用可能
"Last Change: . とすることでvimを閉じたときに日付が入る
let autodate_format = '%Y-%m-%d %H:%M:%S'

for matchit

"matchit.vim
let b:match_words = &matchpairs . ',begin:end'

ruby.vim

$VIM/runtime/syntax/ruby.vim rubyはtabが2なので、設定を変えておく
tabstop=2

perl

gvimからperlを使えるようにする。 ActiveState?からActivePerl?をダウンロードしてきて、ActivePerl?-5.8.8.820-MSWin32-x86-274739/ActivePerl?-5.8.8.820-MSWin32- x86-274739/perl/bin)の中にperl58.dllをPATHの通っているところかgvim.exeがあるディレクトリにいれる。インストールしてしまうのならこんなことする必要もなし。あとは
:perldo $_ =~ tr/a-z/A-Z/
というような使い方ができる。 あたり参照するとよい

plugin

いれておくと開発時に便利

インストール方法

基本的には.vbaというファイルで配布されているので、vbaファイルをまずvimで開いて
:source % (もしくは:so %)
を実行すればいい

よくつかってるプラグイン

Align
hashを整形したりとか。
my %hash = (
 apple => "りんご", 
 banana => "ばなな",
 pine => "ぱいなっぷる"
);
と=>が整っていないのが気持ち悪いので、選択状態にして
:'<,'>:Align =>
としてEnterすると
my %hash = (
apple        => "りんご",
banana       => "ばなな",
pine         => "ぱいなっぷる"
);
と整形してくれるのだが、keyの前にスペースが入らないのは俺だけか?
EnhCommentify
http://www.vim.org/scripts/script.php?script_id=23
各言語に対応したコメントを一括イン/アウト。挿入モードでもビジュアルモードでもどっちでも使えるから非常に便利。複数行にまたがるコメントをしたい時とか非常に良い。ほとんどの言語にも対応している
:\x
とするだけでコメントイン/アウトする。
:\c
cも同様の処理をしてくれるがこの場合はコメント処理後、対象行からひとつ下にカーソルが移動した状態になる。
grep
http://www.vim.org/scripts/script.php?script_id=31...
文書内を検索して一覧。いわゆるgrep。あらかじめgrepの設定が必要
:GrepBuffer hogehoge
とするとしたに行番号とマッチした行が表示される。文書内ではなく、その階層に対するgrepをしたい時は
:Grep
とする。他にもRgrepとかEgrepとかBgrepとかある
taglist
http://www.vim.org/script.php?script_id=273
スクリプト内の変数、メソッドなどをタギング。これはなかなか便利だがあらかじめctagsも必要。http://ctags.sourceforge.net/
日本語対応版ctagはhttp://hp.vector.co.jp/authors/VA025040/ctags/
downloadしたctags.exeをPATHの通ったフォルダにいれておく(gvim.exeと同じフォルダにでもいれておけばいいかと)
:Tlist
とすると画面横に変数、メソッド、クラス名一覧が表示される。ただし対象ファイルのパスに日本語が含まれているとどうもエラーになる
eregex
http://www.vector.co.jp/soft/unix/writing/se265654...
vim.orgには配布されていないが、viの正規表現ではなくperlとかrubyに近い正規表現が使えるようになる。
:S/hoge/hage/
のように大文字のSで置換したい文字列を指定する
matchit
vimの標準能力である 「%」キーで対応するブレースや括弧に飛ぶ機能を強化する

いれた時点で
if [ -z "$hoge" ]; then
    echo "\$hoge is zero!"
fi

for in val $(seq 10);
do
    echo $val
done
のようなソース上でif:fi, for:doneがmatchすると判断してくれるみたい(設定しておこうと思ったのだが)
YankRing
ヤンクの履歴を管理し、順々に参照、出力できるようにする。これは便利だ。複数yankしてからCtrl + p/Ctrl + nでコピーしたいyankを順番に選ぶことができる。細かい設定をしなくてもインストールするだけで使用できる

覚えておくとよいコマンド
コマンド説明
YRToggleYankRing.vimの機能の有効、無効を切り替え
YRClear履歴を消去
YRShow履歴一覧を表示
YRToggleYankRing.vimの機能の有効、無効を切り替え
履歴数はyankring_max_historyに設定されていて、デフォルトでは30となっているので、
let g:yankring_max_history = 40 
というふうに設定する
perldoc
perldocみることができる
:Perldoc App::CLI::Extension
関数の場合は
:Perldoc -f open
tabもきくし。まあscreenで別ウィンドウでperldocみるって手もあるが
perlcritic compiler script
引き続きperl系。perlcriticをチェック。本当はコマンドで指定するタイプが望ましいが
:compiler perltidy
:make
:copen
実行すると
a.pl:1:1:RCS keywords $Id$ not found
a.pl:1:1:RCS keywords $Revision$, $HeadURL$, $Date$ not found
a.pl:1:1:RCS keywords $Revision$, $Source$, $Date$ not found
こういうのが出るが、いまやCVSやSVNの時代ではないから自分は気にしないことにしている。気になる場合はperlcritic.vimのperlcriticを実行している箇所を編集すればよい
quickrun
編集中のファイルを即時実行。わざわざ保存をしなくてもよい。インストールだけで稼動
# <Leader>は\
<Leader> + r
もしくは
:Quickrun
とする。テストケースとかを実施したい場合は以下を定義しておくとよさそう
augroup QuickRunUnitTest
  autocmd!
  autocmd BufWinEnter,BufNewFile *test.php set filetype=php.unit
  autocmd BufWinEnter,BufNewFile test_*.py set filetype=python.unit
  autocmd BufWinEnter,BufNewFile *.t set filetype=perl.unit
augroup END
let g:quickrun_config = {}
"let g:quickrun_config={'perl': {'command': 'c:/straberry/perl/bin/perl.exe'}}
let g:quickrun_config['php.unit'] = {'command': 'phpunitrunner'}
let g:quickrun_config['python.unit'] = {'command': 'nosetests', 'cmdopt': '-s -vv'}
let g:quickrun_config['perl.unit'] = {'command': 'prove'}
NERD_tree
標準よりもいいエクスプローラ。特に設定しなくてもつかえそう
:NERDTree
とすれば左縦に表示。なかなか便利。vimrcには以下を書いておけば変更可能
オプション説明
loaded_nerd_tree1にするとNERDTreeスクリプトを読み込まない
NERDChristmasTreeカラー表示する
NERDTreeChDirModevimのカレントディレクトリを変更するタイミングを設定する
NERDTreeHighlightCursorlineカーソル行を強調するか
NERDTreeIgnore無視するファイルを設定する
NERDTreeMouseModeマウス制御のモード
NERDTreeShowFilesファイルを表示するか
NERDTreeShowHidden隠しファイルを表示するか
NERDTreeSortOrderソート順
NERDTreeSplitVerticalNERDTreeウィンドウを垂直分割で作成するか
NERDTreeWinPosNERDTreeウィンドウを横に表示するか上に表示するか
NERDTreeWinSizeNERDTreeウィンドウのサイズ
とりあえずNERDTreeShowHiddenは1を設定しておいたほうがよい
let NERDTreeShowHidden = 1
neocomplcache
その他役立ちそうなところ ほかにもあるけど。autocomplpopよりも高機能なPOPUP表示&自動補完。snipetもできる。高機能すぎてよくわからない

vimrcに
# どうもneocomplcache_enable_at_startupが有効にならないが、他のプラグインが悪さしているのか?
let g:neocomplcache_enable_at_startup = 1
と書いておくか起動してから
:NeoComplCacheEnable
とすると有効になる。どれが何の設定なのかまでは深追いしていないので、とりあえず現在の設定をはりつけておく
" for neocomplcache
" 有効にする。効いてないようだが
let g:neocomplcache_enable_at_startup = 1 
" <TAB> completion.
inoremap <expr><TAB> pumvisible() ? "\<C-n>" : "\<TAB>"

let g:neocomplcache_cachelinecount=1000

let g:neocomplcache_dictionary_filetype_lists = {
            \ 'default' : '',
            \ 'perl' : $VIM.'/dict/perl_func.dict'
            \ }

"let g:neocomplcache_keyword_patterns = {
"  \ 'perl'   : '\v\<\h\w*\>?|\h\w*(::\h\w*)*|[$@%&*]\h\w*|\h\w*%(\s*\(\)?)?',
"  \ 'erlang' : '\v\h\w*(:\h\w*)*'
"  \}
let g:neocomplcache_keyword_patterns = {
  \ 'default'   : '\h\w*'
  \}


" snippets expand key。tabで選択してCtrl + eで展開
imap <silent> <C-e> <Plug>(neocomplcache_snippets_expand)
smap <silent> <C-e> <Plug>(neocomplcache_snippets_expand)
とりあえず時間があったら調べる
project
プロジェクト管理というよりは対象フォルダ内の管理って感じ。でもNEEDTreeとかより使いやすいかもしれない

プロジェクト作成
:Project
とする。.vimprojectsなるファイルが2painで開くので
<PJNAME>="/path/to/pjdir" CD=. filter="*.html *.pm *.pl *.t *.js {
  Application=<DIRNAME> {
 
 }
}
こんな感じで書けばよい。filterは表示対象のファイル。*だけにすれば全て表示される、Application(名前はなんでもいい)=<DIRNAME>は対象PJフォルダの中のフォルダ定義。この中にカーソルを合わせて
\R
を実行すると対象ファイルを読み込んでくれる。ネストしてフォルダ定義をすることも可能
\C
だとPJ作成時にintaractiveになるらしい。<SPACE>を押すと2painになっている.vimprojects側のpainが全開になる

fuzzyfinder

結構有名なプラグイン。いまさら使ってみた。buffer/fileなどからあいまい検索を実現。l9 pluginなるものも必要なのでセットでインストールする とりあえず自分の場合はバッファ検索、ファイル検索くらいができれば十分。バッファ検索は:lsとかしなくていいから非常に楽
:FufBuffer現在開いているバッファ検索
:FufDir現在のカレントディレクトリから移動できるディレクトリを検索
:FufDirWithFullCwdあんまりつかわん
:FufDirWithCurrentBufferDirあんまりつかわん
:FufFile現在のカレントディレクトリからオープンできるファイルを検索
:FufFileWithFullCwdあんまりつかわん
:FufFileWithCurrentBufferDirあんまりつかわん
毎回こんなのをうつのもめんどくさいので以下を設定
" fuzzyfinder
" MruFile - 最近開いたファイル
" RenewCache - 補完アイテムを開くためのキャッシュを削除
nnoremap <unique> <silent> <space>fb :FufBuffer!<CR>
nnoremap <unique> <silent> <space>ff :FufFile!<CR>
nnoremap <unique> <silent> <space>fm :FufMruFile!<CR>
nnoremap <unique> <silent> <Space>fc :FufRenewCache<CR>
autocmd FileType fuf nmap <C-c> <ESC>
let g:fuf_patternSeparator = ' '
let g:fuf_modesDisable = ['mrucmd']
let g:fuf_mrufile_exclude = '\v\.DS_Store|\.git|\.swp|\.svn'
let g:fuf_mrufile_maxItem = 100
let g:fuf_enumeratingLimit = 20
let g:fuf_file_exclude = '\v\.DS_Store|\.git|\.swp|\.svn'
この場合、<space>fbと打つとFufBufferが実行される。かなり便利
git-vim
gitと連携
windowsでやるとmsysgitをいれると連携ができるが超うざい。これをいれるとvimから操作できるので便利。だと思う。git.exeを直接使っているようなので、PATHが通ってない場合は環境変数でPATHを通すか
let g:git_bin = '/path/to/git'
を設定すればよい

tips

細かいことはhttp://nanasi.jp/をみるとよい

矩形選択

Ctrl + v

全選択

ggVG
ggでファイルの先頭に移動し、Vでヴィジュアルモード(行選択)にし、Gでファイルの末尾に移動する

ビジュアルモード

コマンド説明
v普通のビジュアルモード
Vビジュアル行モード

本物の制御文字入力したい

Ctrl + v + なんか(↓のURL参照)
ASCII文字セットマップ http://docs.hp.com/ja/B2355-60128/ascii.5.html
NULLを入力したい場合は入力モードで Cntl v + 000 とすればNULLを入力したことになる

buffer操作

いわゆる複数ファイルを開いた時の操作。自分はtabで開いているので、あんま使わんけど
コマンド説明
:ls, buffers, files開いているバッファ一覧(バッファリスト)を表示する
:bfirst,bf先頭のバッファに移動する
:blast,bl最後のバッファに移動する
:bnext,bn次のバッファに移動する
:bprev,bp前のバッファに移動する
:b NUMNUM番目のバッファに移動する
:baddバッファにファイルをロードする
:bdeleteバッファをアンロードする
とするか
NUM CTRL+^
バッファ番号(NUM)を指定で切り替えることも可能。bufferを操作するプラグインなんかもでてるけど、まあいらないでしょう。
http://www.vim.org/scripts/script.php?script_id=42
ちなみにキーバインドでこうした
# F2 F3で切り替え
map <silent> <F2> :bp<cr>
map <silent> <F3> :bn<cr>

tab操作

自分はbuffer操作よりもこっちが好き
コマンド説明
tabnew新しくtabを開く
tabeditファイルをtabで開く
tabclose開いているtabを閉じる
tabonly他のtabを閉じる
tabnext次のtabに移動
tabprevious前のtabに移動
tab commandコマンド実行結果をtabに展開
tab sball開いているバッファ毎にタブを開く
ちなみに
nnoremap <C-Tab>   gt
nnoremap <C-S-Tab> gT
とvimrcに設定して、コマンド入力しなくてもctrl+tab, ctrl+shift+tab でタブ切り替えできるようにしている

名前付きレジスタ

yとかで文字とか行をyankする時に
"x
としてからyyとかddとかするとbufferを名前付きで保存することができる。
"ayy
とか
"bdd
する。ペーストするときは
"ap
とするとよい。

ファイル内の移動

コマンド説明
w次の単語ごとの先頭にカーソルを移動
b前の単語ごとの先頭にカーソルを移動
e次の単語ごとの最後にカーソルを移動
0行の先頭
$行の最後
+次の行の先頭
-前の行の先頭
←/→/↑/↓h/l/k/j
gg先頭行
G最終行
数値+g(2gとか)数値を指定した行番号に移動
Ctrl + F1画面分スクロール
Ctrl + B1画面分前にスクロール
Ctrl + D1/2画面分にスクロール
Ctrl + U1/2画面分前にスクロール

レジスタではなくクリップボードにコピー

コマンド説明
Ctrl + Insertコピー
Ctrl + Deleteカット
Shift + Insertペースト
ビジュアルモードなんかと組み合わせるとよい。クリップボードに保存されているので、他のアプリケーションと共有することが可能。と思ったけど今のgvimじゃできない?ので、仮想レジスタを使う
ペースト
"*Y
カット
"*p
他にも方法があるらしいのでhttp://vim-users.jp/2010/02/hack126/参照

カレント行情報

Ctrl + G
とすると
"test.txt" 38行 --89%--
のようにファイル名、全体の行数、そのうちカレント行が何%のところにあるかが表示される

編集

たまに忘れる
コマンド変更削除コピー
1語cwdwyw
2語2cW2dW2yW
1行ccddyy
行末までc$ or Cd$ or Dy$
行頭までc0d0y0
1文字rxyl
5文字5s5x5yl

横にウィンドウ分割

:sp

縦にウィンドウ分割

:vsp

カレントディレクトリ

現在の位置を取得
:pwd
移動
:cd /path/to/dir

shell

vim使いながらshを使うその1
:sh
vim使いながらshを使うその2
:!command
外部コマンドの結果をvimで編集しているファイルに書き込みたい
:r! ls -l
外部コマンドをフィルタとして使う
対象文字列を選択モードにして
:'<,'>!tr "a-z" "A-Z"
この例ではtrコマンドで小文字アルファベッドを大文字にする
perlのソースをきれいにしたい
かなり偏ったねただが、他のコマンドでも可能
:%!perltidy
ようはページ全体を何かのコマンドにパイプで渡す

explorer

:Explore or :e .(ここはディレクトリパス)
カーソル移動は
Ctrl w + w

中途半端の改行コードを削除

:%s/^M$//s 

検索文字列がハイライトされたままなのをなんとかしたい

:set nohlsearch
とすると消えるみたい。

http://ujihisa.nowa.jp/entry/5ebd23f397 その他詳細はここ見る
nnoremap <Esc><Esc> :<C-u>set nohlsearch<Return>
nnoremap / :<C-u>set hlsearch<Return>/
nnoremap ? :<C-u>set hlsearch<Return>?
nnoremap * :<C-u>set hlsearch<Return>*
nnoremap # :<C-u>set hlsearch<Return>#

文字化けしていたり、ファイルの形式が崩れているファイルに対して行う操作

まず、ファイルを文字化けしない、正しいエンコーディングで開き直す
:e ++enc=utf-8

変更したいファイルのエンコーディングをセット
:set fileencoding=euc-jp
で保存
:w

16進バイナリで表示

vim -b でファイルを開いたあと(まあgvimはこんなことすることもないけど)
:%!xxd
とすると開くことが可能。http://ash.jp/code/unitbl21.htm とかが文字コード表になってるので、これと照らし合わせながら、みること。戻す場合は
:%!xxd -r
とすることで戻る。

%で対応する括弧へ移動

例えば
sub import { <- ここと

   my $class = shift;
   my $finder = Module::Pluggable::Object->new(search_path => __PACKAGE__ . "::Component", require => 1);
   foreach my $component($finder->plugins){
       $component->require or die "component load error: $UNIVERSAL::require::ERROR";
   }
   $class->_components([$finder->plugins]);
} <-ここ
でカーソル移動したい場合はそれぞれのブレス上で%を押せば、それに対応したブレスに移動できる。ちなみにコマンドモードの時の話。%に対応している文字を表示するには
:set matchpairs
で現在の対応している文字が表示される。デフォルトで
matchpairs=(:),{:},[:]
がセットされていることがわかる。ペアを追加したい場合は
:set matchpairs=(:),{:},[:],<:>
とか
:set matchpairs+=<:>
などとすればいい。gvimrcに書いておいたほうが便利。けどmatchit.vimをいれたほうがいい。

色を変えたい

:colorscheme hoge

空行を削除する

:g/^$/d

インデント

編集モード(Escを押した状態)で
対象行で
# インデントをいれる
>>
# インデントを削除
<<
複数行に対してインデントを入れる場合はShift + vでビジュアルモードで行を選択したあと
>
とするとよい。逆に削除は<とする

vimgrep

grep.vimもいいけど、日本語を含むファイルとかディレクトリとかだとうまく動いてくれないので、最近はこっちを使うようにしている。ただし速度は外部grepを使うほうが速いようだ。http://sites.google.com/site/fudist/Home/vim-nihon...が詳しい
vimgrep hogehoge *
とすればよい。

ファイル移動しないようにする

このままではマッチしたファイルを勝手にopenしてしまうので
vimgrep /hogehoge/j *
のようにjオプションをつける。結果はQuickFixに一覧が表示されるので
copen
とすれば一覧結果がでる。閉じる場合は
cclose
とする

QuickFixを同時に開く

vimgrep /hogehoge/j * | cw
とpipeを使ってcwとする

再帰的検索

starstar
vimgrep /hogehoge/j **/* | cw

bufferから検索

grep.vimでいうGrepBuffer的なやつ。現在開いている全てのバッファからgrepする場合は
:bufdo vimgrepadd /hogehoge/j % 
見えてるバッファだけで実行する場合はbufdoの代わりにwindoが使う。実行するたびにQuickFixが追加されていくので
cexpr ""
を実行すること

compile

# perlなら
:compiler perl
その都度これするのがめんどくさいのなら
autocmd FileType perl :compiler perl
と設定ファイルなどに書いておくとよい。
あとは記述したあと
:make
とすればsyntax checkを行ってくれる。エラーになった場合は
:cw
とすればエラーメッセージをみることが可能
:cl
でも見えるか

syntax

新規にsyntaxを追加する場合

syntaxディレクトリに定義ファイルを設置

$VIM/vimfiles/syntax にいれる

設定を追加

runtime/filetype.vimに追加してもいいけど、あまりcoreに追加もしたくないので、自分のvimrcなどに
au BufNewFile,BufRead *.<extension>  setf <language name>
を追加する

template

プログラムをかくたびにだいたいはじめに書くことって決まっていると思うので
autocmd BufNewFile *.sh 0r $HOME/.vim/template/sh.txt
autocmd BufNewFile *.pl 0r $HOME/.vim/template/perl-script.txt
autocmd BufNewFile *.pm 0r $HOME/.vim/template/perl-package.txt
autocmd BufNewFile *.t 0r $HOME/.vim/template/perl-test.txt
autocmd BufNewFile *.py 0r $HOME/.vim/template/python.txt
autocmd BufNewFile *.html 0r $HOME/.vim/template/html5-boilerplate.txt
あとはsh.txtなどを記述しておいたディレクトリにおいておけばよい

sh.txt

#!/usr/bin/env bash

perl-script.txt

#!/usr/bin/env

use strict;
use warnings;
use feature qw(:5.14);
use Findbin qw($Script $Bin);
use Getopt::Long;
use Pod::Usage;

our $VERSION = '1.0';


exit;

__END__

=pod

=head1 NAME

script_name - description

=head1 VERSION

version

=head1 SYNOPSIS

  synopsis

=head1 DESCRIPTION

this is description

=head1 OPTIONS

=over 4

=item -h, --help

Display help and exit

=item -v, --version

Display version and exit

=back

=head1 AUTHOR

Akira Horimoto E<lt>me@domainE<gt>

=head1 SEE ALSO

L<use_package>

=head1 LICENSE

This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.

=cut

perl-package.txt

package MyPackage;

use strict;
use warnings;
use feature qw(5.14);

our $VERSION = '1.0';


1;

=pod

=head1 NAME

package_name - description

=head1 VERSION

version

=head1 SYNOPSIS

  synopsis

=head1 DESCRIPTION

this is description

=head1 GLOBAL VARIABLE

=head1 METHOD

=head2 new

Create MyPackage Object

Example:

  my $obj = MyPackage->new;

Options:

  verbose             verbose output. default 0

=head1 AUTHOR

Akira Horimoto E<lt>me@domainE<gt>

=head1 SEE ALSO

L<use_package>

=head1 LICENSE

This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.

=cut

perl-test.txt

use strict;
use Test::More tests => 1;

python.txt

pythonはお作法がまだわかっていないので、ちょっと適当
#!/usr/bin/env python
# vim:fileencoding=utf-8

""" [NAME] script or package easy description

[DESCRIPTION] script or package description
"""
import sys
import os
import pprint
from optparse import OptionParser

__author__  = 'Akira Horimoto'
__version__ = '1.0'

usage = "usage: %prog [options] arg1 arg2...argN"
version = "%prog %s" % __version__

parser = OptionParser(usage=usage, version=version)

def main():
    """ [FUNCTIONS] method or functon description
    """
    sys.exit(0)

if __name__ == "__main__":
    main()

html5-boilerplate.txt

https://github.com/h5bp/html5-boilerplateが元ねた
<!doctype html>
<!-- source by html5-boilerplate. https://github.com/h5bp/html5-boilerplate -->
<!-- paulirish.com/2008/conditional-stylesheets-vs-css-hacks-answer-neither/ -->
<!--[if lt IE 7]> <html class="no-js lt-ie9 lt-ie8 lt-ie7" lang="en"> <![endif]-->
<!--[if IE 7]>    <html class="no-js lt-ie9 lt-ie8" lang="en"> <![endif]-->
<!--[if IE 8]>    <html class="no-js lt-ie9" lang="en"> <![endif]-->
<!-- Consider adding a manifest.appcache: h5bp.com/d/Offline -->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en"> <!--<![endif]-->
<head>
  <meta charset="utf-8">

  <!-- Use the .htaccess and remove these lines to avoid edge case issues.
       More info: h5bp.com/b/378 -->
  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">

  <title></title>
  <meta name="description" content="">

  <!-- Mobile viewport optimized: h5bp.com/viewport -->
  <meta name="viewport" content="width=device-width,initial-scale=1">

  <!-- Place favicon.ico and apple-touch-icon.png in the root directory: mathiasbynens.be/notes/touch-icons -->

  <link rel="stylesheet" href="css/style.css">
  
  <!-- More ideas for your <head> here: h5bp.com/d/head-Tips -->

  <!-- All JavaScript at the bottom, except this Modernizr build incl. Respond.js
       Respond is a polyfill for min/max-width media queries. Modernizr enables HTML5 elements & feature detects; 
       for optimal performance, create your own custom Modernizr build: www.modernizr.com/download/ -->
  <script src="js/libs/modernizr-2.0.6.min.js"></script>
</head>

<body>
  <header>

  </header>
  <div role="main">

  </div>
  <footer>

  </footer>


  <!-- JavaScript at the bottom for fast page loading -->

  <!-- Grab Google CDN's jQuery, with a protocol relative URL; fall back to local if offline -->
  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
  <script>window.jQuery || document.write('<script src="js/libs/jquery-1.7.1.min.js"><\/script>')</script>


  <!-- scripts concatenated and minified via build script -->
  <script defer src="js/plugins.js"></script>
  <script defer src="js/script.js"></script>
  <!-- end scripts -->


  <!-- Asynchronous Google Analytics snippet. Change UA-XXXXX-X to be your site's ID.
       mathiasbynens.be/notes/async-analytics-snippet -->
  <script>
    var _gaq=[['_setAccount','UA-XXXXX-X'],['_trackPageview']];
    (function(d,t){var g=d.createElement(t),s=d.getElementsByTagName(t)[0];
    g.src=('https:'==location.protocol?'//ssl':'//www')+'.google-analytics.com/ga.js';
    s.parentNode.insertBefore(g,s)}(document,'script'));
  </script>

  <!-- Prompt IE 6 users to install Chrome Frame. Remove this if you want to support IE 6.
       chromium.org/developers/how-tos/chrome-frame-getting-started -->
  <!--[if lt IE 7 ]>
    <script defer src="//ajax.googleapis.com/ajax/libs/chrome-frame/1.0.3/CFInstall.min.js"></script>
    <script defer>window.attachEvent('onload',function(){CFInstall.check({mode:'overlay'})})</script>
  <![endif]-->

</body>
</html>
タグ

Wiki内検索

Menu

ここは自由に編集できるエリアです。

管理人/副管理人のみ編集できます