Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

社内で喋ったVim勉強会(知らなそうなコマンドとかpluginについて)

More than 5 years have passed since last update.

社内でVimの勉強会を実施したのでQiitaTeamには投稿していましたが、別にPrivateな内容でもないのでこっちにも投稿しておきます。

尚、plugin周りは大幅に追記しています。(社内の人すまんね)

別に特殊なことはやってないけど、オレのvimrc 晒しておきます。

基礎編

最初に

$ vimtutor
  • vimの基本的な操作はこれで多分事足りる

基本編

移動系とか

パッと思いついたやつ書いておきます

コマンド なに?
ctrl + f ページ送り
ctrl + d 半ページ送り
ctrl + b ページ戻り
ctrl + u ページ半戻り
w 単語分進む
b 単語分戻る
gg ファイルの一番上へ
G ファイルの一番下へ
g: 前に変更した場所に飛ぶ
diw カーソル上の単語消す
dit カーソル上のタグの中を消す
di" "で囲まれた中を消す
ciw カーソル上の単語消して、insertモードになる
:set paste いい感じにコピペできる
vで範囲選択 -> = ガタガタの見た目がいい感じになる
ctrl + v で範囲選択 -> shift + iの後に# 指定された場所に#が入る(先頭にコメントいれる)

vimrcに書いたらいい感じになりそうなもの

.vimrc なに?
set incsearch インクリメンタルサーチを有効に
nmap :nohlsearch Escの2回押しでハイライト消去
set pastetoggle= ctrl + eでset pasteを有効/無効にする
set scrolloff=n スクロールするときに上下に余白を入れる
inoremap jj jjって押すとESC押したことにする
nnoremap 0 :call append(expand('.'), '')j 0を入れると改行する(ノーマルモード時)
set laststatus=2
hi StatusLine ctermfg=White ctermbg=Blue cterm=none
au InsertEnter * hi StatusLine ctermfg=Black ctermbg=yellow cterm=none
au InsertLeave * hi StatusLine ctermfg=White ctermbg=Blue cterm=none
ステータスラインの色をinsertモードとかで変える

プラグイン

プラグイン なに?
Shougo/neobundle プラグインを管理するプラグイン
Shougo/neocomplcache.vim 入力補完機能
unite.vim ファイル操作がお手軽に
NERDTree IDEみたいなファイラー(Shougo/Vimfilerも同じ感じ?)
vim-powerline 見た目がカッコよくなる
rking/ag.vim vim上からagコマンドを使って高速検索
kien/ctrlp.vim 開きたいファイルの絞込に使う
thinca/vim-quickrun vim上からスクリプトを実行できる
vim-rails Vim On Rails · Pablo Acuña
szw/vim-tags ctag

unite.vimについて補足

" バッファ一覧
nnoremap <silent> ub :<C-u>Unite buffer<CR>
" 今開いてるフォルダの一覧ファイルを表示
nnoremap <silent> uf :<C-u>UniteWithBufferDir -buffer-name=files file<CR>
" 最近使用したファイル一覧
nnoremap <silent> um :<C-u>Unite file_mru<CR>

"バッファ操作
nnoremap <C-m><C-n> :bn<CR>
nnoremap <C-m><C-p> :bp<CR>
nnoremap <C-m><C-b> <C-^>

開きたいファイルを探すときにめちゃくちゃ便利。

バッファ操作で1個前に開いてたファイルに戻りたいとかめちゃくちゃあるので…

rking/ag.vim

" ag
nmap <Space><Space> :Ag <c-r>=expand("<cword>")<cr><cr>
nnoremap <space>/ :Ag 

" quickrun
let g:quickrun_config = {
    \   "_" : {
    \       "outputter/buffer/split" : ":botright 8sp",
    \       "outputter/buffer/close_on_empty" : 1
    \   },
    \}

au FileType qf nnoremap <silent><buffer>q :quit<CR>

space + / でagコマンドがvim上で叩ける。grepよりもめちゃくちゃ速い

quickrunと組み合わせるといい感じに表示される

ctrlp.vim

"let g:ctrlp_clear_cache_on_exit = 0
let g:ctrlp_max_height          = 20
let g:ctrlp_user_command = 'ag %s -l'

let g:ctrlp_use_caching = 0
if executable('ag')
    set grepprg=ag\ --nogroup\ --nocolor

    let g:ctrlp_user_command = 'ag %s -l --nocolor -g ""'
else
  let g:ctrlp_user_command = ['.git', 'cd %s && git ls-files . -co --exclude-standard', 'find %s -type f']
  let g:ctrlp_prompt_mappings = {
    \ 'AcceptSelection("e")': ['<space>', '<cr>', '<2-LeftMouse>'],
    \ }
endif

ctrl + pでファイルの絞込検索ができるが、毎回キャッシュが消えるので起動の度に時間かかるのが難点だった。

ctrlp_clear_cache_on_exit = 0を設定すると早くなるがキャッシュを再生成しないとダメで、F5で再生成すると何故かオレの環境でバグるという悲しみ…

調べたらAgコマンドで高速にできた!プロジェクトの規模によるだろうが、体感1秒もかからない。

szw/vim-tags

ctagをいい感じにしてくれる。

:TagsGenerateで自動生成してくれる。ctrl + ] で飛べる

brew install ctags

# .gitignoreに入ってないので追加する or 自分の環境だけであればexcludeに入れる
cat >> .git/info/exclude << "EOF"
Gemfile.lock.tags
tags
EOF
" ctag
let g:vim_tags_project_tags_command = "ctags -f tags -R . 2>/dev/null"
let g:vim_tags_gems_tags_command = "ctags -R -f Gemfile.lock.tags `bundle show --paths` 2>/dev/null"
set tags+=tags,Gemfile.lock.tags
nnoremap <C-]> g<C-]>

リンク

okb_m
どこかに小さいプログラムをあげようと思ってここにあげることにしました。 へぼプログラマーです。 https://www.wantedly.com/users/27437
http://okbm.hatenablog.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away