Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5608

Vim pluginへの入門[NeoBundle.vim]

$
0
0

Plugin

vimを使ってみたけどもの足りない。
機能拡張しましょう。
そうそれがプラグイン!!
偉大なvimプラグイン作成者の方々に拍手

管理する

現代は管理社会ですなんでも管理しちゃいましょー
Neobundle.vim が最高にクールなので使わない手はないです。

NeoBundle.vimとは

次世代的なプラグイン管理方法です。
プラグインの導入から更新、削除までサックサックです。

環境

vim -> バージョンが7.3.885以降のもので +Lua だと言うことなしです。
git -> 入れといてください

導入

実際に導入するにあたって、楽ちんな方法を提供します。

.vimrc
" neobundle settings {{{if has('vim_starting')setnocompatible  " neobundle をインストールしていない場合は自動インストールif!isdirectory(expand("~/.vim/bundle/neobundle.vim/"))
    echo "install neobundle..."    " vim からコマンド呼び出しているだけ neobundle.vim のクローン
    :call system("git clone git://github.com/Shougo/neobundle.vim ~/.vim/bundle/neobundle.vim")endif  " runtimepath の追加は必須setruntimepath+=~/.vim/bundle/neobundle.vim/endifcall neobundle#begin(expand('~/.vim/bundle'))letg:neobundle_default_git_protocol='https'" neobundle#begin - neobundle#end の間に導入するプラグインを記載します。
NeoBundleFetch 'Shougo/neobundle.vim'" ↓こんな感じが基本の書き方
NeoBundle 'nanotech/jellybeans.vim'" vimrc に記述されたプラグインでインストールされていないものがないかチェックする
NeoBundleCheck
call neobundle#end()filetype plugin indent on" どうせだから jellybeans カラースキーマを使ってみましょうsett_Co=256syntaxoncolorscheme jellybeans

NeoBundleCheck の段階で jellybeans.vim がインストールされていないので、インストールするか聞かれます。
y を入力して Enter を押すとインストールされます。

基本的なコマンドは以下の通りです。

コマンド動作
:NeoBundleInstallプラグインの新規インストール
:NeoBundleUpdateインストール済みのプラグインのアップデート
:NeoBundleCleanvimrcにないインストール済みのプラグインを掃除
:NeoBundleSourceプラグインの読み込み直し、後述の NeoBundleLasy と組み合わせたりする

構文

導入だけしたい人はここは必要ないので飛ばして

"    通常(user/repositoryはそれぞれgithubのユーザ,リポジトリを入力)"    []で囲っているものは省略可
NeoBundle 'user/repository' [,version] [,option]
"遅延読み込み(stringは'hoge'といった文字列,listは['hoge','foo','bar']といった文字列の集合)"    filetypesにはhtml,css,c,cpp,java,ruby,eruby,pythonといったものを入れる"    commandsには各プラグインのコマンドを入れる"    insertはインサートモードに入ったときに読み込まれる"    mappngsはプラグインで定められているマッピングを呼び出したとき"    autoload内でそのプラグインに見合っただけ入れとけばオーケー(補完プラグインならinsertのみなど)
NeoBundleLasy 'user/repository', {
  \ 'autoload' : {
  \   'filetypes' : string|list,
  \   'commands'  : string|list,
  \   'mappings'  : string|list,
  \   'insert'    : 1,
  \ }}
"フェッチ(ランタイムパスに追加されないらしい)
NeoBundleFetch 'user/repository'"その他オプション"   スクリプトの実施'build' : {'windows|mac|cygwin|unix|others' : string}
"   最小動作バージョンの記載(バージョンの書き方はいろいろある)'vim_version' : '7|7.3|7.3.885'"   無効化(conditionが1と評価された際にプラグインを無効化する)
  'disabled : condition

オススメのプラグイン

個人的におすすめのプラグインを大量紹介します

unite.vim

他のプラグインからも使われている便利ランチャー
普段使いではファイラーとして機能しているが、奥に秘めたポテンシャルは無限大
下記の設定では<C-u><C-f><C-u><C-u>に特にお世話になっている
ファイルの一覧では<C-n>は下方向、<C-p>は上方向に移動する。(この操作方法のプラグインが結構ある)
また上端の > に文字列を入力することによって絞り込み検索を行い、Enterでファイルを開くのが基本の使い方
なお、Escを2回押すことで unite で開いたバッファを閉じるように設定している(楽)
<C- >はCtrl+いずれかのキー

.vimrc
NeoBundle 'Shougo/unite.vim'" unite {{{letg:unite_enable_start_insert=1
nmap <silent><C-u><C-b> :<C-u>Unite buffer<CR>
nmap <silent><C-u><C-f> :<C-u>UniteWithBufferDir -buffer-name=filesfile<CR>
nmap <silent><C-u><C-r> :<C-u>Unite -buffer-name=registerregister<CR>
nmap <silent><C-u><C-m> :<C-u>Unite file_mru<CR>
nmap <silent><C-u><C-u> :<C-u>Unite buffer file_mru<CR>
nmap <silent><C-u><C-a> :<C-u>UniteWithBufferDir -buffer-name=files buffer file_mru bookmark file<CR>auFileType unite nmap <silent><buffer><expr><C-j> unite#do_action('split')auFileType unite imap <silent><buffer><expr><C-j> unite#do_action('split')auFileType unite nmap <silent><buffer><expr><C-l> unite#do_action('vsplit')auFileType unite imap <silent><buffer><expr><C-l> unite#do_action('vsplit')auFileType unite nmap <silent><buffer><ESC><ESC>qauFileType unite imap <silent><buffer><ESC><ESC><ESC>q" }}}

neomru.vim

unite.vim から独立した機能
ファイル履歴を記録してくれている
こいつがいれば上記unite.vimにより<C-u><C-u>で以前開いたファイルが表示される

.vimrc
NeoBundle 'Shougo/neomru.vim', {
  \ 'depends' : 'Shougo/unite.vim'
  \ }

vimproc

vim に非同期処理を提供してくれる縁の下の力持ち
多数のプラグインがこいつを頼りに高速化している。

.vimrc
NeoBundle 'Shougo/vimproc', {
  \ 'build' : {
  \     'windows' : 'make -f make_mingw32.mak',
  \     'cygwin' : 'make -f make_cygwin.mak',
  \     'mac' : 'make -f make_mac.mak',
  \     'unix' : 'make -f make_unix.mak',
  \    },
  \ }

neocomplete.vim

クソ強力な補完機能を使えるようになる
vimproc で高速化するやつ...というか作者が一緒
これも<C-n>,<C-p>で補完候補から選択する

.vimrc
if has('lua')
  NeoBundleLazy 'Shougo/neocomplete.vim', {
    \ 'depends' : 'Shougo/vimproc',
    \ 'autoload' : { 'insert' : 1,}
    \ }
endif" neocomplete {{{letg:neocomplete#enable_at_startup               =1letg:neocomplete#auto_completion_start_length    =3letg:neocomplete#enable_ignore_case              =1letg:neocomplete#enable_smart_case               =1letg:neocomplete#enable_camel_case               =1letg:neocomplete#use_vimproc                     =1letg:neocomplete#sources#buffer#cache_limit_size =1000000letg:neocomplete#sources#tags#cache_limit_size   =30000000letg:neocomplete#enable_fuzzy_completion         =1letg:neocomplete#lock_buffer_name_pattern        ='\*ku\*'" }}}

vimshell

vim からシェルを簡単に使えるようになる便利屋
画面分割してシェルを使える VimShellPop がオススメ。
縮めて vp にマッピングしている。

.vimrc
NeoBundleLazy 'Shougo/vimshell', {
  \ 'depends' : 'Shougo/vimproc',
  \ 'autoload' : {
  \   'commands' : [{ 'name' : 'VimShell','complete' : 'customlist,vimshell#complete'},
  \                 'VimShellExecute','VimShellInteractive',
  \                 'VimShellTerminal','VimShellPop'],
  \   'mappings' : ['<Plug>(vimshell_switch)']
  \ }}

" vimshell {{{
nmap <silent>vs :<C-u>VimShell<CR>
nmap <silent> vp :<C-u>VimShellPop<CR>" }}}

yankround

ヤンク履歴を保持してくれるやつ
ペースト後に<C-p><C-n>を押してヤンク履歴をペーストできる
いわゆるコピペ拡張
unite.vim と連携することで、(この設定では)\<C-p>で履歴一覧から絞り込み検索が可能

.vimrc
NeoBundle 'LeafCage/yankround.vim'" yankround.vim {{{
nmap p<Plug>(yankround-p)
nmap P<Plug>(yankround-P)
nmap <C-p><Plug>(yankround-prev)
nmap <C-n><Plug>(yankround-next)letg:yankround_max_history =100nnoremap<Leader><C-p> :<C-u>Unite yankround<CR>"}}}

vimfiler

ファイルビューア
<C-u><C-j>で縦分割で開閉できるように設定してみた

.vimrc
NeoBundleLazy 'Shougo/vimfiler', {
  \ 'depends' : ["Shougo/unite.vim"],
  \ 'autoload' : {
  \   'commands' : [ "VimFilerTab","VimFiler","VimFilerExplorer","VimFilerBufferDir" ],
  \   'mappings' : ['<Plug>(vimfiler_switch)'],
  \   'explorer' : 1,
  \ }}


" vimfiler {{{letg:vimfiler_as_default_explorer  =1letg:vimfiler_safe_mode_by_default =0letg:vimfiler_data_directory       = expand('~/.vim/etc/vimfiler')nnoremap<silent><C-u><C-j> :<C-u>VimFilerBufferDir -split -simple -winwidth=35-no-quit -toggle<CR>" }}}

vim-autoclose

括弧を自動的に閉じてくれるやつ
なお閉じ括弧は入力しても2重にならない素敵仕様

.vimrc
NeoBundle 'Townk/vim-autoclose'

vim-endwise:.vimrc

ifとかの終了宣言を自動で挿入してくれるやつ
デフォルト設定で十分使える

.vimrc
NeoBundleLazy 'tpope/vim-endwise', {
  \ 'autoload' : { 'insert' : 1,}}

memolist.vim

メモを取る際に使う
mnで新規作成、mlでリスト化、mgでgrep検索が出来るようにマッピングしてみた
なおメモはGoogleDriveにてクラウド管理するようにしている
g:memolist_pathでお好きなディレクトリへどうぞ

.vimrc
NeoBundle 'glidenote/memolist.vim'" memolist {{{letg:memolist_path = expand('~/GoogleDrive/memolist')letg:memolist_gfixgrep =1letg:memolist_unite =1letg:memolist_unite_option ="-vertical -start-insert"nnoremap mn  :MemoNew<CR>nnoremapml  :MemoList<CR>nnoremap mg  :MemoGrep<CR>" }}}

vim-easymotion

超高速で簡単な移動がコンセプト
s[key][key][done]の4キーで画面内のどこへでも移動可能
移動したいところを決めてから使う最強のカーソル移動プラグイン
詳しくは過去記事を参照してください

.vimrc
NeoBundle 'Lokaltog/vim-easymotion'" vim-easymotion {{{letg:EasyMotion_do_mapping =0
nmap s<Plug>(easymotion-s2)
xmap s<Plug>(easymotion-s2)
omap z <Plug>(easymotion-s2)
nmap g/ <Plug>(easymotion-sn)
xmap g/ <Plug>(easymotion-sn)
omap g/ <Plug>(easymotion-tn)letg:EasyMotion_smartcase =1
map <Leader>j<Plug>(easymotion-j)
map <Leader>k<Plug>(easymotion-k)letg:EasyMotion_startofline =0letg:EasyMotion_keys ='QZASDFGHJKL;'letg:EasyMotion_use_upper =1letg:EasyMotion_enter_jump_first =1" }}}

vim-easy-align

文章整形プラグイン
以下のような文章も即すっきり
ビジュアルモードで選択して、Enter -> 整列したい文字
ちなみに整形したい文字列が複数個ある下記のような場合は Enter -> * -> 整列したい文字(下記例では:)

"整形前letg:jellybeans_overrides = {
  \ 'Todo': { 'guifg': '151515','guibg': 'd0d033','ctermfg': 'Black','ctermbg': 'Yellow' },
  \ 'SignColumn': { 'guifg': 'f0f0f0','guibg': '333333','ctermfg': 'Black','ctermbg': 'Gray' },
  \ 'SpecialKey': { 'guifg': 'a0a000','guibg': '2c2c2c','ctermfg': 'Black','ctermbg': 'Gray' },
  \ }

"整形後letg:jellybeans_overrides = {
  \ 'Todo':       { 'guifg': '151515','guibg': 'd0d033','ctermfg': 'Black','ctermbg': 'Yellow' },
  \ 'SignColumn': { 'guifg': 'f0f0f0','guibg': '333333','ctermfg': 'Black','ctermbg': 'Gray' },
  \ 'SpecialKey': { 'guifg': 'a0a000','guibg':  '2c2c2c','ctermfg': 'Black','ctermbg': 'Gray' },
  \ }
.vimrc
NeoBundleLazy 'junegunn/vim-easy-align', {
  \ 'autoload': {
  \   'commands' : ['EasyAlign'],
  \   'mappings' : ['<Plug>(EasyAlign)'],
  \ }}

" vim-easy-align {{{
vmap <Enter><Plug>(EasyAlign)
nmap <Leader>a<Plug>(EasyAlign)" }}}

vim-markdown

vimのデフォルトシンタックスでは不満がある人向け

.vimrc
NeoBundle 'rcmdnk/vim-markdown'" vim-markdown {{{letg:vim_markdown_folding_disabled =1" }}}

以降は個人的な推奨プラグイン

neosnippet, neosnippet-snippets

スニペット補完をおこなえるようになる
if<C-k>などは多くの言語で動作するだろう

"#:conditionで入力状態となり、<C-k>で数字順に数字:ターゲットへジャンプ(下記はvimでの実行例)if #:condition
  <`0:TARGET`>endif
.vimrc
NeoBundleLazy 'Shougo/neosnippet', {
  \ 'depends' : 'Shougo/neosnippet-snippets',
  \ 'autoload' : {
  \   'insert' : 1,
  \   'filetypes' : 'snippet',
  \ }}
NeoBundle 'Shougo/neosnippet-snippets'letg:neosnippet#data_directory     = expand('~/.vim/etc/.cache/neosnippet')letg:neosnippet#snippets_directory = [expand('~/.vim/.bundle/neosnippet-snippets/neosnippets'),expand('~/dotfiles/snippets')]
" neosnippet {{{
imap <C-k><Plug>(neosnippet_expand_or_jump)smap<C-k><Plug>(neosnippet_expand_or_jump)" }}}

switch.vim

true/falseとかを瞬時に切り替えてくれる
+と-で切り替えられるようにしている
設定すれば独自でトグルを設定できるが、私は使っていない

.vimrc
NeoBundle 'AndrewRadev/switch.vim'" switch {{{
nmap + :Switch<CR>
nmap - :Switch<CR>" }}}

vim-surround, matchit

テキストを囲みや括弧のカーソル移動機能を拡張する
いろいろと機能豊富

.vimrc
NeoBundle 'tpope/vim-surround'
NeoBundle 'vim-scripts/matchit.zip'

open-browser.vim, dash.vim

カーソルの下にある単語をgxで調べてくれるopen-browser
カーソルの下にあるプログラムの単語を<Leader>d(Leaderはデフォルトだと\)でDashで調べてくれるdash.vim
Dash for Mac - Documentation Browser, Snippet Manager - Kapeli
からダウンロードしてください(Homebrewでもダウンロード可)

:.vimrc
NeoBundle 'tyru/open-browser.vim'" open-browser {{{letg:netrw_nogx =1" disable netrw's gx mapping.
nmap gx <Plug>(openbrowser-smart-search)" }}}

NeoBundle 'rizzatti/dash.vim'" dash.vim {{{
nmap <Leader>d<Plug>DashSearch
" }}}

プログラム言語に関係するプラグインたち

vim-quickrun

実行する言語で自動化の環境が整っている場合あまり出番がない
でもプログラムの編集状態から実行できて、出力を得られる
\rで編集中のファイルを実行する

.vimrc
NeoBundleLazy 'thinca/vim-quickrun', {
  \ 'autoload' : {
  \   'mappings' : [['n','\r']],
  \   'commands' : ['QuickRun']
  \ }}

" quickrun {{{letg:quickrun_config = {}
letg:quickrun_config._ = { 'runner' : 'vimproc',
  \ 'runner/vimproc/updatetime' : 200,
  \ 'outputter/buffer/split' : ':botright 8sp',
  \ 'outputter' : 'multi:buffer:quickfix',
  \ 'hook/close_buffer/enable_empty_data' : 1,
  \ 'hook/close_buffer/enable_failure' : 1,
  \ }
nnoremap<expr><silent><C-c> quickrun#is_running() ? quickrun#sweep_sessions() : "\<C-c>"" }}}

emmet-vim

HTMLのタグを一瞬で入力できる。
<C-y>nで次のタグ入力箇所に移動できたりフロントエンドの味方
利用している技術はこれだと思うemmet

    div.container>div.col-sm-6.col-md-4>ul*3>ui*4
    <!-- 入力後にインサートモードのまま<C-y>,で↓の状態に --><divclass="container"><divclass="col-sm-6 col-md-4"><ul><ui></ui><ui></ui><ui></ui><ui></ui></ul><ul><ui></ui><ui></ui><ui></ui><ui></ui></ul><ul><ui></ui><ui></ui><ui></ui><ui></ui></ul></div></div>
.vimrc
NeoBundleLazy 'mattn/emmet-vim', {
  \ 'autoload' : {
  \   'filetypes' : ['html','html5','eruby','jsp','xml','css','scss','coffee'],
  \   'commands' : ['<Plug>ZenCodingExpandNormal']
  \ }}
" emmet {{{letg:use_emmet_complete_tag =1letg:user_emmet_settings = {
  \ 'lang' : 'ja',
  \ 'html' : {
  \   'indentation' : '  '
  \ }}
" }}}

その他

いっぱいあるのでプラグインの設定だけにして、説明は省きます

.vimrc
" Ruby on rails
NeoBundle 'tpope/vim-rails'

NeoBundleLazy 'alpaca-tc/alpaca_tags', {
  \ 'depends': ['Shougo/vimproc','Shougo/unite.vim'],
  \ 'autoload' : {
  \   'commands' : ['Tags','TagsUpdate','TagsSet','TagsBundle','TagsCleanCache'],
  \   'unite_sources' : ['tags']
  \ }}
" alpaca_tags {{{letg:alpaca_update_tags_config = {
  \ '_' : '-R --sort=yes --languages=-js,html,css',
  \ 'ruby': '--languages=+Ruby',
  \ }
" }}}

NeoBundleLazy 'vim-ruby/vim-ruby', {
  \ 'autoload' : {'filetypes' : ['ruby','eruby']}}

" Python
NeoBundleLazy "davidhalter/jedi-vim", {
  \ "autoload": {
  \   "filetypes": ["python","python3","djangohtml"],
  \ },
  \ "build" : {
  \   "mac"  : "pip install jedi",
  \   "unix" : "pip install jedi",
  \ }}
" jedi-vim {{{letg:jedi#rename_command ='<Leader>R'letg:jedi#goto_assignments_command ='<Leader>G'autocmdFileType python setlocalomnifunc=jedi#completions
letg:jedi#completions_enabled =0letg:jedi#auto_vim_configuration =0" }}}" html

NeoBundle 'hail2u/vim-css3-syntax'
NeoBundle 'othree/html5.vim'" javascript
NeoBundle 'kchmck/vim-coffee-script'
NeoBundle 'moll/vim-node'
NeoBundle 'pangloss/vim-javascript'

最後に

今回は酔っぱらいながら書いているので誤字、脱字、間違いの指摘大歓迎です。
以前の投稿からだいぶ間隔が空きました。
北の大地から東京に出てきて仕事をして、AWSに関することを多く学んだのでいずれそれを記事にする予定です。
vimの記事については未定


Viewing all articles
Browse latest Browse all 5608

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>