YAPC::ASIA 2013 9/20 at 慶応大学
株式会社GaiaX Kazuhiro Homma (@kazuph)
去年の素数戦争の企画・運用をやってました
ガイアックス × CodeIQ
裏番組にするのは回避されました!!
※Vimの基礎からは扱いますが初心者向けの速度で発表しません。
※vimtutorを済ましてると理解が捗ると思います。
Vim戦闘力が1000以上
[参考]Vimの戦闘力を計測する
現在290日以上継続中・・・!!
googleトレンド調べ
詳しくはWebで
⎋:Esc, ⌃:Ctrl, ⇧:Shift, ⇥:Tab
Redhat系
以下のコマンドよりインストール
sudo yum install vim-enhanced
Debian系
以下のコマンドよりインストール
sudo apt-get install vim-full
基本的にはこの場所 $HOME/.vimrc
※Windowsの場合は_vimrcがあると先に読み込まれる
ショートカットを設定
" .vimrcを瞬時に開く
nnoremap <Space><Space>. :e $MYVIMRC<CR>
" vimrcの設定を反映
nnoremap <Space><Space>.. :<C-u>source $MYVIMRC<CR>
Vimには大きく分けて4つのモードがある
コマンドラインで
$ vim <filename> # 複数ファイルなら vim *.pm
でファイルを開く
保存 :w
, 終了 :q
, 保存と終了 :wq
カーソルキーだめです
hjkl
を使う
次の単語の先頭 w
, 次の単語の末尾e
, 前の単語の先頭 b
<HOME>キー、<END>キーを使わない
行の頭へ移動する 0
,
文章の頭へ移動する ^
,
行末へ移動する $
※:se nu
で行番号を表示する
※Esc
は Ctrl + [
で代用できる
※⎋:Esc
文字選択 v
,
行選択 Shift+v
,
矩形選択 Ctrl+v
※⎋:Esc
削除 d
,
置き換え c
,
コピー(ヤンク)y
,
ペーストp
例えば削除の場合
※.
は直前の操作を繰り返してくれる
文字の塊を操作する
デフォルトが微妙なのでvimrcを設定
下の設定をvimrcに書くことで、検索結果をハイライトし、
大文字小文字の区別を無視してくれる。
$HOME/.vimrc
" 検索語を強調表示
set hlsearch
" 検索時に大文字・小文字を区別しない
set ignorecase
" ただし、検索後に大文字小文字が
" 混在しているときは区別する
set smartcase
/<検索したい単語>
, *
でカーソル下の単語を即時検索`
※ハイライトの解除は :nohl
:%s/<置換したいワード>/<置換後のワード>/gc
%
は「文章全体」という意味
選択部分だけに対して置換が行える
ファイル名の場所で gf
※Ctrl+o
で前ファイルに戻る、Ctrl+i
で進む
Package名部分 or メソッド名部分で Ctrl+]
とすることで、
定義箇所へ移動することができる
予めプロジェクト直下で以下のコマンドを実行する必要がある
ctags -R
Exコマンドを実行 :<Exコマンド>
,
例) 文章全体をソート :%sort
,
選択範囲をソート :'<,'>sort
cpanfileをソートするときとかに便利
外部コマンドを実行 :!<外部コマンド>
,
例) :!ls
, :%!sort
, :'<,'>!sort
例えばgitコマンドやperlのワンライナーとかも普通に実行できます
cpanfileを例に
⎋:Esc, ⌃:Ctrl, ⇧:Shift, ⇥:Tab
デフォルトのVimを更に便利にするもの。 Vimの機能拡張をするものからVimに新たなエコシステムを提供する巨大なプラグインまである。
Vimプラグインを管理するためのプラグイン。
まずはNeoBundleをgit clone
$ mkdir -p ~/.vim/bundle
$ git clone git://github.com/Shougo/neobundle.vim ~/.vim/bundle/neobundle.vim
最低限の~/.vimrc
の設定
set nocompatible
if has('vim_starting')
set runtimepath+=~/.vim/bundle/neobundle.vim/
endif
call neobundle#rc(expand('~/.vim/bundle/'))
NeoBundle '...'
filetype plugin indent on
syntax on
NeoBundleCheck
例えばvimprocというプラグインをインストールしたい場合
git@github.com:Shougo/vimproc.vim.git
git@github.com:
の部分を省略できる
NeoBundle 'Shougo/vimproc'
コマンドモードで :NeoBundleInstall
もしくは NeoBundleCheck
を記述しているなら
起動時に半自動でインストール可能
ちなみにアップデートは :NeoBundleUpdate
NeoBundleInstallしてる前提で話します
.vimrc設定
NeoBundle 'rhysd/accelerated-jk'
let g:accelerated_jk_acceleration_table = [10,5,3]
nmap j <Plug>(accelerated_jk_gj)
nmap k <Plug>(accelerated_jk_gk)
左:普通のjk, 右:加速されたjk
上下に高速に移動できる
CtrlP…
Ctrl+p
を押すとファイルリストが開き、
曖昧な文字を入力しても目的のファイルを開ける。
NeoBundle 'kien/ctrlp.vim'
キャメルケースをスネークケースに置き換える
NeoBundle 'kana/vim-operator-user.git'
NeoBundle 'tyru/operator-camelize.vim'
nmap C <Plug>(operator-camelize-toggle)
quickrun …
実行は \r
NeoBundle 'thinca/vim-quickrun'
NeoBundle "y-uuki/perl-local-lib-path.vim"
autocmd FileType perl PerlLocalLibPath
NeoBundle 'thinca/vim-ref'
※別にPerl専用プラグインというわけじゃない
syntastic …保存時に自動でシンタックスチェックが走る
NeoBundle 'scrooloose/syntastic'
本来補完の機能はVim自体にあるが、
それをとても使いやすく提供してくれているもの
設定は長いのでgistに上げました
入力中に自動で補完候補が表示される
neosnippet…登録されているスニペットを補完候補に出し展開する支援をする
設定は長いのでここを参照のこと
snippet #!
#!/usr/bin/env perl
snippet sub
sub ${1:function_name} {
${0}
}
snippet map
map { ${0: body } } ${1: @array } ;
⎋:Esc, ⌃:Ctrl, ⇧:Shift, ⇥:Tab
設定
let g:neosnippet#snippets_directory='~/.vim/bundle/vim-snippets/snippets, ~/dotfiles/snippets'
すぐに開けるようにショートカットの作成
" snippets/perl.snipを瞬時に開く
nnoremap <Space><Space>ps :vs $HOME/dotfiles/snippets/perl.snip<CR>
⎋:Esc, ⌃:Ctrl, ⇧:Shift, ⇥:Tab
Ctrl+x, Ctrl+o
でモジュール、メソッド候補を表示する
NeoBundle "c9s/perlomni.vim"
ファイルエンコーディングミス, パッケージ名間違い
NeoBundle "mattn/perlvalidate-vim.git"
NeoBundle "vim-perl/vim-perl"
シンタックスハイライトの設定
augroup filetypedetect
au BufNewFile,BufRead *.psgi setf perl
au BufNewFile,BufRead *.t setf perl
au BufNewFile,BufRead *.tt setf tt2html
au BufNewFile,BufRead *.tt2 setf tt2html
au BufNewFile,BufRead cpanfile setf perl
augroup END
※tt2htmlを使用する場合はvim-perlが必須
cpanm Perl::Tidy
nnoremap ,pt <Esc>:%! perltidy -se<CR>
vnoremap ,pt <Esc>:'<,'>! perltidy -se<CR>
NeoBundle "smartchr"
inoremap <expr> , smartchr#one_of(', ', ', ')
autocmd FileType perl inoremap <buffer> <expr> . smartchr#loop(' . ', '', '.')
autocmd FileType perl inoremap <buffer> <expr> = smartchr#loop(' = ', ' => ', '=')
外部コマンドとしてprove実行でいいかな…
NeoBundle 'airblade/vim-gitgutter'
この順番で目を通すと幸せになると思います。
Perlについて
今回の発表を実現するvimrc