満たす要件
- macOS前提
- lua 前提
- 自動補完
- jsの設定も含まれている
- gitコマンドがvimから叩ける
- gitブランチがステータスバーに表示される
- かっこいい
- かっこいい
- themeは自分でターミナルのインスペクタでいじる
- かっこいい
- ジョブズの息吹を感じる
- 正義
Plug
各自ググってインストールしておくこと
.vimrc
~/.vimrc
set nocompatible
filetype off
"plugを使ってインストールcall plug#begin('~/.vim/plugged')if has('nvim')
Plug 'Shougo/deoplete.nvim',{'do':':UpdateRemotePlugins'}else
Plug 'Shougo/deoplete.nvim'
Plug 'roxma/nvim-yarp'
Plug 'roxma/vim-hug-neovim-rpc'endif"----------------------------------------------------------" インストール"----------------------------------------------------------if has('lua')" コードの自動補完
Plug 'Shougo/neocomplete.vim'" スニペットの補完機能
Plug 'Shougo/neosnippet'" スニペット集
Plug 'Shougo/neosnippet-snippets'endif"----------------------------------------------------------" neocomplete・neosnippetの設定"----------------------------------------------------------if has('neocomplete.vim')" Vim起動時にneocompleteを有効にするletg:neocomplete#enable_at_startup =1" smartcase有効化. 大文字が入力されるまで大文字小文字の区別を無視するletg:neocomplete#enable_smart_case =1" 3文字以上の単語に対して補完を有効にするletg:neocomplete#min_keyword_length =3" 区切り文字まで補完するletg:neocomplete#enable_auto_delimiter =1" 1文字目の入力から補完のポップアップを表示letg:neocomplete#auto_completion_start_length =1" バックスペースで補完のポップアップを閉じる
inoremap <expr><BS> neocomplete#smart_close_popup()."<C-h>"" エンターキーで補完候補の確定. スニペットの展開もエンターキーで確定・・・・・・②
imap <expr><CR> neosnippet#expandable() ? "<Plug>(neosnippet_expand_or_jump)": pumvisible() ? "<C-y>":"<CR>"" タブキーで補完候補の選択. スニペット内のジャンプもタブキーでジャンプ・・・・・・③
imap <expr><TAB> pumvisible() ? "<C-n>": neosnippet#jumpable() ? "<Plug>(neosnippet_expand_or_jump)":"<TAB>"endifletg:deoplete#enable_at_startup =1" for はファイルタイプがphpならプラグインを読み込む " do はプラグインインストール、アップデート時に実行する内容
Plug 'lvht/phpcd.vim',{'for':'php','do':'composer install'}
Plug 'pangloss/vim-javascript',{'for':['javascript','javascript.jsx']}
Plug 'othree/yajs.vim',{'for':['javascript','javascript.jsx']}
Plug 'othree/es.next.syntax.vim',{'for':['javascript','javascript.jsx']}
Plug 'othree/javascript-libraries-syntax.vim',{'for':['javascript','javascript.jsx']}
Plug 'python-mode/python-mode',{'branch':'develop'}
Plug 'scrooloose/nerdtree'
Plug 'itchyny/lightline.vim'
Plug 'airblade/vim-gitgutter'
Plug 'tpope/vim-fugitive'
Plug 'derekwyatt/vim-scala'
Plug 'shime/vim-livedown'
Plug 'flowtype/vim-flow'
Plug 'Yggdroot/indentLine'
Plug 'simeji/winresizer'call plug#end()filetype plugin indent on"起動したら以下を実行":PluginInstall"syntax hilightを自動で呼び出すfunction! EnableJavascript()" Setup used librariesletg:used_javascript_libs='jquery,underscore,react,flux,jasmine,d3'letb:javascript_lib_use_jquery=1letb:javascript_lib_use_underscore=1letb:javascript_lib_use_react=1letb:javascript_lib_use_flux=1letb:javascript_lib_use_jasmine=1letb:javascript_lib_use_d3=1letg:flow#flowpath =/usr/local/bin/flow
endfunction"===================================================" filetype=cpp が設定された時に呼ばれる関数" Vim で C++ の設定を行う場合はこの関数内で記述する"===================================================function!s:cpp()" インクルードパスを設定する" gf などでヘッダーファイルを開きたい場合に影響するsetlocal path+=/usr/include:/usr/include/c++/4.2.1:/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1:/usr/local/include:/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/9.1.0/include:/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include:/System/Library/Frameworks:/Library/Frameworks
"タブ文字の長さsetlocal tabstop=4setlocal shiftwidth=4set autoindent " 改行時に前の行のインデントを継続する
set smartindent " 改行時に前の行の構文をチェックし次の行のインデントを増減する
" 括弧を構成する設定に <> を追加する" template<> を多用するのであればsetlocal matchpairs+=<:>" 最後に定義された include 箇所へ移動してを挿入モードへ
nnoremap <buffer><silent><Space>ii :execute "?".&include<CR>:noh<CR>o" BOOST_PP_XXX 等のハイライトを行う
syntax match boost_pp /BOOST_PP_[A-z0-9_]*/
highlight link boost_pp cppStatement
endfunction"=================================================" filetype=javascript の設定"================================================="function! s:js()"endfunction
autocmd FileType javascript,javascript.jsx call EnableJavascript()"文字コードset encoding=utf-8set fileformats=unix,dos,mac
"" NERDTress File highlightingfunction! NERDTreeHighlightFile(extension, fg, bg, guifg, guibg)
exec 'autocmd filetype nerdtree highlight '.a:extension.' ctermbg='.a:bg.' ctermfg='.a:fg.' guibg='.a:guibg.' guifg='.a:guifg
exec 'autocmd filetype nerdtree syn match '.a:extension.' #^\s\+.*'.a:extension.'$#'endfunctioncall NERDTreeHighlightFile('py','yellow','none','yellow','#151515')call NERDTreeHighlightFile('md','blue','none','#3366FF','#151515')call NERDTreeHighlightFile('yml','yellow','none','yellow','#151515')call NERDTreeHighlightFile('config','yellow','none','yellow','#151515')call NERDTreeHighlightFile('conf','yellow','none','yellow','#151515')call NERDTreeHighlightFile('json','yellow','none','yellow','#151515')call NERDTreeHighlightFile('html','yellow','none','yellow','#151515')call NERDTreeHighlightFile('styl','cyan','none','cyan','#151515')call NERDTreeHighlightFile('css','cyan','none','cyan','#151515')call NERDTreeHighlightFile('rb','Red','none','red','#151515')call NERDTreeHighlightFile('js','Red','none','#ffa500','#151515')call NERDTreeHighlightFile('php','Magenta','none','#ff00ff','#151515')"キーマップ
map <C-n>:NERDTreeToggle<CR>"文字コードをUFT-8に設定set fenc=utf-8" バックアップファイルを作らないset nobackup
" スワップファイルを作らないsetnoswapfile" 編集中のファイルが変更されたら自動で読み直すset autoread
" バッファが編集中でもその他のファイルを開けるようにset hidden
" 入力中のコマンドをステータスに表示するset showcmd
let NERDTreeShowHidden=1" ========================= 見た目系 ==========================
syntax enable
" 新しいウィンドウを右に開くset splitright
" 行番号を表示setnumber" 現在の行を強調表示set cursorline
" 行末の1文字先までカーソルを移動できるようにset virtualedit=onemore
" インデントはスマートインデントset smartindent
set expandtab
set tabstop=2set shiftwidth=2letg:indentLine_color_term=239letg:indentLine_char='c'" ビープ音を可視化set visualbell
" 括弧入力時の対応する括弧を表示set showmatch
" ステータスラインを常に表示set laststatus=2set wildmode=list:longest
" 折り返し時に表示行単位での移動できるようにする
nnoremap j gj
nnoremap k gk
highlight LineNr ctermfg=28 ctermbg=59set backspace=indent,eol,start"NERDTree
autocmd vimenter * NERDTree
map <C-n>:NERDTreeToggle<CR>" ============================ Tab系 ================================" Tab文字を半角スペースにするset expandtab
" 行頭以外のTab文字の表示幅(スペースいくつ分)set tabstop=4" 行頭でのTab文字の表示幅set shiftwidth=4" 検索系" 検索文字列が小文字の場合は大文字小文字を区別なく検索するset ignorecase
" 検索文字列に大文字が含まれている場合は区別して検索するset smartcase
" 検索文字列入力時に順次対象文字列にヒットさせるset incsearch
" 検索時に最後まで行ったら最初に戻るset wrapscan
" 検索語をハイライト表示set hlsearch
" ESC連打でハイライト解除
nmap <Esc><Esc>:nohlsearch<CR><Esc>
inoremap {<Enter>{}<Left><CR><ESC><S-o>
inoremap [<Enter>[]<Left><CR><ESC><S-o>
inoremap (<Enter>()<Left><CR><ESC><S-o>"========================= vim-gitgutter ==============================letg:gitgutter_sign_added='+'letg:gitgutter_sign_modified='➜'letg:gitgutter_sign_removed='-'"========================= lightline.vim ===============================letg:lightline={ \'colorscheme':'landscape', \'mode_map':{'c':'NORMAL'}, \'active':{ \'left':[ \['mode','paste'], \['fugitive','gitgutter','filename'], \], \'right':[ \['lineinfo','syntastic'], \['percent'], \['charcode','fileformat','fileencoding','filetype'], \] \}, \'component_function':{ \'modified':'MyModified', \'readonly':'MyReadonly', \'fugitive':'MyFugitive', \'filename':'MyFilename', \'fileformat':'MyFileformat', \'filetype':'MyFiletype', \'fileencoding':'MyFileencoding', \'mode':'MyMode', \'syntastic':'SyntasticStatuslineFlag', \'charcode':'MyCharCode', \'gitgutter':'MyGitGutter', \}, \}function! MyModified()return&ft =~'help\|vimfiler\|gundo' ? '':&modified ? '+':&modifiable ? '':'-'endfunctionfunction! MyReadonly()return&ft !~? 'help\|vimfiler\|gundo'&& &ro ? '':''endfunctionfunction! MyFilename()return(''!= MyReadonly() ? MyReadonly().' ':''). \(&ft =='vimfiler' ? vimfiler#get_status_string(): \&ft =='unite' ? unite#get_status_string(): \&ft =='vimshell' ? substitute(b:vimshell.current_dir,expand('~'),'~',''): \''!= expand('%:t') ? expand('%:t'):'[No Name]'). \(''!= MyModified() ? ' '. MyModified():'')endfunctionfunction! MyFugitive()tryif&ft !~? 'vimfiler\|gundo'&& exists('*fugitive#head')let _ = fugitive#head()return strlen(_) ? ' '._ :''endifcatchendtryreturn''endfunctionfunction! MyFileformat()return winwidth('.')>70 ? &fileformat :''endfunctionfunction! MyFiletype()return winwidth('.')>70 ? (strlen(&filetype) ? &filetype:'no ft'):''endfunctionfunction! MyFileencoding()return winwidth('.')>70 ? (strlen(&fenc) ? &fenc :&enc):''endfunctionfunction! MyMode()return winwidth('.')>60 ? lightline#mode():''endfunctionfunction! MyGitGutter()if! exists('*GitGutterGetHunkSummary') \||! get(g:,'gitgutter_enabled',0) \|| winwidth('.')<=90return''endiflet symbols =[ \g:gitgutter_sign_added.' ', \g:gitgutter_sign_modified.' ', \g:gitgutter_sign_removed.' ' \]let hunks = GitGutterGetHunkSummary()letret=[]foriin[0,1,2]if hunks[i]>0call add(ret, symbols[i]. hunks[i])endifendforreturnjoin(ret,' ')endfunction" https://github.com/Lokaltog/vim-powerline/blob/develop/autoload/Powerline/Functions.vimfunction! MyCharCode()if winwidth('.')<=70return''endif" Get the output of :asciiredir=>asciisilent!asciiredir END
ifmatch(ascii,'NUL')!=-1return'NUL'endif" Zero pad hex valueslet nrformat ='0x%02x'let encoding =(&fenc =='' ? &enc :&fenc)if encoding =='utf-8'" Zero pad with 4 zeroes in unicode fileslet nrformat ='0x%04x'endif" Get the character and the numeric value from the return value of :ascii" This matches the two first pieces of the return value, e.g." "<F> 70" => char: 'F', nr: '70'let[str, char, nr; rest]= matchlist(ascii,'\v\<(.{-1,})\>\s*([0-9]+)')" Format the numeric valuelet nr = printf(nrformat, nr)return"'". char ."' ". nr
endfunction